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

Agent и параметры его

07.04.2015, 18:08. Показов 5401. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
эти все пляски-с-бубнами порядком поднадоели, но звук высоких технологий доходит очень медленно (в вязкой среде) , я про DOTS
а потому - агент
передать документ - не проблема, а вот коллекцию - уже вызывает задумчивость...
c DCOM у Андрея не срослось (да и виндядко - не сильно веселая тема)
дергать IIOP сильно замороченная тема, да и ЛС там никак
возникла мысль, тривиальная, передавать список unid
оформил в классы докрутил zip/unzip
если будет интересно - выложу, в данный момент могу только кусками, в отдельную БД оформить не было времени

.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
%REM
*********************************************
Agent test\NDCFile
Created Mar 30, 2015
Description: Comments for Agent
%END REM
Option Public
Option Declare
Use "Files.LS2J"
Sub Initialize
On Error GoTo ErrH
Dim NDCfile As New NDCFile, path As String
Dim NDC As NotesDocumentCollection
Set NDC=SelectedDocsUI
Set NDCfile.Collection(Path)=NDC
NDCfile.Add(path)
NDCfile.Compress(path &{.zip})
NDCfile.Decompress(path &{.zip})
Set NDC=NDCfile.Collection(path)
Dim doc As NotesDocument
Set doc=NDC.Getfirstdocument()
Print {first unid:} doc.Universalid
Kill path &{.zip}
Print {path:} path
Quit:
Exit Sub
ErrH:
Error Err, RaiseError
End Sub
сжатие и распаковка, в реальном варианте - на разных компах будет (или в разных частях кода - так правильнее)

.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
Function AgentWNDC(db As NotesDatabase, agentName As String, NDC As NotesDocumentCollection)
On Error Goto ErrH
Dim docproc As NotesDocument
Dim NDCfile As New NDCFile, path As String
Set NDC=SelectedDocsUI
получаем файл с коллекцией unid
Set NDCfile.Collection(Path)=NDC
NDCfile.Add(path)
path=path &{.zip}
NDCfile.Compress(path)
Dim agent As NotesAgent
Set agent=db.GetAgent(agentName)
Set docproc=db.CreateDocument
Call docproc.ReplaceItemValue({form},{Log})
Dim rtItem As NotesRichTextItem
Set rtItem=docproc.CreateRichTextItem({body})
прекрепляем файл к документу, для агента
Call rtItem.EmbedObject(EMBED_ATTACHMENT,{}, path)
Call docproc.ComputeWithForm(False,False)
Call docproc.Save(True,False)
Call agent.Run(docproc.NoteID)
в docproc прописывается STATUS_FLD с результатом обработки
Set AgentWNDC=docproc
Quit:
Exit Function
ErrH:
Error 1024, RaiseError
Resume Quit
End Function
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.04.2015, 18:08
Ответы с готовыми решениями:

Записать макрос на VBScript для его запуска через Agent MS SQL Server
Добрый день, уважаемые форумчане. У меня есть простенький макрос, который запускает макрос в другой книги. Как мне его переписать под...

Получить JSON и передать все его параметры его в Intent. Использован автофильтр
Всем привет. Я тут запутался, помогите разобраться. Стоит задача выполнить такой функционал: получить данные JSON, один из параметров...

HR и его параметры
Возникла необходимость использовать горизонтальные линии, проблема в том, что хочу её сделать на 50% и выровнять по центру, на 50%...

12
0 / 0 / 0
Регистрация: 15.09.2006
Сообщений: 99
08.04.2015, 04:29
можно несколько мыслей вслух?
1. про путь: всегда можно использовать temp, как получить в винде и линухах где-то было на форумах
2. на сколько я помню, параметр для агента это некая строка из 8 симолов и не обязательно, что бы она была реально как-то связана с каким-то реальным Noteid. (возможно только цифры hex, точно уже не помню давно это было)

