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

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

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

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

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

Создание Дока Через Скрипт

  • Автор темы Anatoly
  • Дата начала
A

Anatoly

Есть мейн-форма. Перед созданием по ней дока, пользователь выбирает нужные параметры, в соответствии с этим заполняются поля для определения подключения требуемых сабформы. И создается док через .CreateDocument.
----
Set Doc =db.CreateDocument
Doc.Form ="Claim"
... заполняю нужные поля так как нужно
Call wks.EditDocument(True, Doc)
----
В ходе заполнения документа требуется создавать несколько респонсов к нему.
Так вот, пока не выйдешь из него с сохранением и не зайдешь заново, код :
----
@Command([FileSave]);
@Command([Compose];"ClaimSum")
----
Вызывает ошибку: "No document is selected; please select a document to respond to".
Не спасает сохранение документа явно. Вот пока не выйдешь и не зайдешь, респонсы не создаются...
Чего не хватает с создании через скрипт? При создании мейна через @Command все нормально.
 

dimat

Well-known member
31.07.2008
508
0
BIT
0
А как респонсы к нему создаете?
мржно например создавать респонсы так:

Код:
Set respDoc=db.CreateDocument
Call respDoc.MakeResponse(Doc)
 
A

Anatoly

Респонсы создаются через формулы в экшн.
Причем даже @Command([FileSave]) перед @Command([Compose]) не помогает, не видит дока, на который создается респонс.
Хотя, если переключиться на вкладку с вью, мейн док в нем уже есть.
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
160
ммм, попробуй перед сделать так: Когда по кнопке будут пытаться создавать респонз то переводить документ в режим чтения.
Он естественно предложит сохранить изменения, а затем перезагрузиться.

Можно еще сделать Save перед Call wks.EditDocument(True, Doc)
Но тогда документ в любом случае будет сохранен.

Претензии клепаешь? не в МАДе часом?)
 
A

Anatoly

ммм, попробуй перед сделать так: Когда по кнопке будут пытаться создавать респонз то переводить документ в режим чтения.
Он естественно предложит сохранить изменения, а затем перезагрузиться.
Попробовал...
В режиме редактирования - ошибка.
@Command( [EditDocument] ) - документ переходит в режим просмотра и респонся создаются нормально
@Command( [EditDocument] ) - документ возвращается в режим редактирования и снова ошибка при создании респонсов :)

Это если я создавал мейн стоя на строке с документом во вью
Если же при нажатии на кнопку создания мейна, курсор во вью стоял на строке категории, ошибка при создании респонса вылетает по любому :)

Можно еще сделать Save перед Call wks.EditDocument(True, Doc)
Но тогда документ в любом случае будет сохранен.
Было, работает. Но сохранение - не айс. Хотя в качестве временной меры может верну на время.

Претензии клепаешь? не в МАДе часом?)
Юристам работу с исками автоматизирую.
 
A

Anatoly

Короче что-то по любому перестало работать.
Переделал режим создания респонсов, сделал твк-же через скрипт.
Но... Чего не хватает в документе, созданном через .CreateDocument, что бы в нем можно было создавать, не выходя, создавать респонсы через формулы?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
160
@Command( [EditDocument] ) - документ возвращается в режим редактирования и снова ошибка при создании респонсов smile.gif
Проверяй что он не в режиме чтения на собаках забыл функцию @IsDocBeEding или что-то похожее

save ему не хватает. Док создается совсем пустым, без полей, без NoteID. Можно перед созданием респонзов требовать сохранения документов, если он на экране. Выводить сообщение: "Необходимо сохранить документ".
Проверить можно так, на скрипте:
Код:
'в Declaration формы:
dim currDoc as NotesDocument ' Это текущий документ его на определять на PostOpen событии, глобальная перменная.

'в коде кнопки:
dim macro as variant
macro = Evaluate({@NoteID},currDoc)

if macro(0) = "NT00000000" then
msgbox "Необходимо сохранить документ"
exit Sub
end if

Создание ответных тоже предлагаю тебе на скрипте делать - возможностей больше.
 
A

Anatoly

Сохраняю документ перед тем как (системная акшн). - не помогает.
Более того. как написал. переключая между режимами просмотра/редактирования - запуская создание респонса, либо удачно открывает форма его, либо получаем указанную ошибку.
 
M

motogarri

На кнопку создания респонза. При этом у документа-потомка тип формы = Ответ.
Код:
Dim ws As New NotesUIWorkspace
Dim s As New NotesSession
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim newdoc As NotesDocument

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

Call uidoc.Save

