• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

F

Fleerka

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

Подскажите, пожалуйста, каким образом можно запретить редактирование документа, при этом разрешить редактирование только по кнопке 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 597
310
BIT
159
В Форме, Globals -> Declaration вставить строку: Dim allowEdit as boolean
Переменная должна быть глобальной, иначе она сбрасывается все время.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
34
В Форме, Globals -> Declaration вставить строку: Dim allowEdit as boolean
Переменная должна быть глобальной, иначе она сбрасывается все время.
луче писать не в переменную, а в поле и это же поле использовать для скрытия экшн "allowEdit", поле не "сохранять", эссесно
 
F

Fleerka

В Форме, Globals -> Declaration вставить строку: Dim allowEdit as boolean
Переменная должна быть глобальной, иначе она сбрасывается все время.
Есть и глобальная переменная allowEdit, но все равно не отрабатывает Action((
 
F

Fleerka

В итоге при нажатии на кнопку получаем:
"Нажми кнопку"
"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 597
310
BIT
159
я коппернул Ваш код, тоже не заработал.
Взял название переменной из Declaration и заменил им в событии и на кнопке - все заработало.
+ в Globals Initialize вставил строку:
allowEdit = false
Где-то ошибка в написании имени переменной.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
34
гдета ошибочка в буковках, перепиши врукопашную allowEdit в глобал и скопипасть её во все нужные места
с копипастом из инета так бывает
 

Вложения

  • forfleerka.zip
    26,3 КБ · Просмотры: 143
F

Fleerka

Спасибо всем за помощь новичку, буду искать где очепятка закралась :)
 
F

Fleerka

Действительно, кнопка работает, но я не упомянула видимо одну важную вещь, что у меня используется Shared Actions, и в этом случае все плохо((
 
F

Fleerka

Зачем такие хитрости?
Для того, чтобы изменения в документ могли вносить только те пользователи, у которых есть права на кнопку, а не по даблклику или CTRL+E. Мб есть еще какая нить реализация, но с моими скудными знаниями я пока вижу только такой вариант..
 

garrick

Lotus Team
26.10.2009
1 349
151
BIT
164
Для того, чтобы изменения в документ могли вносить только те пользователи, у которых есть права на кнопку, а не по даблклику или CTRL+E. Мб есть еще какая нить реализация, но с моими скудными знаниями я пока вижу только такой вариант..
Про ACL базы и поля Authors/Readers что-нибудь слышали ранее?
 
F

Fleerka

Про ACL базы и поля Authors/Readers что-нибудь слышали ранее?
Слышала.. И даже использую немного)
В ACL у меня есть несколько ролей, для каждой кнопки у меня настроена видимость в зависимости от статуса документа и роли. Есть кнопка "Редактировать" (Shared Action), которая должна переводить документ в статус редактирования (и только она).
Буду благодарна, если подскажете более простой/правильный подход.
 

garrick

Lotus Team
26.10.2009
1 349
151
BIT
164
Поля Authors/Readers - позволяют, соответственно, задать права на просмотр и редактирование любого документа. Это гораздо более простой и гораздо более надёжный способ, ну и, соответственно, более правильный. Не нужно ничего химичить с сокрытием кнопок. есть небольшое описание, весьма поверхностное на мой взгляд.
 

savl

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
@savl еще особенность - дефолтно, все доки доступны ридерам и выше на просмотр, если в доке нет ридерс! полей (авторс - у меня не влияло, но это м.б. связано в хэПагами)
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
@lmike да, все верно. Если полей Readers нет или они пустые, то видны всем (кроме Depositor и No Access). Authors на видимость влияет только при наличии Readers полей.
что касается xPage... Если UI и DATA разнесены по разным базам, то там не только поля играют роль, но и ACL. Конечно все зависит от подхода...
 
F

Fleerka

Всем спасибо за дельные советы, попробую через авторс/ридерс реализовать.
Думается мне что это не последняя тема на этом форуме :)
 
F

Fleerka

Разбираюсь с полями ридерс и авторс и не могу понять что я делаю не так..
Создала 2 роли, и 2 формы. В каждой форме есть поле ридерс. В форме 1 ридерс = роль1, в форме 2 ридерс = роль2. Пользователю назначается роль 1 и Access = Reader . После прочтения мануалов у меня у меня сложилось впечатление, что в представлениях где отображаются записи из форм 1 и 2 пользователю должны быть видны только записи формы 1... Но у меня по какой то причине видны все записи, что позволяет пользователю спокойно просматривать и результаты из формы 2. Мб я как то не так интерпретировала прочтенное.. Помогите, пожалуйста, разобраться)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!