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

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

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

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

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

Функцию Кнопки В Агент

  • Автор темы Dimok-163rus
  • Дата начала
D

Dimok-163rus

Агент исполняет функцию кнопки "генерация п2" (Подправил скрипт, вставил в агент, вызываю агент простым действием с кнопки на форме).

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

Тестирую агент на сервере!
 

Вложения

  • Безымянный.jpg
    Безымянный.jpg
    159 КБ · Просмотры: 541

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
ну ли прав в папку нет, либо файл не закрыт, либо неверный путь.
Тестирую агент на сервере!
RunOnServer?
Не, если бы на сервере - ошибка была бы записана в Log сервера, а не на экране.
Так что агент работает на клиенте, следовательно ошибка в имени файла, в полном имени. Папки может не быть.
 
D

Dimok-163rus

ну ли прав в папку нет, либо файл не закрыт, либо неверный путь.

RunOnServer?
Не, если бы на сервере - ошибка была бы записана в Log сервера, а не на экране.
Так что агент работает на клиенте, следовательно ошибка в имени файла, в полном имени. Папки может не быть.

создал кнопку на форме, добавил "простое действие" -> выполнить агент: "По приложению 1" (выбрал из списка созданных агентов) Рис.1

Скрипт вставлен в этом агенте, вроде все так. Рис.2

А какой папки может не быть говоришь?
 

Вложения

  • 1.jpg
    1.jpg
    249,6 КБ · Просмотры: 454
  • 2.jpg
    2.jpg
    226,2 КБ · Просмотры: 515
D

Dimok-163rus

файл ложится в документ, в свою очередь который лежит на сервере...хм
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
Ошибка в одном из этих мест, если код агента не менялся по сравнению с кнопкой:
Код:
Call Word.documents.add(tmppth_str & "\" & Cstr(pth_str$)) 'Создаем новый документ на основе соответствующего шаблона

wordDoc.saveas(tmppth_str + "\"+nm_doc$)

'Добавляет в RTF-поле присоединенный файл или ссылку на него.
Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, nm_doc$, tmppth_str + "\"+nm_doc$)


'	Удаляем директорию
Kill tmppth_str & "\" & Cstr(pth_str$)
Kill tmppth_str + "\"+nm_doc$
Rmdir tmppth_str
То что документ в базе, а база на сервере - ничего не значит, агент все равно отрабатывает на клиентской машине.
Изменяет документ в рамках открытого клиента, как только сохранил документ - документ изменился в базе.
 
D

Dimok-163rus

Пришлось объявить пару полей типа String:
(Dim pth_str As string
Dim tmppth_str As String, закоментил:
' dt_date$ = dt.DateOnly
' dt_time$ = dt.TimeOnly
' dt_date$ = Left(dt_date$,2)+Right(Left(dt_date$,5),2)+Right(dt_date$,2)
' dt_time$ = Left(dt_time$,2)+Right(Left(dt_time$,5),2)+Right(dt_time$,2)
во временной выгрузки на C, ругался на dt_date$...и т.д, писал что "Variable not declared"
и убрал обработчик ошибок, на него тоже гнал )

Код:
Sub Initialize

Dim ws As New NotesUIWorkspace
Dim sess As New NotesSession

Dim pdoc As NotesDocument, childdoc As NotesDocument, tmpDoc As NotesDocument, profile As NotesDocument
Dim dc As NotesDocumentCollection

Dim db As NotesDatabase, sprdb As NotesDatabase

Dim agent As NotesAgent	

Set agent = sess.CurrentAgent

Dim uidoc As NotesUIDocument

Dim view As NotesView


'Поля, необходимо которые выгрузить
Dim Seria(0) As Variant 
Dim Number_reg(0) As String
Dim Data_reg_izm(0) As Variant
Dim Osn_pogash(0) As Variant	
Dim Dol_podp(0) As Variant	
Dim Osn_podpis(0) As Variant
Dim Podpisant(0) As Variant

Set uidoc = ws.CurrentDocument
Set pdoc = uidoc.Document	
Set db = sess.CurrentDatabase

'Профиль системы и база справочника
Set profile = db.GetProfileDocument("ConfigPrf")
If profile.pthRefer(0)="" Then
MessageBox "В профиле конфигурации системы не указан путь к БД Справочники!",0 ,"Ошибка настройки системы"
Exit Sub
End If

Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))