Таким образом можно упростить т.е.
set NDCfile = New NDCfile(NotesDocCollection)
где в New будет сформирован временный файл в temp директории с именем подходящим для передачи в агент и сразу зазипован.
Call agent.Run(NDCfile.FileName)
где DCfile.FileName имя зазипованного файла без .zip в формате подходящем для agent.Run

в Destroy класса NDCfile - удаление файла. и всё ни каких лишних движений, документов, строк кода - всё спрятано.

Есть еще момент, когда надо вызвать агент на сервере, то тогда только через временный файл, но надо будет этот файл приаттачить к временному документу и передать Noteid временного док-та. Кстати тоже логику можно спрятать, например, если берем свойство NDCfile.Noteid, то автоматом формируем временный док-т и отдаем его noteid, а при удалении класса удаляем не только файл, но и временный док.

Тут кстати вопрос, а ГДЕ вы временные док-ты будите создавать? Поскольку если это продакшин и пользователи, например, не могут удалять док-ты в базе, получим проблему с мусорными док-тами. Решение, база для временных операций, но тут уже логика системы в целом должна играть. Так что универсально для ВСЕХ случаев тут не подойдет.
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
08.04.2015, 08:17
Хм...
Я обычно документ создавал в базе со списком UNID, которые надо обработать.
Далее агент просто ищет этот док, если есть - обрабатывает.

Можно использовать, если есть база Mail-In, в которой крутится агент на приход почты. - этакая очередь запросов на обработку.
Агент анализирует и уже запускает внешний... Который работает с этим запросом, в котором файл...
Хм, в такой связке, это интересно... Надо подумать...
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
08.04.2015, 11:25
Цитата Сообщение от duchan
1. про путь: всегда можно использовать temp, как получить в винде и линухах где-то было на форумах
оно так и есть, в проперти Collection, path - это принимающая переменная
все действяи над файлами скрыты, более того - есть возможность автоматически удалять (она вшита в класс)
оставлена возможность указать путь принудительно и не удалять автоматически
опять же - сжатие необязательная процедура, потому и путь оставлен как параметр
др. ловами - создан базовый класс, с более широкой кастомизацией, под дальнейшую специализацию
там и развертывание архива основано на классе, кот. выдает рекурсивный список файлов по всем вложенным каталогам (на java, визитор)


Цитата Сообщение от duchan
2. на сколько я помню, параметр для агента это некая строка из 8 симолов и не обязательно, что бы она была реально как-то связана с каким-то реальным Noteid. (возможно только цифры hex, точно уже не помню давно это было)
через док сделано для того (и это я акцентировал) - чтобы запускать на разных компах (клиент-сервер, например RunOnServer)


Цитата Сообщение от savl
Я обычно документ создавал в базе со списком UNID, которые надо обработать.
Далее агент просто ищет этот док, если есть - обрабатывает.
глубина озвученной мною мысли - в использовании (в том числе) для очень больших коллекций (или для группы коллекций), что автоматически приведет к головняку с РТ, потому и файл
В качестве доработки - возможна подобная передача уже DXL коллекций (что более нагрузочно, но не менее забавно ;) )
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
08.04.2015, 11:33
собсно

