Das Notes Forum

HCL Notes / Domino / Diverses => Entwicklung => Thema gestartet von: Andreas1977 am 12.06.25 - 12:42:58

Titel: Notes Agent programmatisch erstellen
Beitrag von: Andreas1977 am 12.06.25 - 12:42:58
Hallo,
nachdem ich (mit eurer Hilfe) mit Lotusscript eine Mail-In Datenbank anlegen kann, würde ich diese Funktion gerne erweitern.
Ich möchte gern einen neuen Agenten in dieser Mail-In Datenbank erstellen.
Könnt ihr mir sagen ob das möglich ist?
Bisher konnte ich nur Lesezugriff auf die Liste der Agenten in der Dokumentation finden. Ich konnte nirgends Funktionen finden, um einen Agent mit Programmcode zu erzeugen.

Vielen Dank schonmal für eure Hilfe.
Titel: Antw:Notes Agent programmatisch erstellen
Beitrag von: eknori am 12.06.25 - 13:34:30
Das geht nur über das C API SDK https://opensource.hcltechsw.com/domino-c-api-docs/howto/user_guide/Agents/
Titel: Antw:Notes Agent programmatisch erstellen
Beitrag von: it898ur am 12.06.25 - 13:36:13
Hallo,

Notes-Designelemente verteilt man normalerweise nicht per Skript. Daher wirst Du auch keine Möglichkeit finden Agenten programmtechnisch zu erzeugen. Im besten Fall kann man Agenten von einer Datenbank in eine andere kopieren.

Das korrekte Vorgehen wäre hier aber das Anlegen einer Schablone und anschließend der neuen DB einfach die Schablone zuweisen. Dann klappt es auch mit der automatischen Verteilung von Agenten und anderen Designelementen.

Viele Grüße

André
Titel: Antw:Notes Agent programmatisch erstellen
Beitrag von: Tode am 13.06.25 - 08:12:35
Ich stimme zu, dass man Agenten normalerweise nicht programmatisch verteilt, trotzdem kann man das tatsächlich rein mit LotusScript hinbekommen.

Bevor ich den Lösungsansatz erläutere würde ich aber nach dem Anwendungszweck fragen. Mir ist in meinen knapp 30 Jahren mit Notes / Domino kein Fall untergekommen, wo ich einen Agenten hätte "generisch" mittels LotusScript erstellen müssen.
Sowas macht man normalerweise mit einer angepassten Schablone, die den gewünschten Agenten enthält und ggf. Konfigurationsdokumenten, um das Verhalten des Agenten zu steuern.

Das höchste der Gefühle, was ich bisher benötigt habe, war, dass man LotusScript-Code in einer Konfigurationsmaske hinterlegt, und diesen dann mittels "Evaluate" innerhalb eines Agenten ausführt.

Aber nun zurück zur Frage:

Nutze mal den Designer Client, um einen Agenten als DXL zu exportieren (Tools - DXL Utilities - Exporter). Du erhältst ein XML File, in dem Du den Quellcode gut erkennen kannst... Diesen Quellcode kannst Du nun fast beliebig anpassen (Maskierung von Sonderzeichen beachten) und dann den Agenten mittels NotesDXLImporter einfach in eine beliebige Datenbank importieren... Der XML Quellcode, den Du importierst kommt dabei entweder aus einem File, was irgendwo liegt, oder aus einem In-Memory NotesStream...

Hier mal ein Auszug aus einer meiner Klassen für generellen DXL Import (zu finden in meiner N4Y Toolbar unter https://torsten.link in der ScriptLibrary "N4Y.ImportExportLib" in der Klasse "N4YDXLImporter"). Ist zwar so nicht lauffähig, aber damit solltest Du ein Gefühl dafür geben, wie das geht:

Code
Dim dxlImport As NotesDXLImporter
Dim streamXml As NotesStream

Set streamXml = g_ses.CreateStream
Call streamXml.Open( Me.xmlFilePath )

Set dxlImport = g_ses.Createdxlimporter(streamXml, Me.dbImport)

dxlImport.Documentimportoption = Me.m_limportOptions( N4Y_DXLTYPE_DOCUMENTS )
dxlImport.Designimportoption = Me.m_limportOptions( N4Y_DXLTYPE_DESIGN )
dxlImport.Aclimportoption = Me.m_limportOptions( N4Y_DXLTYPE_ACL )
dxlImport.Replacedbproperties = Me.m_limportOptions( N4Y_DXLTYPE_DBPROPERTIES )
dxlImport.Compilelotusscript = Me.m_limportOptions( N4Y_DXLTYPE_COMPILE )
dxlImport.Replicarequiredforreplaceorupdate = Me.m_limportOptions( N4Y_DXLTYPE_REPLICAREQUIRED )
		
On Error GoTo ErrorImport
Call dxlImport.Process()
On Error GoTo ErrorRoutine

In Deinem Fall würdest Du DesignImportOption = DXLIMPORTOPTION_REPLACE_ELSE_CREATE setzen und alle anderen auf DXLIMPORTOPTION_IGNORE statt das irgendwoher aus irgendeiner Konfiguration auszulesen.
Titel: Antw:Notes Agent programmatisch erstellen
Beitrag von: ascabg am 13.06.25 - 11:27:20
Man kann den Vorrednern nur zustimmen, einen Agenten nicht auf diese Art und Weise in einer Datenbank zu erstellen.

Am Einfachsten ist es, du hast ein Template, auf dem basierend du die neue Datenbank erstellst. Und in diesem Template ist der
betreffende Agent bereits enthalten.

Und mit Set dbNewNotesDb = dbTemplate.CreateFromTemplate("Server", "Filename", Trus/False, [max. Size])

erstellst du dann die neue Datenbank basierend auf dem Template.


Andreas
Titel: Antw:Notes Agent programmatisch erstellen
Beitrag von: Andreas1977 am 16.06.25 - 10:04:53
Vielen Dank für eure Antworten.
Da ich noch recht neu im Notesumfeld bin, habe ich es bisher vermieden an den Templates heranzugehen.
Vor allem weil bei uns bald ein Upgrade des Notesservers ansteht und ich nicht genau weiß, ob die Änderungen der Mailvorlage übernommen wird oder nicht.
ich denke ich werde mir spätestens nach dem Upgrade eine eigene Mailvorlage mit den entsprechenden Agenten erstellen, das scheint ja der gängige Weg zu sein