Если у пользователя есть определенная роль то в поле1 должно быть соответствуующее значение(это при открытии сохраненного документа),если же значение в поле1 не совпадает с тем которое там должно быть то выскакивает месаге ошибка и при закрытии или при нажатии на кнопку на ошибку должно закрыться форма где он вводит свои данные.Если документ новый(несохраненный) то в зависимости от роли в поле1 должно подставляться определенное значение.
Хорошо. Теперь надо понять, что это не одна задача, а две разные задачи!
1-я:
"Если документ новый(несохраненный) то в зависимости от роли в поле1 должно подставляться определенное значение."
Т.е. при выполнении условий, поле должно получить
2-я:
"Если у пользователя есть определенная роль то в поле1 должно быть соответствуующее значение(это при открытии сохраненного документа),если же значение в поле1 не совпадает с тем которое там должно быть то выскакивает месаге ошибка и при закрытии или при нажатии на кнопку на ошибку должно закрыться форма"
1-я задача решается путем записи значения в поле, в случае выполнения условий.
Например, в поле, в формулу по-умолчанию можно написать:
@If(@IsMember("[ROLE-NAME]"; @UserRoles)); "Field-Value-If-Role-Enabled"; "Field-Value-If-Role-Is-Not-Enabled")
2-я:
В обработчике события формы QueryOpen необходимо выполнить проверку условий и разрешить либо запретить открытие документа.
Узнать есть ли роль скриптом проще всего, используя специальную команду, которая выполняет формулу из скрипта. Но ею не следует злоупотр*цензура*ть. Но здесь подходит.
Например, заготовка функции:
Код:
Public Function IfUserHasRole(ARole As String) As Boolean
Dim ur As Variant
ur = Evaluate({@IsMember("[} & ARole & {]"; @UserRoles)})
IfUserHasRole = ur(0)
End Function
Рекомендую потратить пару минут и почитать о
Evaluate в справке.
Саму функцию можно поместить в раздел формы
(Globals), чтобы она была доступна в любом скрипте формы и элементов на ней.
Либо можно поместить ее в
LotusScript Library, а саму библиотеку подключить в форме через
USE
Обработчик получится приблизительно такой:
Код:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Dim someFieldValue As String
If Not(Isnewdoc) Then
someFieldValue = Source.Document.GetItemValue("SomeFieldName")(0)
If IfUserHasRole("ROLE-NAME") And (someFieldValue = "Some-Special-Value") Then
Continue = True
Else
Continue = False
Messagebox "Условия не выполнены! Документ не может быть открыт.", 0, "Уведомление"
End If
End If
End Sub
Забегу наперед! Это может быть не понятно, но важно не забыть!
Если документ новый, то объект Source.Document не существует еще. Поэтому, если надо будет в момент открытия документа на редактирование что-либо писать через back-end документ, то необходимо писать в
Postopen с учетом
Source.EditMode.
Добавлено:
... не будет правильно работать, если пользователь не будет явно прописан в ТУД. С этим надо быть аккуратным.
Добавлено: romanko
в справке посмотри обязательно!
Индекс: Fields, working with\described
И те доки, на которые этот ссылается: о типах полей, о том, будет ли поле изменяемым пользователем или программно.
Добавлено: И еще, если необходимо запретить пользователю создавать документ по определенной форме на основании некотороего условия, то приглядись к совету:
Если док создается с кнопки - там и делать проверку. Входит - @Command([Compose]; ....), нет - @Return(@Prompt(......)).
Но необходимо будет у формы отключить возможность создавать по ней документы из меню Create.
И сделать, например, в представлении кнопку с кодом, который проверяет условия, и, если выполняются, выполняет @Command([Compose]; ....), иначе показывает уведомление.
Либо, как сдесь советуют
Если хочется в форме - то не давать открывать док в Queryopen с проверкой на новизну ну и, Continue = False
расширить обработчик выше таким образом:
Код:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Dim someFieldValue As String
If Not(Isnewdoc) Then
someFieldValue = Source.Document.GetItemValue("SomeFieldName")(0)
If IfUserHasRole("ROLE-NAME") And (someFieldValue = "Some-Special-Value") Then
Continue = True
Else
Continue = False
Messagebox "Условия не выполнены! Документ не может быть открыт.", 0, "Уведомление"
End If
Else
If IfUserHasRole("ROLE-NAME") Then
Continue = True
Else
Continue = False
Messagebox "Условия не выполнены! Документ не может быть создан.", 0, "Уведомление"
End If
End If
End Sub