.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
%REM
*********************************************
Class NDCFile
Description: получить коллекцию документов
по списку UNID из файла
или записать в Файл
%END REM
Class NDCFile As FilesObj
Private NDC As NotesDocumentCollection
Private db As NotesDatabase
Private ses As NotesSession
Private arrFiles As Variant
Private path As String
Private tmp As TempFolderManager
%REM
*--------------------------------------------
Sub New
Description: Comments for Sub
%END REM
Sub New()
Dim routineName As String
routineName="New"
On Error GoTo ErrH
your code here
Set me.ses=New NotesSession
Set me.db=me.ses.Currentdatabase
Quit:
Exit Sub
ErrH:
Error Err, RaiseError
Resume Quit
End Sub
%REM
*--------------------------------------------
Property Get Collection
Description: path is directory
%END REM
Property Get Collection(path As String) As NotesDocumentCollection
Dim routineName As String
routineName="Collection"
On Error GoTo ErrH
your code here
Set NDC=db.CreateDocumentCollection()
me.path=path
me.arrFiles=Me.Files(me.path)
If DataType(me.arrFiles)=V_STRING Then
Me.NDCFromFile(CStr(me.arrFiles))
Else
ForAll f In me.arrFiles
Me.NDCFromFile(CStr(f))
End ForAll
End If
Set Collection=NDC
Quit:
Exit Property
ErrH:
Error Err, RaiseError
Resume Quit
End Property
%REM
*--------------------------------------------
Function NDCFromStream
Description: Comments for Function
%END REM
Private Sub NDCFromFile(fname As String)
Dim stream As NotesStream
Set stream=ses.Createstream()
Dim routineName As String
routineName="NDCFromStream"
On Error GoTo ErrH
your code here
If stream.Open(fname) Then
Dim unid As String
Do
unid=stream.Readtext(STMREAD_LINE, EOL_PLATFORM)
Dim doc As NotesDocument
Set doc=GetDocumentByUNIDSilent(me.db, unid)
If Not doc Is Nothyng Then Call NDC.Adddocument(doc)
Loop Until stream.Iseos
End If
Quit:
Exit Sub
ErrH:
Error Err, RaiseError
Resume Quit
End Sub
%REM
*--------------------------------------------
Property Set Collection
Description: path is full path to file
%END REM
Property Set Collection(path As String) As NotesDocumentCollection
Dim routineName As String
routineName="Collection"
On Error GoTo ErrH
your code here
Dim doc As NotesDocument, stream As NotesStream
Set doc=Me.Collection.Getfirstdocument()
Set stream=ses.Createstream()
Set tmp=New TempFolderManager
me.path=tmp.NewFilename({txt}, true)
path=me.path
Call stream.Open(me.path)
Do While Not doc Is Nothyng
Call stream.Writetext(doc.Universalid, EOL_PLATFORM)
Set doc=Me.Collection.Getnextdocument(doc)
Loop
Set NDC=Collection
Quit:
Exit Property
ErrH:
Error Err, RaiseError
Resume Quit
End Property
End Class
и

LotusScript
1
2
Set tmp=New TempFolderManager
me.path=tmp.NewFilename({txt}, true)
это именно автоматическое удаление при дестрое, а zip не трогаю ибо его создание факультативно, класс базовый
удаление можно оформить в виде TempFolderManager.Manage(path+{.zip}), в Compress, нюанс состоит в необходимом времени жизни зипа (его можно и не аттачить и использовать позже...)


--- Добавлено 9 апр 2015. Первое сообщение размещено 9 апр 2015 ---

над EOL_PLATFORM тоже надо думать ;) ибо клиент, в большинстве, винда, а вот серваки, у мну - линух

ЗЫЖ коллеги, спасибо за комментарии и интерес к теме
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
08.04.2015, 12:17
Цитата Сообщение от lmike
В качестве доработки - возможна подобная передача уже DXL коллекций (что более нагрузочно, но не менее забавно ;) )
О, идея...В XML можно же все сгруппировать как надо и все связи прописать...
Еще чуть-чуть и можно сделать нормальный журнал транзакций.
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
08.04.2015, 17:35
столкнулся с интересной особенностью бриджа LS2J...
код