Set newdoc = s.CurrentDatabase.CreateDocument
newdoc.Form = "formname"
Call newdoc.MakeResponse(doc)

Call ws.EditDocument(True, newdoc)
 
A

Anatoly

На кнопку создания респонза. При этом у документа-потомка тип формы = Ответ.
ну, я не настолько... Я умею создавать доки через скрипт. :)
Мне не интересно, чего не хватает в отработке создания мейна через скрипт заходе в него-же через .EditDocment, что, находясь в этом мейне, я не могу создать респонс через формулу. Даже выполнив сохранение мейна в режиме редактирования. Вариантов отработки два:
1) .Save перед .EditDocument для мейна
2) Сохранить мейн, выйти из него и зайти снова.
Оба мне как-то...

Если создаю мейн через формулу, такого нет.
 
M

motogarri

Мне почему-то очень сложно понять, что ты имеешь ввиду. Может вопрос формулируешь не так или я туплю по утрам)) Я могу и ошибаться, но подозреваю, что пока документ не сохранен его нет в базе и на него нельзя сделать ответ. Как создать ответ на документ у которого еще нет unid?
И не понимаю какая разница между созданием документа формулой или из скрипта.
 
N

nvyush

Я могу и ошибаться, но подозреваю, что пока документ не сохранен его нет в базе и на него нельзя сделать ответ. Как создать ответ на документ у которого еще нет unid?
У нового несохранённого документа UNID уже есть, нет NoteID. Соответственно, скриптом на него уже можно создать ответ (response.MakeResponse(mainDoc)).
 
A

Anatoly

Есть два вида документов: "Иск" и наследники к нему, один из них "Сумма по иску".
Во категоризированном вью с исками есть акшн со скриптом, который заканчивается кодом:
Код:
Set Doc =db.CreateDocument
Doc.Form ="Claim"
' заполняем нужным образом поля мейна
...
Call wks.EditDocument(True, Doc)
Открывает форма для работы с иском. В процессе работы возникает необходимость создать к иску наследников.
Акшн в форме с кодом:
Код:
@Command([FileSave]);
@Command([Compose];"Claim.Sum");
Вызывает ошибку - предлагает сначала выбрать документ,к которому создается наследник. Не помогает и явное сохранение документа через системные действия и меню. Пока не выйдешь из дока и не зайдешь в него из представления, наследники не создаются.

Если же мейн создается из вью по формуле @Command([Compose];"Claim"), то наследники создаются без проблем по @Command([Compose];"...") даже без предварительного @Command([FileSave]). И, сохранив наследника и вернувшись на форму работы с родителем, мы можем отказаться от сохранения самого родителя. То родителя нет, а респонс есть... И ссылается он будет на документ, который был под курсором во вью в момент создания нового документа. Но это и решается @Command([FileSave]) перед созданием наследника.
А вот если мейн создается через скрипт, то никакие сохранения его не позволяют создать наследника через формулу.
Приходиться в скрипте создания мейна сохранить его перед .EditDocument
 
N

nvyush

А вот если мейн создается через скрипт, то никакие сохранения его не позволяют создать наследника через формулу.
Не надо мешать в одну кучу котлеты и мух. Создаёте главный документ скриптом — создавайте и ответы скриптом, хотите формулы — делайте на формулах всё.
 
A

Anatoly

Не надо мешать в одну кучу котлеты и мух. Создаёте главный документ скриптом — создавайте и ответы скриптом, хотите формулы — делайте на формулах всё.
Тогда объясните мне, чем отличается документ, открытый через @Command([Compose]) от открытого через .CreateDcoument + .EditDocument ?
Почему они ведут себя по разному? Я нахожусь в редактировании документа и почему я не могу создавать респонсы через формулу? Как удобнее и быстрее.
 
M

motogarri

Есть разница. На форуме обсуждалось. Из скрипта можно создавать документы разными способами, в том числе и методом ws.ComposeDocument. Но в этом случае документ открывается на редактирование сам и поля придется заполнять через uidoc.
 
A

Anatoly

Есть разница. На форуме обсуждалось. Из скрипта можно создавать документы разными способами, в том числе и методом ws.ComposeDocument. Но в этом случае документ открывается на редактирование сам и поля придется заполнять через uidoc.
Все, что надо, я заполняю еше до .EditDocument.
Почему, даже сохранив документ находясь в открытой форме, я не могу создать наследника к нему?
 
M

motogarri

Ну это совсем просто. Уверен, что в описании классов Notesdatabase и NotesUIWorkspace можно найти информацию по этим методам. Мне пока не приходилось так углубляться((
 
Мы в соцсетях:

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