'Продолжать?	
Dim askme As Variant
askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")	
If askme=0 Then
Exit Sub
End If

'-------------------------------------------------------------------------------------------------------------------------------------------
Dim itm As NotesRichTextItem
Set itm = pdoc.GetFirstItem("Sfakt")

If Not itm Is Nothing Then

Call pdoc.RemoveItem("Sfakt")
pdoc.Flag_Close="1"
Call pdoc.Save( True, False )

End If
'--------------------------------------------------------------------------------------------------------------------------------------
Set childdoc = db.GetDocumentByUNID(pdoc.GetItemValue("ID_Rubl_obl")(0))	

Dim coll1 As NotesDocumentCollection
Dim dt1 As New NotesDateTime("")
Dim doc1 As NotesDocument 'Справочный док
Dim pth_str As string
'По коду шаблона ищем в справочнике шаблонов нужную карточку шаблона
pth_str$=""
Set coll1 = sprdb.Search({Form = "TmpForm_Profile" & ShortName = "P002"},Nothing,0)
'	Msgbox "Количество док-тов : " & coll1.Count 
Dim rttmp As NotesRichTextItem
If coll1.Count >0 Then
Set doc1 = coll1.GetFirstDocument
Set rttmp = doc1.GetFirstItem("TmpDoc")
ForAll o In rttmp.EmbeddedObjects
If Right(o.Name,4)=".dot" Then
pth_str$ = o.Name
GoTo ExtrMark
End If
End ForAll
End If
If pth_str$="" Then
MessageBox "Невозможно перейти к генерации поручения: в справочнике шаблонов отсутствует шаблон поручения!",,"Внимание!"
Exit Sub
End If

ExtrMark:	
'Создаем каталог временной выгрузки на С
Dim dt As New NotesDateTime( "" )
Dim tmppth_str As String
Call dt.SetNow
'	dt_date$ = dt.DateOnly
'	dt_time$ = dt.TimeOnly
'	dt_date$ = Left(dt_date$,2)+Right(Left(dt_date$,5),2)+Right(dt_date$,2)
'	dt_time$ = Left(dt_time$,2)+Right(Left(dt_time$,5),2)+Right(dt_time$,2)

tmppth_str = Environ$("TEMP") + "\TmpTpl_"
'+dt_date$+"_"+dt_time$
MkDir tmppth_str

