Можно Ли Агентом Менять Документ Если В Querymodechange Continue=false

Тема в разделе "Lotus - Программирование", создана пользователем FilFly, 18 ноя 2011.

  1. FilFly

    FilFly Гость

    Добрые, люди подскажите пож. уже голову сломал..Задача следующая:
    Есть документ и определенный круг пользователей должен только нажимать на кнопку из вьюшки.. а та в свою очередь должна менять определенные поля. Сами эти пользователи не должны иметь прав менять документ!!! Для этого я в событии QueryModeChange...
    вот что написал v=Evaluate({@Contains(@UserNamesList;"[NotChange]")})
    If v(0)=1 Then Continue=False And Messagebox ("Вы не можете редактировать документ")

    Вроде как работает.. Потом почитав умные книжки сделал агента который запускается от админа (Run on behalf of) и в агенте прописал: uidoc.editmode=True, но мне все равно выдает ошибку когда я под пользователем(который не может менять документ) нажимаю на кнопку... ((
    Подскажите плиз как решить данную задачу???
     
  2. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    может менять значения в бэкенде?
    Кнопка на вьюшке примерно с таким кодом
    Код (Text):
    dim ns as new notessession
    dim db as notesdatabase
    set db=ns.currentdatabase
    dim dc as notesdocumentcollection
    set dc=db.unprocesseddocuments 'Берем выделеные документы в коллекцию
    dim doc as notesdocument
    set doc=dc.getfirstdocument
    while not doc is nothing
    call doc.replaceitemvalue("SomeField","SomeValue")
    call doc.save(true,false)
    set doc=dc.getnextdocument
    Wend
     
  3. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Невнимательно читали. Чтобы агент работал от админа, его нужно запускать на сервере (agent.RunOnServer(noteID)). Вызываете из кнопки/агента серверный агент, он изменяет нужные поля документа и сохраняет его, потом переоткрываете документ. В серверном агенте никаких UI классов/методов быть не должно.
     
  4. FilFly

    FilFly Гость

    А можно передать параметр (в моем случае введенное текстовое значение) этому агенту???
    Я просто посмотрел в справке туда передается NOtesId дока с которым можно работать..
    а у меня основная задача помимо вычисляемых полей добавлялся введенный текст пользователя в определенное поле...
    Не могу найти как это можно сделать ((
     
  5. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Создайте служебный док, в нем записать id документа, который необходимо изменить, новое значение и передайте его NOteId агенту
     
  6. FilFly

    FilFly Гость

    Воспользовавшись Вашими идеями сделал так:

    Dim ns As New notessession
    Dim db As notesdatabase
    Set db=ns.currentdatabase
    Dim doc As notesdocument
    Dim item As NotesItem
    TextFio=Inputbox$("Введите "")
    DocId=GetDocid
    Set doc=db.getDocumentByID(DocId)
    Set item=doc.replaceitemvalue("Text",TextFio)
    Call doc.save(True,False)

    Где GetDocid эта функция которая вычисляет DocId нужного документа через UI
    ну и соответственно потом открывается этот документ в бэкенде и все здорово меняется ))
    И агента писать не надо! СПАСИБО!

    Надеюсь это правильный подход ))
     
  7. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    >Где GetDocid эта функция которая вычисляет DocId нужного документа через UI

    Зачем же такие извращения?;)
    Код (LotusScript):
    dim ns as new notessession
    dim db as notesdatabase
    set db=ns.currentdatabase
    dim dc as notesdocumentcollection
    set dc=db.unprocesseddocuments 'Берем выделеные документы в коллекцию
    dim doc as notesdocument
    set doc=dc.getfirstdocument 'первый выделенный документ в представлении
    TextFio=Inputbox$("Введите "")
    call doc.replaceitemvalue("
    Text",TextFio)
    call doc.save(true,false)
     
  8. FilFly

    FilFly Гость

    Я ДИКО извиняюсь просто в самом начале неправильно написал : кнопка не во вьюшки а на форме!! и мне надо было чтобы пользователь кнопкой менял токо этот документ )))
    и этот документ только один... ))
    И из за этого смотрел в сторону UI и совершенное забыл про реализацию бэкенда (думал что он мне тоже не даст изменять эти поля) )))

    Огромное Спасибо что наставили на путь истинный ;)
     
  9. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Исходя из поставленной задачи — неправильный. Если всё "здорово меняется" вышеприведённым кодом, значит у пользователей есть доступ на редактирование документа и, соответственно, при некоторой сноровке они смогут написать "умную" кнопку, которая позволит им изменить ЛЮБОЕ поле этого документа. И, кстати, а QueryOpen Вы тоже заблокировали? Документ ведь можно открыть и по CTRL+E. Да и отладчик никто не отменял...
     
  10. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Тогда документ берется:
    Set doc=ws.CurrentDocument.Document
     
  11. FilFly

    FilFly Гость

    Документ для пользователя может открываться. А для пользователей стоит запрет в АЦЛ-е на создание агентов + все пользователи работают на терминале где стоит обычный клиент без дизайнера...
    Так что мне кажется им придется очень постараться чтобы изменить этот документ...

    Единственное чего не знаю- это можно ли "создать умную кнопку" из обычного клиента ((

    Да еще одно как я понимаю (смутно вспоминаю администрирование) при "должной настройке" серверов агенты могут исполняться только под теми пользователями которые указаны на закладке security --Programmability Restrictions... А там стоят только те кто пишет код...
     
  12. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    По CTRL+E он сразу открывается в режиме редактирования и Ваша блокировка в QueryModeChange не спасёт.
    Создаёте в панели инструментов кнопку с кодом FIELD Zarplata := 100500100500; встаёте в представлении на нужный документ клацаете на эту кнопку и идёте в бухгалтерию ;).

    Добавлено
    Разработку веду на виртуалке, где установлен клиент с дизайнером. Тестирую на компе с таким же клиентом, как и у пользователей (без дизайнера), для удобства тестирования/отладки добавил в панель инструментов кнопку "Отлачик LotusScript"...
     
  13. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Обходится дополнительно на PO.

    Вызывает событие QMC

    FilFly, если пользователи не могут сами менять документ, то просто не делай их авторами.
    Тогда они не смогу редактировать - это путь с агентом, который выполняется от имени админа, который может редактировать.
     
  14. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Можно и в QO проверять режим открытия и не давать открывать на редактирование, только вопрос не в этом.
    Единственно надёжный способ не дать пользователям возможности редактировать документ — не давать им прав автора документа.
     
Загрузка...

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