подстановка значения в поле1(если документ новый - несохраненный), поле пустое.
А зачем все в одно место впихивать? Разделите. У вас поле отдела вообще надо сделать computed when composed и вставить формулу определения отдела в него.
Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.
Ключевые ответы обсуждения и их оценка появятся здесь.
Участники с сильными ответами в этой теме появятся здесь.
подстановка значения в поле1(если документ новый - несохраненный), поле пустое.
Хорошо. Теперь надо понять, что это не одна задача, а две разные задачи!Если у пользователя есть определенная роль то в поле1 должно быть соответствуующее значение(это при открытии сохраненного документа),если же значение в поле1 не совпадает с тем которое там должно быть то выскакивает месаге ошибка и при закрытии или при нажатии на кнопку на ошибку должно закрыться форма где он вводит свои данные.Если документ новый(несохраненный) то в зависимости от роли в поле1 должно подставляться определенное значение.
Public Function IfUserHasRole(ARole As String) As Boolean
Dim ur As Variant
ur = Evaluate({@IsMember("[} & ARole & {]"; @UserRoles)})
IfUserHasRole = ur(0)
End Function
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
... не будет правильно работать, если пользователь не будет явно прописан в ТУД. С этим надо быть аккуратным.Что-то типа:
Но необходимо будет у формы отключить возможность создавать по ней документы из меню Create.Если док создается с кнопки - там и делать проверку. Входит - @Command([Compose]; ....), нет - @Return(@Prompt(......)).
расширить обработчик выше таким образом:Если хочется в форме - то не давать открывать док в 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
Наверное мне этот метод не очень нравится, вот я про него и не помнюА чем не устраивает NotesDatabase.QueryAccessRoles ?
это синтаксически неправильно. в @-формулах вспомните свой с-синтаксис - там команды отделяются ;@If(@IsMember("[1]"; @UserRoles); "Field-Value-If-Role-Enabled"; "Field-Value-If-Role-Is-Not-Enabled")
@If(@IsMember("[2]"; @UserRoles); "Field-Value-If-Role-Enabled"; "Field-Value-If-Role-Is-Not-Enabled")