'Выгружаем шаблон в созданную директорию
Dim object As NotesEmbeddedObject
Set object = rttmp.GetEmbeddedObject(pth_str$ )
Call object.ExtractFile (tmppth_str & "\" & CStr(pth_str$))

'--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------	
Dim Word As Variant
Dim WordDoc As Variant
'Новый объект Word
'Создание объекта Word'a
Set Word = CreateObject("Word.Application") 
Call Word.documents.add(tmppth_str & "\" & CStr(pth_str$)) 'Создаем новый документ на основе соответствующего шаблона
Set WordDoc = Word.activedocument

'Присваивание полям-Word'a значений из полей notes-документа
worddoc.FormFields(1).result = childdoc.Name(0)
worddoc.FormFields(2).result = childdoc.Seria(0)
worddoc.FormFields(3).result = childdoc.Number_reg(0)
worddoc.FormFields(4).result = childdoc.Data_reg_izm(0)
'worddoc.FormFields(5).result = childdoc.Вкладка "досрочное погашение"кол-во погаш.шт(0)
'worddoc.FormFields(6).result = childdoc.Вкладка "доср.погашение"[301](0)
worddoc.FormFields(7).result = childdoc.Osn_pogash(0)
'worddoc.FormFields(8).result = childdoc.Вкладка "доср.погашение"Дата досрочн.погашения"(0)
worddoc.FormFields(9).result = pdoc.Dol_podp(0)
worddoc.FormFields(10).result = pdoc.Osn_podpis(0)
worddoc.FormFields(11).result = pdoc.Podpisant(0)
worddoc.FormFields(12).result = Today

'	worddoc.saveas("File1") 'сохранение документа-Word'a с именем файла ""
Dim nm_doc As String
nm_doc$ = "File2.doc"
WordDoc.saveas(tmppth_str + "\"+nm_doc$)

WordDoc.close

If pdoc.HasItem("Sfakt") Then
Set rttmp = pdoc.GetFirstItem("Sfakt")
Else
Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
End If

'Добавляет в RTF-поле присоединенный файл или ссылку на него.
Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, "nm_doc$", tmppth_str + "\"+nm_doc$)

pdoc.Flag_Close="1"
Call uidoc.FieldSetText("$KM", "6" )
Call pdoc.Save( True, True )
pdoc.SaveOptions = "0"
Call ws.ViewRefresh
Call uidoc.Close	(True)
Call ws.EditDocument(True, pdoc)


'	Удаляем директорию
Kill tmppth_str & "\" & CStr(pth_str$)
Kill tmppth_str + "\"+nm_doc$
RmDir tmppth_str
Exit Sub

End Sub
Код агента:

Код:
Sub Initialize

Dim ws As New NotesUIWorkspace
Dim sess As New NotesSession

Dim pdoc As NotesDocument, childdoc As NotesDocument, tmpDoc As NotesDocument, profile As NotesDocument
Dim dc As NotesDocumentCollection

Dim db As NotesDatabase, sprdb As NotesDatabase

Dim agent As NotesAgent	

Set agent = sess.CurrentAgent

Dim uidoc As NotesUIDocument

Dim view As NotesView


'Поля, необходимо которые выгрузить
Dim Seria(0) As Variant 
Dim Number_reg(0) As String
Dim Data_reg_izm(0) As Variant
Dim Osn_pogash(0) As Variant	
Dim Dol_podp(0) As Variant	
Dim Osn_podpis(0) As Variant
Dim Podpisant(0) As Variant

Set uidoc = ws.CurrentDocument
Set pdoc = uidoc.Document	
Set db = sess.CurrentDatabase

'Профиль системы и база справочника
Set profile = db.GetProfileDocument("ConfigPrf")
If profile.pthRefer(0)="" Then
MessageBox "В профиле конфигурации системы не указан путь к БД Справочники!",0 ,"Ошибка настройки системы"
Exit Sub
End If

Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))

'Продолжать?	
Dim askme As Variant
askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")	
If askme=0 Then
Exit Sub
End If

'-------------------------------------------------------------------------------------------------------------------------------------------
Dim itm As NotesRichTextItem
Set itm = pdoc.GetFirstItem("Sfakt")

If Not itm Is Nothing Then

Call pdoc.RemoveItem("Sfakt")
pdoc.Flag_Close="1"
Call pdoc.Save( True, False )

End If
'--------------------------------------------------------------------------------------------------------------------------------------
Set childdoc = db.GetDocumentByUNID(pdoc.GetItemValue("ID_Rubl_obl")(0))	

Dim coll1 As NotesDocumentCollection
Dim dt1 As New NotesDateTime("")
Dim doc1 As NotesDocument 'Справочный док
Dim pth_str$
'По коду шаблона ищем в справочнике шаблонов нужную карточку шаблона
pth_str$=""
Set coll1 = sprdb.Search({Form = "TmpForm_Profile" & ShortName = "P002"},Nothing,0)
'	Msgbox "Количество док-тов : " & coll1.Count 
Dim rttmp As NotesRichTextItem
If coll1.Count >0 Then
Set doc1 = coll1.GetFirstDocument
Set rttmp = doc1.GetFirstItem("TmpDoc")
ForAll o In rttmp.EmbeddedObjects
If Right(o.Name,4)=".dot" Then
pth_str$ = o.Name
GoTo ExtrMark
End If
End ForAll
End If
If pth_str$="" Then
MessageBox "Невозможно перейти к генерации поручения: в справочнике шаблонов отсутствует шаблон поручения!",,"Внимание!"
Exit Sub
End If

ExtrMark:	
'Создаем каталог временной выгрузки на С
Dim dt As New NotesDateTime( "" )
Dim tmppth_str As String, dt_date$,dt_time$
Call dt.SetNow
dt_date$ = dt.DateOnly
dt_time$ = dt.TimeOnly
dt_date$ = Left(dt_date$,2)+Right(Left(dt_date$,5),2)+Right(dt_date$,2)
dt_time$ = Left(dt_time$,2)+Right(Left(dt_time$,5),2)+Right(dt_time$,2)

tmppth_str = Environ$("TEMP") + "\TmpTpl_"+dt_date$+"_"+dt_time$
MkDir tmppth_str

'Выгружаем шаблон в созданную директорию
Dim object As NotesEmbeddedObject
Set object = rttmp.GetEmbeddedObject(pth_str$ )
Call object.ExtractFile (tmppth_str & "\" & CStr(pth_str$))

'--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------	
Dim Word As Variant
Dim WordDoc As Variant
'Новый объект Word
'Создание объекта Word'a
Set Word = CreateObject("Word.Application") 
Call Word.documents.add(tmppth_str & "\" & CStr(pth_str$)) 'Создаем новый документ на основе соответствующего шаблона
Set WordDoc = Word.activedocument

'Присваивание полям-Word'a значений из полей notes-документа
worddoc.FormFields(1).result = childdoc.Name(0)
worddoc.FormFields(2).result = childdoc.Seria(0)
worddoc.FormFields(3).result = childdoc.Number_reg(0)
worddoc.FormFields(4).result = childdoc.Data_reg_izm(0)
'worddoc.FormFields(5).result = childdoc.Вкладка "досрочное погашение"кол-во погаш.шт(0)
'worddoc.FormFields(6).result = childdoc.Вкладка "доср.погашение"[301](0)
worddoc.FormFields(7).result = childdoc.Osn_pogash(0)
'worddoc.FormFields(8).result = childdoc.Вкладка "доср.погашение"Дата досрочн.погашения"(0)
worddoc.FormFields(9).result = pdoc.Dol_podp(0)
worddoc.FormFields(10).result = pdoc.Osn_podpis(0)
worddoc.FormFields(11).result = pdoc.Podpisant(0)
worddoc.FormFields(12).result = Today

'	worddoc.saveas("File1") 'сохранение документа-Word'a с именем файла ""
Dim nm_doc$
nm_doc$ = "File2.doc"
WordDoc.saveas(tmppth_str + "\"+nm_doc$)

WordDoc.close

If pdoc.HasItem("Sfakt") Then
Set rttmp = pdoc.GetFirstItem("Sfakt")
Else
Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
End If

'Добавляет в RTF-поле присоединенный файл или ссылку на него.
Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, "nm_doc$", tmppth_str + "\"+nm_doc$)

pdoc.Flag_Close="1"
Call uidoc.FieldSetText("$KM", "6" )
Call pdoc.Save( True, True )
pdoc.SaveOptions = "0"
Call ws.ViewRefresh
Call uidoc.Close	(True)
Call ws.EditDocument(True, pdoc)


'	Удаляем директорию
Kill tmppth_str & "\" & CStr(pth_str$)
Kill tmppth_str + "\"+nm_doc$
RmDir tmppth_str
Exit Sub

End Sub

объявление переменных отредактировал и расскомментил временную выгрузку на C.
Теперь агент отрабатывает правильно, но в конце выдает ошибку, которая не влияет на нужный результат отработки агента
 

Вложения

  • 1.jpg
    1.jpg
    132,9 КБ · Просмотры: 313

Kizarek86

Green Team
20.07.2007
871
7
BIT
33
Добавьте уже обработчик ошибок или используйте дебагер, чтобы четко понимать в какой строке ошибка...
 
D

Dimok-163rus

Добавьте уже обработчик ошибок или используйте дебагер, чтобы четко понимать в какой строке ошибка...

буду признателен, если распишите как в

IBM Lotus Domino Designer 8.5

Выпуск 8.5.3 . рус.версии

пользоваться дебагером :D
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
Ищи сверху в меню. Сразу за "Действия", находится Tools (инструменты?) внутри ищи пункт "Отладчик LotusScript" там еще слева от него иконка будет. желтая с синей стрелкой.

P.s. обработчик ошибок не гонит, просто иногда не так считает строки в LS агентах(надо переходить на Initialize и искать номер строки).
Верни обработчик.
 
D

Dimok-163rus

Ищи сверху в меню. Сразу за "Действия", находится Tools (инструменты?) внутри ищи пункт "Отладчик LotusScript" там еще слева от него иконка будет. желтая с синей стрелкой.

P.s. обработчик ошибок не гонит, просто иногда не так считает строки в LS агентах(надо переходить на Initialize и искать номер строки).
Верни обработчик.


вот такая баня у меня, я же итак в Initialize пишу


разобрался с отладчиками
 

Вложения

  • Безымянный.jpg
    Безымянный.jpg
    222,2 КБ · Просмотры: 464

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
убираем эти 3 переменные.
и Меняем на:
Код:
mesError:
Msgbox "Error in line: " & erl & chr(10) & chr(13) & Error$
exit Sub 
end sub
 
Мы в соцсетях:

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