Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lotus Notes/Domino: Программирование
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/56: Рейтинг темы: голосов - 56, средняя оценка - 4.89
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
1

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

21.08.2013, 09:44. Просмотров 10041. Ответов 12
Метки нет (Все метки)

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

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

Тестирую агент на сервере!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2013, 09:44
Ответы с готовыми решениями:

Агент перестал видеть функцию из библиотеки
Добрый день! Агент перестал видеть функцию из библиотеки. Пишет Cannot find...

Трабла, агент неправильно изменяет другой агент
Ситуация: есть у меня мега агент, который занимается настройкой сервера,...

Java-агент Vs Ls-агент — кто быстрее?
Бэк-агента можно написать как на лс, так и на яве. Кто-нибудь обладает...

Агент по расписанию..
Всем здравствуйте! Столкнулся вот с такой штукой! У меня есть агент вот его...

Агент по расписанию
Доброго времени!! Сталкнулся с такой проблемкой.Возникла необходимость...

12
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
21.08.2013, 10:00 2
ну ли прав в папку нет, либо файл не закрыт, либо неверный путь.


Тестирую агент на сервере!
RunOnServer?
Не, если бы на сервере - ошибка была бы записана в Log сервера, а не на экране.
Так что агент работает на клиенте, следовательно ошибка в имени файла, в полном имени. Папки может не быть.
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
21.08.2013, 10:40 3
Цитата Сообщение от savl
ну ли прав в папку нет, либо файл не закрыт, либо неверный путь.

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

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

А какой папки может не быть говоришь?
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
21.08.2013, 10:59 4
А какой папки может не быть говоришь?
Путь к файлу проверь.
Для примера, если путь такой {C:\apps\filename.*}, то если нет папки apps будет такая ошибка.
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
21.08.2013, 11:06 5
файл ложится в документ, в свою очередь который лежит на сервере...хм
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
21.08.2013, 11:16 6
Ошибка в одном из этих мест, если код агента не менялся по сравнению с кнопкой:

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
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
То что документ в базе, а база на сервере - ничего не значит, агент все равно отрабатывает на клиентской машине.
Изменяет документ в рамках открытого клиента, как только сохранил документ - документ изменился в базе.
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
21.08.2013, 11:27 7
Пришлось объявить пару полей типа 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"
и убрал обработчик ошибок, на него тоже гнал )


.SpoilerTarget">Спойлер: Раскрывающийся Текст


LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
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 ytm As NotesRichTextItem
Set ytm = pdoc.GetFirstItem("Sfakt")
 
If Not ytm Is Nothyng 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"},Nothyng,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
Создание объекта Worda
Set Word = CreateObject("Word.Application")
Call Word.documents.add(tmppth_str & "\" & CStr(pth_str$)) Создаем новый документ на основе соответствующего шаблона
Set WordDoc = Word.activedocument
 
Присваивание полям-Worda значений из полей 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") сохранение документа-Worda с именем файла ""
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


.SpoilerTarget">Спойлер: Раскрывающийся Текст
Код агента:


.SpoilerTarget">Спойлер: Раскрывающийся Текст


LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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 ytm As NotesRichTextItem
Set ytm = pdoc.GetFirstItem("Sfakt")
 
If Not ytm Is Nothyng 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"},Nothyng,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
Создание объекта Worda
Set Word = CreateObject("Word.Application")
Call Word.documents.add(tmppth_str & "\" & CStr(pth_str$)) Создаем новый документ на основе соответствующего шаблона
Set WordDoc = Word.activedocument
 
Присваивание полям-Worda значений из полей 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") сохранение документа-Worda с именем файла ""
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.
Теперь агент отрабатывает правильно, но в конце выдает ошибку, которая не влияет на нужный результат отработки агента
0
Kyzoryk86
0 / 0 / 0
Регистрация: 16.07.2007
Сообщений: 849
21.08.2013, 12:01 8
Добавьте уже обработчик ошибок или используйте дебагер, чтобы четко понимать в какой строке ошибка...
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
21.08.2013, 12:11 9
Цитата Сообщение от kizarek
Добавьте уже обработчик ошибок или используйте дебагер, чтобы четко понимать в какой строке ошибка...
буду признателен, если распишите как в

IBM Lotus Domino Designer 8.5

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

пользоваться дебагером :D
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
21.08.2013, 12:26 10
Ищи сверху в меню. Сразу за "Действия", находится Tools (инструменты?) внутри ищи пункт "Отладчик LotusScript" там еще слева от него иконка будет. желтая с синей стрелкой.

P.s. обработчик ошибок не гонит, просто иногда не так считает строки в LS агентах(надо переходить на Initialize и искать номер строки).
Верни обработчик.
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
21.08.2013, 13:18 11
Цитата Сообщение от savl
Ищи сверху в меню. Сразу за "Действия", находится Tools (инструменты?) внутри ищи пункт "Отладчик LotusScript" там еще слева от него иконка будет. желтая с синей стрелкой.

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

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

разобрался с отладчиками
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
21.08.2013, 13:28 12
убираем эти 3 переменные.
и Меняем на:

LotusScript
1
2
3
4
mesError:
Msgbox "Error in line: " & erl & chr(10) & chr(13) & Error$
exit Sub
end sub
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
21.08.2013, 13:41 13
ага так и сделал :D
0
21.08.2013, 13:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2013, 13:41

Самоудаляющийся агент
Добрый день(вечер). Может ли агент по завершении своей работы удалить сам себя...

Не Запускается Агент
Eсть обычная лотусовая форма в бд. В ней два поля. Есть Xpage - в нем эти же...

Серверный агент
Dim docST As NotesDocument Dim ws As New NotesUIWorkspace Set docST =...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru