Проблема с условием в Access Formula

Тема в разделе "Lotus - Программирование", создана пользователем prokopulka, 29 июн 2010.

  1. prokopulka

    prokopulka Гость

    Здравствуйте!

    Возникла такая проблема.
    Есть форма, в ней секция, в которой находится поле "Body".
    Нужно, чтобы это поле становилось доступным для редактирования только для роли Office после того, как документ сохранен и имеет статус "Черновик"("Draft").

    Для этого я использую вкладку Access Formula (тип Computed for display) для секции, пишу в ней условие:

    <!--shcode--><pre><code class='@-formula'>@If(!@IsNewDoc & Status = "Draft";"[office]";"[none]")[/CODE]

    Затем захожу под пользователем с ролью Office, создаю и сохраняю документ, а данное поле не появляется.
    Если оставить в условии только !@IsNewDoc, то данный раздел также не появляется после сохранения.

    Думаю, что-то не так с использованием этой функции (@IsNewDoc) в Access Formula...

    Помогите понять, что не так, пожалуйста!
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    А регистр роли не влияет?
    + всегда люблю поставить явно скобки @If((!@IsNewDoc) & Status = "Draft";"[Office]";"[none]")

    Добавлено: А после переоткрытия документа не срабатывает?
    кстати, если у Вас для секции задано имя поля (Section Field Name), можете посмотреть, чему равно его значение после сохранения документа - так, для проверки правильности отработки формулы.
     
  3. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Как-то ты их дивно расставила )) Я бы так: @If(!@IsNewDoc & (Status = "Draft");"[Office]";"[none]")

    Меня тот же вопрос мучает.
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    А ты придира сегодня. Но прав, вот, например, совсем маньячно:
    @If((!@IsNewDoc) & (Status = "Draft");"[Office]";"[none]")
    и еще надо помнить, что роли "просто так" (без галочки Enforce consistent ACL) на локале не работают.
     
  5. prokopulka

    prokopulka Гость


    Регистр и скобки роли не играют (но на всякий случай попробовала по-разному - ничего не изменилось).

    После переоткрытия все тоже самое - поле не отображается.
     
  6. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    А в поле, указанном в Section Field Name что записано при открытом документе? или дизайн скрыт?
     
  7. prokopulka

    prokopulka Гость

    В этом документе у меня еще кнопка (она находится не в секции) должна при тех же условиях появляться после сохранения. В условии Hide Action if formula is true для нее пишу

    @IsNewDoc | !Status="Draft" | !@Contains(@UserRoles; "office")

    и все работает, как надо. Так что с ролями, думаю, все нормально...
     
  8. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    вы уверены, что ошибка именно в формуле? ну, чудес обычно не бывает)))
    1) посмотрите, что в поле или что говорит диалог "Кто может редактировать данную секцию" (при клике на секцию)? скопируйте точное имя роли, может, где-то русский символ затесался.
    2) может, случайно поставили скрытие на рт-поле
    3) может, просто секция свернута
     
  9. prokopulka

    prokopulka Гость

    Посмотрите в screen'е (сделан после сохранения документа под ролью Office).
    Там стоит "[none]"

    Добавлено:
    Если проблема не в формуле, я тогда не понимаю, почему, если вообще из условия убрать !@IsNewDoc, то поле для роли Office и статуса документа "Черновик" отображается всегда?
     

    Вложения:

    • 111.png
      111.png
      Размер файла:
      4 КБ
      Просмотров:
      120
  10. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    проверяйте, где-то что-то не то :)
    1) после переоткрытия всё работает.
    Field Name: InCard_Access
    Data Type: Text List
    Data Length: 12 bytes
    Seq Num: 1
    Dup Item ID: 0
    Field Flags: SUMMARY NOUPDATE

    "[office]"

    2) или кнопка сохранения типа
    @Command([FileSave]);
    @Command([ViewRefreshFields])
     
  11. prokopulka

    prokopulka Гость

    После переоткрытия-то получается, что нужное поле доступно для "[office]", а вот после сохранения остается "[none]".

    Что-то не пойму, что Вы имеете в виду)) Можно поподробнее, пожалуйста;)
     
  12. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Для проверки наличия у пользователя роли следует использовать @IsNotMember("[Office]"; @UserRoles). @Contains проверяет наличие подстроки в строке, соответственно в Вашем варианте будут ложные срабатывания, если в БД помимо "[Office]" есть роли типа "[PostOffice]", "[OfficeManager]" и т.п. Да и работает @IsNotMember быстрее, поскольку при первом же несовпадении заканчивает проверку, а @Contains ищет до конца строки.
    На кнопке сохранения после команды сохранения добавьте команду обновления документа, может формула не пересчитывается.
     
  13. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Может при первом же совпадении? ))

    prokopulka, рекомендую роли всегда использовать в коде в том же регистре, в котором они заведены в ТУД!
    Где-то это не важно, а где-то важно.

    У меня работает, но как и было сказано выше - надо переоткрывать документ, чтобы изменения стали действовать.
     
  14. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Я имел ввиду, что функция @IsNotMember(text; textlist) посимвольно сравнивает text с элементами списка textlist и при первом же несовпадении символов считает, что строки не равны. @Contains же проверяет "до упора".
    Разумеется, если text содержится в textlist при совпадении text и элемента textlist дальнейшая проверка прекращается. @Contains в этом смысле тоже ищет до первого совпадения.
     
  15. prokopulka

    prokopulka Гость

    В условии скрытия для кнопки поменяла !@Contains на @IsNotMember("[office]"; @UserRoles),теперь кнопка не появляется при сохранении. Что может быть не так?

    На кнопке сохранения добавила команду обновления документа, теперь там так:
    @Command ([FileSave]);
    @Command([RefreshHideFormulas] );
    @Command([ViewRefreshFields])

    Создаю и сохраняю документ под ролью office, теперь в свойствах документа для данной секции написано, что доступ для "[office]", но поле все равно не появляется:)

    Добавлено: Добавлено:
    Да я так обычно и делаю, просто уже и так и сяк пробовала, на всякий случай...))
    Так-то у меня тоже работает, но проблема в том, что изменения должны появляться сразу после сохранения документа.
     
  16. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Всю формулу "в студию" (с). Да, и как там с регистром, как точно роль записана в ACL?
    Попробуйте изменить тип поля на просто текст. Если будет появляться, значить проблема именно в том, что для рт-поля необходимо обязательно переоткрыть документ. Как — ищите в разделе codebase.
     
  17. prokopulka

    prokopulka Гость

    В условии Hide Action if formula is true для кнопки:
    @IsNewDoc | !Status="Draft" | @IsNotMember("[office]"; @UserRoles)
    В ACL роль записана [office] (с маленькой o).

    Добавлено:
    Поменяла тип поля на просто text, все равно не появляется.
     
  18. prokopulka

    prokopulka Гость

    @IsNewDoc | !Status="Draft" | @IsNotMember("[office]"; @UserRoles)
    В ACL роль записана [office] (с маленькой o).

    А, в этом условии с @IsNotMember("[office]"; @UserRoles) для кнопки все работает, я просто забыла O на o в '[office]" обратно поменять)))
    Так что остается только вопрос по условию для секции...
     
  19. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    prokopulka
    Я бы написал @IsNewDoc | Status != "Draft" | @IsNotMember("[office]"; @UserRoles), но не суть важно. А база где — на локале или на сервере? На локале могут быть проблемы.
    И попробуйте скопировать роль из ТУД — может быть банальная опечатка (русская о, с или е).
    — внимательней быть надо :), так народу мозги вывихнуть можно :).

    Добавлено:
    Добавьте на форму cfd поле с формулой из секции, чтоб контролировать, что там в каком случае вычисляется.
     
  20. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Ну и? В чем вопрос?
    Вариант 1: http://codeby.net/forum/threads/33206.html
    Если не сработает, не подойдет, то вариант 2: http://codeby.net/forum/threads/29669.html

    nvy
    А у тебя без переоткрытия срабатывает изменение прав доступа к секции? :)

    Добавлено: У меня и первый формыльный вариант срабатывает!
     
Загрузка...
Похожие Темы - Проблема условием Access
  1. AgniXRudra
    Ответов:
    1
    Просмотров:
    10
  2. Zloikaktus
    Ответов:
    0
    Просмотров:
    14
  3. c0de3r
    Ответов:
    5
    Просмотров:
    134
  4. DobermannTT
    Ответов:
    10
    Просмотров:
    140
  5. SoulPaladin
    Ответов:
    4
    Просмотров:
    136

Поделиться этой страницей