Код (Java):
public class ZipUtil {
private String[/URL] enc = "Windows-1251";
ArrayList[/URL] arrFiles = new ArrayList[/URL]();
boolean bFullPath = false;
public static final String[/URL] sep = System[/URL].getProperty("file.separator");
....
public static String[/URL] fs_sep(){return sep;}
выше - класс, кот. дергает в конструкторе

LotusScript
1
2
 Set ZipClass = jSession.GetClass("org.files.ZipUtil")
sep=ZipClass.sep
дергаем из формы (как угодно хоть акшн, хоть кнопка на форме), дык эта сумкадраная грит - де нету такого мембера, в то время как из агента - все норм
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
08.04.2015, 17:40
также не будет работать:
sep=ZipClass.fs_sep()
а вот из агента будет и с приватным private static final String sep = System.getProperty("file.separator");
и sep=ZipClass.fs_sep()
0
0 / 0 / 0
Регистрация: 09.12.2012
Сообщений: 101
09.04.2015, 05:15
Я предпочел бы, в качестве передачи параметров (serverName, databasePath, unid или NotesUrl), использовать транзитную вспомогательную базу. Группировать параметры путем создания документа-контейнера (через DigestSearch), а сами параметры к нему респонзить. По окончании все это подчищать. Во избежании проблем с индексами вьюх, просто не создаем их вообще, пусть останется единственная с формулой отбора Select Form="Babuin"))
Без бубна с зипами и бриджами, без обид
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
09.04.2015, 08:04
Цитата Сообщение от lmike
дергаем из формы (как угодно хоть акшн, хоть кнопка на форме), дык эта сумкадраная грит - де нету такого мембера, в то время как из агента - все норм
Давно заметил, что мост корректно работает только в агентах...
Даже если есть LS2J либа, то все равно в агенте лучше работает.
Где-то видел инфу, что это связано с класслоудером, мол в технологии агентов он один, а в форме другой.
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
09.04.2015, 09:48
Цитата Сообщение от Darkhan
Я предпочел бы, в качестве передачи параметров (serverName, databasePath, unid или NotesUrl), использовать транзитную вспомогательную базу. Группировать параметры путем создания документа-контейнера (через DigestSearch), а сами параметры к нему респонзить. По окончании все это подчищать. Во избежании проблем с индексами вьюх, просто не создаем их вообще, пусть останется единственная с формулой отбора Select Form="Babuin"))
Без бубна с зипами и бриджами, без обид
не понял мысли...
бридж только исходя из работы в ЛС и только для экономии трафика - зип(и сокращения времени передачи)

кэйс первый - вот есть несколько коллекций, эдак документов 100000, кот. надо обработать
отбор произведен на рабочей станции, база - на сервере, есть желание запустить код на сервере

второй кэйс - некий код наработал коллекцию и есть желание обработать её в рамках другого процесса и, возможно, отложенно

третий кейс (почти первый) - выделили, интерактивно, доки обработать хотим на сервере (по разным на то причинам)
где создается док с аттачем - это зависит от задачи, концепт данного подхода в разделении кода и нагрузки
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
09.04.2015, 11:41
как будет это представлено:
будет отдельная БД, для спец доков
будет только файл
глубоко безразлично на общем уровне
НО файл, в контексте универсальности обработки, на мой взгляд - гибче, а сжатие текстовой информации - это вполне себе достойная задача
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
09.04.2015, 12:15
Цитата Сообщение от savl
Где-то видел инфу, что это связано с класслоудером, мол в технологии агентов он один, а в форме другой.
это я знаю...
собсно еще один гвоздь в гроб кода на формах
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.04.2015, 12:15
Помогаю со студенческими работами здесь

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

Динамический textview и его параметры
Люди помогите пожалуйста :cry:, как мне динамическому listview задать background? Вот что у меня сейчас есть LinearLayout layout =...

Многопоточность параметры метода и его тип
мне говорили что не принимаеат метод что передается в новый поток параметры оказывается передается, только с типом object Thread...

Функция принимает в параметры массив и сжимает его
Написать функцию которая принимает в параметры массива и сжимает его путем сложения разных соседних местами, заполнив свободные места...

Конструктор StreamReader: за что отвечают его параметры
Для класса StreamReader есть конструктор, который принимает 4 параметра - path, encoding, detectEncodingFromByteOrderMarks, bufferSize. C...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru