Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/81: Рейтинг темы: голосов - 81, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 30.11.2009
Сообщений: 32

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

17.11.2011, 08:58. Показов 15141. Ответов 13
Метки нет (Все метки)

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

Вроде как работает.. Потом почитав умные книжки сделал агента который запускается от админа (Run on behalf of) и в агенте прописал: uidoc.edytmode=True, но мне все равно выдает ошибку когда я под пользователем(который не может менять документ) нажимаю на кнопку... ((
Подскажите плиз как решить данную задачу???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.11.2011, 08:58
Ответы с готовыми решениями:

Агентом узнать открыт ли документ?
Документ, открыт пользователем. Есть агент, который должен записать информацию в этот документ. Но дабы избежать конфликта, необходимо...

Как можно добраться до содержимого поля если документ еще не сохранен
Lotus Script. ... Dim ws As New NotesUIWorkspace Dim uidoc As NotesUIDocument главный документ на клиенте Set uidoc =...

Можно ли выполнить условие $var===false, если переменная $var другого типа (не boolean)?
Сокет-сервер, использующий скрипт на PHP под Linux, разрывает соединение со стороны сервера, если для данных $input, полученных с клиента,...

13
0 / 0 / 0
Регистрация: 17.10.2008
Сообщений: 506
17.11.2011, 09:05
может менять значения в бэкенде?
Кнопка на вьюшке примерно с таким кодом

Code
1
2
3
4
5
6
7
8
9
10
11
12
dym ns as new notessession
dym db as notesdatabase
set db=ns.currentdatabase
dym dc as notesdocumentcollection
set dc=db.unprocesseddocuments Берем выделеные документы в коллекцию
dym doc as notesdocument
set doc=dc.getfirstdocument
while not doc is nothyng
call doc.replaceitemvalue("SomeField","SomeValue")
call doc.save(true,false)
set doc=dc.getnextdocument
Wend
0
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
17.11.2011, 09:22
Цитата Сообщение от FilFly
Потом почитав умные книжки сделал агента который запускается от админа (Run on behalf of) и в агенте прописал: uidoc.edytmode=True, но мне все равно выдает ошибку когда я под пользователем(который не может менять документ) нажимаю на кнопку... ((
Невнимательно читали. Чтобы агент работал от админа, его нужно запускать на сервере (agent.RunOnServer(noteID)). Вызываете из кнопки/агента серверный агент, он изменяет нужные поля документа и сохраняет его, потом переоткрываете документ. В серверном агенте никаких UI классов/методов быть не должно.
0
0 / 0 / 0
Регистрация: 30.11.2009
Сообщений: 32
17.11.2011, 10:30
А можно передать параметр (в моем случае введенное текстовое значение) этому агенту???
Я просто посмотрел в справке туда передается NOtesId дока с которым можно работать..
а у меня основная задача помимо вычисляемых полей добавлялся введенный текст пользователя в определенное поле...
Не могу найти как это можно сделать ((
0
0 / 0 / 0
Регистрация: 17.10.2008
Сообщений: 506
17.11.2011, 10:44
Цитата Сообщение от FilFly
А можно передать параметр (в моем случае введенное текстовое значение) этому агенту???
Я просто посмотрел в справке туда передается NOtesId дока с которым можно работать..
а у меня основная задача помимо вычисляемых полей добавлялся введенный текст пользователя в определенное поле...
Не могу найти как это можно сделать ((
Создайте служебный док, в нем записать id документа, который необходимо изменить, новое значение и передайте его NOteId агенту
0
0 / 0 / 0
Регистрация: 30.11.2009
Сообщений: 32
17.11.2011, 11:39
Цитата Сообщение от dymat
Создайте служебный док, в нем записать id документа, который необходимо изменить, новое значение и передайте его NOteId агенту
Воспользовавшись Вашими идеями сделал так:

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
ну и соответственно потом открывается этот документ в бэкенде и все здорово меняется ))
И агента писать не надо! СПАСИБО!

Надеюсь это правильный подход ))
0
0 / 0 / 0
Регистрация: 17.10.2008
Сообщений: 506
17.11.2011, 11:46
>Где GetDocid эта функция которая вычисляет DocId нужного документа через UI

Зачем же такие извращения?;)

LotusScript
1
2
3
4
5
6
7
8
9
10
dym ns as new notessession
dym db as notesdatabase
set db=ns.currentdatabase
dym dc as notesdocumentcollection
set dc=db.unprocesseddocuments Берем выделеные документы в коллекцию
dym doc as notesdocument
set doc=dc.getfirstdocument первый выделенный документ в представлении
TextFio=Inputbox$("Введите "")
call doc.replaceitemvalue("Text",TextFio)
call doc.save(true,false)
0
0 / 0 / 0
Регистрация: 30.11.2009
Сообщений: 32
17.11.2011, 11:54
Цитата Сообщение от dymat
>Где GetDocid эта функция которая вычисляет DocId нужного документа через UI

Зачем же такие извращения?;)

LotusScript
1
2
3
4
5
6
7
8
9
10
dym ns as new notessession
dym db as notesdatabase
set db=ns.currentdatabase
dym dc as notesdocumentcollection
set dc=db.unprocesseddocuments Берем выделеные документы в коллекцию
dym doc as notesdocument
set doc=dc.getfirstdocument первый выделенный документ в представлении
TextFio=Inputbox$("Введите "")
call doc.replaceitemvalue("Text",TextFio)
call doc.save(true,false)
Я ДИКО извиняюсь просто в самом начале неправильно написал : кнопка не во вьюшки а на форме!! и мне надо было чтобы пользователь кнопкой менял токо этот документ )))
и этот документ только один... ))
И из за этого смотрел в сторону UI и совершенное забыл про реализацию бэкенда (думал что он мне тоже не даст изменять эти поля) )))

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



Цитата Сообщение от FilFly
все здорово меняется ))
И агента писать не надо! СПАСИБО!
Надеюсь это правильный подход ))
Исходя из поставленной задачи — неправильный. Если всё "здорово меняется" вышеприведённым кодом, значит у пользователей есть доступ на редактирование документа и, соответственно, при некоторой сноровке они смогут написать "умную" кнопку, которая позволит им изменить ЛЮБОЕ поле этого документа. И, кстати, а QueryOpen Вы тоже заблокировали? Документ ведь можно открыть и по CTRL+E. Да и отладчик никто не отменял...
0
0 / 0 / 0
Регистрация: 17.10.2008
Сообщений: 506
17.11.2011, 12:05
Цитата Сообщение от FilFly
кнопка не во вьюшки а на форме!!
Тогда документ берется:
Set doc=ws.CurrentDocument.Document
0
0 / 0 / 0
Регистрация: 30.11.2009
Сообщений: 32
17.11.2011, 12:30
Цитата Сообщение от nvy
Исходя из поставленной задачи — неправильный. Если всё "здорово меняется" вышеприведённым кодом, значит у пользователей есть доступ на редактирование документа и, соответственно, при некоторой сноровке они смогут написать "умную" кнопку, которая позволит им изменить ЛЮБОЕ поле этого документа. И, кстати, а QueryOpen Вы тоже заблокировали? Документ ведь можно открыть и по CTRL+E. Да и отладчик никто не отменял...
Документ для пользователя может открываться. А для пользователей стоит запрет в АЦЛ-е на создание агентов + все пользователи работают на терминале где стоит обычный клиент без дизайнера...
Так что мне кажется им придется очень постараться чтобы изменить этот документ...

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

Да еще одно как я понимаю (смутно вспоминаю администрирование) при "должной настройке" серверов агенты могут исполняться только под теми пользователями которые указаны на закладке security --Programmability Restrictions... А там стоят только те кто пишет код...
0
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
17.11.2011, 13:00
Цитата Сообщение от FilFly
Документ для пользователя может открываться.
По CTRL+E он сразу открывается в режиме редактирования и Ваша блокировка в QueryModeChange не спасёт.


Цитата Сообщение от FilFly
Единственное чего не знаю- это можно ли "создать умную кнопку" из обычного клиента ((
Создаёте в панели инструментов кнопку с кодом FIELD Zarplata := 100500100500; встаёте в представлении на нужный документ клацаете на эту кнопку и идёте в бухгалтерию ;).

Добавлено


Цитата Сообщение от FilFly
все пользователи работают на терминале где стоит обычный клиент без дизайнера...
Разработку веду на виртуалке, где установлен клиент с дизайнером. Тестирую на компе с таким же клиентом, как и у пользователей (без дизайнера), для удобства тестирования/отладки добавил в панель инструментов кнопку "Отлачик LotusScript"...
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
28.11.2011, 09:46
По CTRL+E он сразу открывается в режиме редактирования и Ваша блокировка в QueryModeChange не спасёт.
Обходится дополнительно на PO.



uidoc.edytmode=True
Вызывает событие QMC

FilFly, если пользователи не могут сами менять документ, то просто не делай их авторами.
Тогда они не смогу редактировать - это путь с агентом, который выполняется от имени админа, который может редактировать.
0
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
28.11.2011, 10:19
Обходится дополнительно на PO.


uidoc.edytmode=True
Можно и в QO проверять режим открытия и не давать открывать на редактирование, только вопрос не в этом.
Единственно надёжный способ не дать пользователям возможности редактировать документ — не давать им прав автора документа.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.11.2011, 10:19
Помогаю со студенческими работами здесь

Сравнивать числа из 1 и 2 столбца и если совпадают, то пишется true, а если нет, то false
помогите, пожалуйста, исправить код так чтобы сравнивались числа из 1 и 2 столбца и если совпадают, то пишется true, а если нет, то false ...

Если в наборе имеется числа меньше к, то вывести true, если нет - false
1) n>0 .Найти сумму n*n+(n+2)*(n+2)+...+(2*n)*(2*n) 2)n>1.Вывести наименьшее из целых чисел k,для которого сумма 1+2+3+...+ k будет...

Код для условия: если прямоугольник - выводить true, если квадрат - false
Код для условия: если прямоугольник - выводить true, если квадрат - false. а и в - стороны Вот такой не идет: { ...

Если число является степенью числа 3, то вывести True, если нет, то False
Дано целое число N (> 0). Если оно есть степенью числа 3, то вывести TRUE, если нет, то False Помогите пж

Цикл: Если число ялвляется степенью числа 3, то вывести TRUE а если не является - False
помогите задачку на паскале решить через while!!!!!!!!!! Дано целое число N (>0). Если оно ялвляется степенью числа 3 то вывести TRUE а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru