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

Тема в разделе "Lotus - Программирование", создана пользователем Fleerka, 23 авг 2016.

  1. Fleerka

    Fleerka Member

    Регистрация:
    5 авг 2016
    Сообщения:
    13
    Симпатии:
    1
    Добрый день, уважаемые форумчане!

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

    Код (Text):
    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, отмеченное синим:

    Код (Text):
    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
     
    #1 Fleerka, 23 авг 2016
    Последнее редактирование: 23 авг 2016
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    В Форме, Globals -> Declaration вставить строку: Dim allowEdit as boolean
    Переменная должна быть глобальной, иначе она сбрасывается все время.
     
  3. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    луче писать не в переменную, а в поле и это же поле использовать для скрытия экшн "allowEdit", поле не "сохранять", эссесно
     
  4. Fleerka

    Fleerka Member

    Регистрация:
    5 авг 2016
    Сообщения:
    13
    Симпатии:
    1
    Есть и глобальная переменная allowEdit, но все равно не отрабатывает Action((
     
  5. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
    If Not allowEdit Then Continue = False
    End Sub
     
  6. Fleerka

    Fleerka Member

    Регистрация:
    5 авг 2016
    Сообщения:
    13
    Симпатии:
    1
    Не помогает((

    в Querymodechange добавила следующее:
    Код (LotusScript):
        If Not allowEdit Then
            Continue = False
            Messagebox  "Нажми кнопку"
        End If
    На кнопке Click
    Код (LotusScript):
    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
     
    #6 Fleerka, 23 авг 2016
    Последнее редактирование модератором: 23 авг 2016
  7. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    я коппернул Ваш код, тоже не заработал.
    Взял название переменной из Declaration и заменил им в событии и на кнопке - все заработало.
    + в Globals Initialize вставил строку:
    allowEdit = false
    Где-то ошибка в написании имени переменной.
     
  8. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    гдета ошибочка в буковках, перепиши врукопашную allowEdit в глобал и скопипасть её во все нужные места
    с копипастом из инета так бывает
     

    Вложения:

    • forfleerka.zip
      Размер файла:
      26,3 КБ
      Просмотров:
      1
  9. Fleerka

    Fleerka Member

    Регистрация:
    5 авг 2016
    Сообщения:
    13
    Симпатии:
    1
    Спасибо всем за помощь новичку, буду искать где очепятка закралась :)
     
  10. Fleerka

    Fleerka Member

    Регистрация:
    5 авг 2016
    Сообщения:
    13
    Симпатии:
    1
    Действительно, кнопка работает, но я не упомянула видимо одну важную вещь, что у меня используется Shared Actions, и в этом случае все плохо((
     
  11. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Зачем такие хитрости?
     
  12. Fleerka

    Fleerka Member

    Регистрация:
    5 авг 2016
    Сообщения:
    13
    Симпатии:
    1
    Для того, чтобы изменения в документ могли вносить только те пользователи, у которых есть права на кнопку, а не по даблклику или CTRL+E. Мб есть еще какая нить реализация, но с моими скудными знаниями я пока вижу только такой вариант..
     
  13. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Про ACL базы и поля Authors/Readers что-нибудь слышали ранее?
     
  14. Fleerka

    Fleerka Member

    Регистрация:
    5 авг 2016
    Сообщения:
    13
    Симпатии:
    1
    Слышала.. И даже использую немного)
    В ACL у меня есть несколько ролей, для каждой кнопки у меня настроена видимость в зависимости от статуса документа и роли. Есть кнопка "Редактировать" (Shared Action), которая должна переводить документ в статус редактирования (и только она).
    Буду благодарна, если подскажете более простой/правильный подход.
     
  15. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Поля Authors/Readers - позволяют, соответственно, задать права на просмотр и редактирование любого документа. Это гораздо более простой и гораздо более надёжный способ, ну и, соответственно, более правильный. Не нужно ничего химичить с сокрытием кнопок. Здесь есть небольшое описание, весьма поверхностное на мой взгляд.
     
  16. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    @Fleerka у Вас наверняка все по умолчанию Editor в ACL или выше... Если следовать логике от @garrick ,то Вам необходимо будет создавать Authors/Readers поля.
    Затем менять всем пользователям доступ на Author. Да, это правильный путь, не без своих заморочек правда... Так же сразу дам совет поля Authors/Readers сразу делать многозначными, всегда. Поверте, это потом может облегчить жизнь.
    Если необходимо кому-то по работе иметь возможность редактировать все документы, в любой момент времени или независимо от статуса, то надо создать отдельное Authors поле, в котором будет роль. А затем эту роль назначить необходимому сотруднику или группе.
     
  17. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    @savl еще особенность - дефолтно, все доки доступны ридерам и выше на просмотр, если в доке нет ридерс! полей (авторс - у меня не влияло, но это м.б. связано в хэПагами)
     
  18. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    @lmike да, все верно. Если полей Readers нет или они пустые, то видны всем (кроме Depositor и No Access). Authors на видимость влияет только при наличии Readers полей.
    что касается xPage... Если UI и DATA разнесены по разным базам, то там не только поля играют роль, но и ACL. Конечно все зависит от подхода...
     
  19. Fleerka

    Fleerka Member

    Регистрация:
    5 авг 2016
    Сообщения:
    13
    Симпатии:
    1
    Всем спасибо за дельные советы, попробую через авторс/ридерс реализовать.
    Думается мне что это не последняя тема на этом форуме :)
     
  20. Fleerka

    Fleerka Member

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

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