Редактирование формы по кнопке

05.08.2016
13
1
#1
Добрый день, уважаемые форумчане!

Подскажите, пожалуйста, каким образом можно запретить редактирование документа, при этом разрешить редактирование только по кнопке Action.
Нашла подобное решение на сайте
Для просмотра контента необходимо: Войти или зарегистрироваться
(4 пункт), но нажатие кнопки, которой назначено действие

Код:
Sub Click(Source As Button)
     Dim workspace As New NotesUIWorkspace
     Dim uidoc As NotesUIDocument
     Set uidoc = workspace.CurrentDocument
     'Turn on allowEdit so Querymodechange will let it pass
     'Turn on EditMode
     allowEdit = True
     uidoc.EditMode = True
End Sub
не переводит документ на редактирование, и выполняется действие Querymodechange, отмеченное синим:

Код:
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
     If allowEdit Or (source.EditMode And Not allowEdit) Then
          allowEdit = False
     Else
          Messagebox  _
          "Use Edit mode action to edit document"
          continue = False
     End If
End Sub
 
Последнее редактирование:

savl

Lotus team
28.10.2011
2 136
104
#2
В Форме, Globals -> Declaration вставить строку: Dim allowEdit as boolean
Переменная должна быть глобальной, иначе она сбрасывается все время.
 

alexas1

Lotus team
10.04.2014
726
145
#3
В Форме, Globals -> Declaration вставить строку: Dim allowEdit as boolean
Переменная должна быть глобальной, иначе она сбрасывается все время.
луче писать не в переменную, а в поле и это же поле использовать для скрытия экшн "allowEdit", поле не "сохранять", эссесно
 
05.08.2016
13
1
#6
В итоге при нажатии на кнопку получаем:
"Нажми кнопку"
"All True"
В редактирование документ не переходит.

Если на Click такой скрипт
Код:
Sub Click(Source As Button)
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = workspace.CurrentDocument
    allowEdit = True
    uidoc.EditMode = True
    If     allowEdit = True And uidoc.EditMode = True Then
        Messagebox "All True"
    Else
        Messagebox "All False"
    End If
End Sub

то
В итоге при нажатии на кнопку получаем:
"Нажми кнопку"
"All False"
В редактирование документ не переходит.
Чет я вообще ничего не понимаю..
[code=LotusScript]Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
    If Not    allowEdit Then Continue = False
End Sub
Не помогает((

в Querymodechange добавила следующее:
Код:
    If Not allowEdit Then
        Continue = False
        Messagebox  "Нажми кнопку"
    End If
На кнопке Click
Код:
Sub Click(Source As Button)
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = workspace.CurrentDocument
    allowEdit = True
    uidoc.EditMode = True
    If     allowEdit = True Then
        Messagebox "All True"
    Else
        Messagebox "All False"
    End If
End Sub
 
Последнее редактирование модератором:

savl

Lotus team
28.10.2011
2 136
104
#7
я коппернул Ваш код, тоже не заработал.
Взял название переменной из Declaration и заменил им в событии и на кнопке - все заработало.
+ в Globals Initialize вставил строку:
allowEdit = false
Где-то ошибка в написании имени переменной.
 

alexas1

Lotus team
10.04.2014
726
145
#8
гдета ошибочка в буковках, перепиши врукопашную allowEdit в глобал и скопипасть её во все нужные места
с копипастом из инета так бывает
 

Вложения

05.08.2016
13
1
#9
Спасибо всем за помощь новичку, буду искать где очепятка закралась :)
 
05.08.2016
13
1
#10
Действительно, кнопка работает, но я не упомянула видимо одну важную вещь, что у меня используется Shared Actions, и в этом случае все плохо((
 
05.08.2016
13
1
#12
Для того, чтобы изменения в документ могли вносить только те пользователи, у которых есть права на кнопку, а не по даблклику или CTRL+E. Мб есть еще какая нить реализация, но с моими скудными знаниями я пока вижу только такой вариант..
 

garrick

Lotus team
26.10.2009
899
61
#13
Для того, чтобы изменения в документ могли вносить только те пользователи, у которых есть права на кнопку, а не по даблклику или CTRL+E. Мб есть еще какая нить реализация, но с моими скудными знаниями я пока вижу только такой вариант..
Про ACL базы и поля Authors/Readers что-нибудь слышали ранее?
 
05.08.2016
13
1
#14
Про ACL базы и поля Authors/Readers что-нибудь слышали ранее?
Слышала.. И даже использую немного)
В ACL у меня есть несколько ролей, для каждой кнопки у меня настроена видимость в зависимости от статуса документа и роли. Есть кнопка "Редактировать" (Shared Action), которая должна переводить документ в статус редактирования (и только она).
Буду благодарна, если подскажете более простой/правильный подход.
 

garrick

Lotus team
26.10.2009
899
61
#15
Поля Authors/Readers - позволяют, соответственно, задать права на просмотр и редактирование любого документа. Это гораздо более простой и гораздо более надёжный способ, ну и, соответственно, более правильный. Не нужно ничего химичить с сокрытием кнопок.
Для просмотра контента необходимо: Войти или зарегистрироваться
есть небольшое описание, весьма поверхностное на мой взгляд.
 

savl

Lotus team
28.10.2011
2 136
104
#16
@Fleerka у Вас наверняка все по умолчанию Editor в ACL или выше... Если следовать логике от @garrick ,то Вам необходимо будет создавать Authors/Readers поля.
Затем менять всем пользователям доступ на Author. Да, это правильный путь, не без своих заморочек правда... Так же сразу дам совет поля Authors/Readers сразу делать многозначными, всегда. Поверте, это потом может облегчить жизнь.
Если необходимо кому-то по работе иметь возможность редактировать все документы, в любой момент времени или независимо от статуса, то надо создать отдельное Authors поле, в котором будет роль. А затем эту роль назначить необходимому сотруднику или группе.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#17
@savl еще особенность - дефолтно, все доки доступны ридерам и выше на просмотр, если в доке нет ридерс! полей (авторс - у меня не влияло, но это м.б. связано в хэПагами)
 

savl

Lotus team
28.10.2011
2 136
104
#18
@lmike да, все верно. Если полей Readers нет или они пустые, то видны всем (кроме Depositor и No Access). Authors на видимость влияет только при наличии Readers полей.
что касается xPage... Если UI и DATA разнесены по разным базам, то там не только поля играют роль, но и ACL. Конечно все зависит от подхода...
 
05.08.2016
13
1
#19
Всем спасибо за дельные советы, попробую через авторс/ридерс реализовать.
Думается мне что это не последняя тема на этом форуме :)
 
05.08.2016
13
1
#20
Разбираюсь с полями ридерс и авторс и не могу понять что я делаю не так..
Создала 2 роли, и 2 формы. В каждой форме есть поле ридерс. В форме 1 ридерс = роль1, в форме 2 ридерс = роль2. Пользователю назначается роль 1 и Access = Reader . После прочтения мануалов у меня у меня сложилось впечатление, что в представлениях где отображаются записи из форм 1 и 2 пользователю должны быть видны только записи формы 1... Но у меня по какой то причине видны все записи, что позволяет пользователю спокойно просматривать и результаты из формы 2. Мб я как то не так интерпретировала прочтенное.. Помогите, пожалуйста, разобраться)