NOTESSIDAN

Allt om Lotus Notes & Domino




Schedulera en agent med Lotusscript och DXL
Det finns inga metoder i agentklassen i Lotusscript för att schedulera en agent programmatiskt. Jag har istället gjort ett script som sätter en agents scheduleringsegenskaper med hjälp av DXL.

Scriptet tar vilken agent som helst och gör om den till en schedulerad agent med de egenskaper som du sätter, tex med vilket intervall du vill att den ska köras.

Här är ett snabbt flöde på vad som görs i koden nedan.
  • Specificera vilken agent du vill processa
  • Hämta agenten och lägg den i en notesnotecollection
  • Exportera agenten som XML (DXL)
  • Tala om Lotusscript att vi vill processa xmlkoden enligt DOM
  • Vänta till processen att använda DOM är klar
  • Ändra eller skapa de noder i xmlträdet som styr scheduleringen
  • Importera den förändrade XML/DXL koden för agenten till databasen igen (via s.k. pipelining)
  • Signera och spara agenten.

Lägg scriptet nedan i en agent, ange ett agentnamn och kör agenten. Angiven agent blir då satt som schedulerad oavsett om den var det tidigare eller inte. jag har bara testat denna kod i R7.

Declarations Dim AgentName As String Dim AgentType As String Dim AgentHour As String Dim agentMinute As String Dim AgentRunOnServer As String Dim AgentRunOnWeekends As String Sub Initialize ' http://www.notessidan.se Dim session As New NotesSession Dim db As NotesDatabase Dim domparser As notesdomparser Dim exporter As NotesDXLExporter Dim importer As notesDXLImporter Dim doc As notesdocument Dim nc As NotesNoteCollection Dim agent As notesagent ' Sätt agentschedulering AgentName = "Dummy" AgentType = "byminutes" AgentHour = "2" AgentMinute = "10" AgentRunOnServer = "local" AgentRunOnWeekends = "true" Set db = session.CurrentDatabase ' Hämta agenten och lägg den i nc Set agent = db.GetAgent(AgentName) Set nc = db.CreateNoteCollection(False) Call nc.Add(agent) ' Exportera agenten som xml Set exporter = session.CreateDXLExporter(nc) ' Se till så att vi kan processa xml:et via xmlklasserna i Notes Set domParser = session.CreateDOMParser(exporter) 'Tigga ProcessDom när domParsen är klar On Event PostDOMParse From domParser Call ProcessDOM ' Importera in de förändringar vi gjort i ProcessDom in i databasen igen Set importer = session.CreateDXLImporter(domparser, db) importer.DesignImportOption = 6 Call exporter.process ' Signera och spara den ändrade agenten Set doc = db.GetDocumentByID(nc.GetFirstNoteId) Call doc.Sign() Call doc.save(False,False) End Sub Sub ProcessDom(domParser As NotesDOMParser) ' http://www.notessidan.se Dim rootnodelist As NotesDOMNodeList Dim agentnodelist As NotesDOMNodeList Dim triggernode As NotesDOMElementNode Dim agentnode As NotesDOMElementNode Dim domdoc As NotesDOMDocumentNode Dim newnode As notesdomelementnode Dim newnodelist As notesdomnodelist 'Processa XML Set domDoc = domParser.Document Set rootnodeList = domDoc.GetElementsByTagName("agent") For i = 1 To rootnodeList.NumberOfEntries Set agentNode = rootnodeList.GetItem(i) If agentnode.GetAttribute("name") = AgentName Then Set agentnodelist = agentNode.GetElementsByTagName ("trigger") Set triggernode = agentnodelist.GetItem(1) Call triggernode.SetAttribute("type","scheduled") Set newnodelist = triggernode.GetElementsByTagName("schedule") ' Kolla ifall typ schedule redan finns If newnodelist.NumberOfEntries > 0 Then Set newNode = newnodelist.GetItem(1) Else Set newnode = domdoc.CreateElementNode("schedule") End If ' Ersätt eller skapa nya attribut Call newnode.SetAttribute("type",AgentType) Call newnode.SetAttribute("hours",AgentHour) Call newnode.SetAttribute("minutes",AgentMinute) Call newnode.SetAttribute("runlocation",AgentRunOnServer) Call newnode.SetAttribute("onweekends",AgentRunOnWeekends) Call triggernode.appendchild(newnode) End If Next domParser.Serialize End Sub



Relevanta Poster på Notessidan:



Fler Poster om: Lotus, Notes, Domino, DXL, XML, Lotusscript, Agent

Fler bloggar om: , , , , , ,

Technorati: , , , , , ,

Delicious: Lotus, Notes, Domino, DXL, XML, Lotusscript, Agent
Publicerad 2006-09-24 | Kommentarer: 8 | Läsningar: 2274
Kommentarer

Tanker ( 2006-09-28 12:15:06 )
Flot kode - super enkel og let at forstå : )
- der er bare et problem:

Når keg kører den, ender den i en "DXL importer operation failed"
- ingen forklaring... ?
Thomas Adrian ( 2006-09-28 14:45:41 ) Websida
Hej Tanker !
Jag har inte testat koden i version 6 , om du kör version 6 kan det vara att den inte stödjer en del XML objekt jag använder.

Om du kör version 7 och det ändå inte funkar försök skriva felmeddelanden till statusraden med importer.log eller exporter.log och meddela mig dessa.


/Thomas


Tanker ( 2006-10-12 16:18:34 )
Hej igen - undskyld ventetiden : )

Jeg har tilføjet en errorHandler til sidst:

----------------------------------------------------------
done:
Exit Sub

errorHandler:
Msgbox "Fejl #"+Cstr(Err)+" i linie "+Cstr(Erl)+" : "+Error$
Msgbox "importer.log : "+importer.log
Resume done
----------------------------------------------------------

Den siger:

message box: Fejl #4522 i linie 45 => DXL importer operation failed

message box: importer.log :


The values for attribute 'runlocation' must be names or name tokens
Invalid schedule element attribute value: runlocation='CN=Styxx/O=Development'
DXL importer operation failed



Tanker ( 2006-10-12 16:20:20 )
Og med tag-brackets [ og ]

[?xml version='1.0'?]
[DXLImporterLog]
[error source='NotesInputSource' line='16' column='139']The values for attribute 'runlocation' must be names or name tokens[/error]
[error source='NotesInputSource' line='16' column='2']Invalid schedule element attribute value: runlocation='CN=Styxx/O=Development'[/error]
[error]DXL importer operation failed[/error]
[/DXLImporterLog]



Thomas Adrian ( 2006-10-12 16:53:06 ) Websida
Hej Tanker
Vilken version av Lotus Notes kör du ?


/Thomas
Thomas Adrian ( 2006-10-12 17:08:20 ) Websida
Hej Igen Tanker
Jag testade precis att klistra in koden i en agent och körde den mot en annan agent , och det fungerade perfekt i verion 6.5.3

Det var tidigare en liten miss i koden där variabeln AgentMinute felaktigt referades som AgentMinutes. Detta är åtgärdat nu men jag tror inte att det är ditt problem.

Så här gjorde jag, fungerar i R6 och R7

1. Skapa en ny databas
2. Skapa en ny agent i databasen och döp den till "ChangeSchedule" och klistra in koden ovan, sätt target = None
3. Skapa en ny agent till i databasen och döp den till "Test" och sätt Trigger = Event
4. Ändra koden i "ChangeSchedule" databasen så att variabeln AgentName = "Test"
5. Kör agenten "ChangeSchedule"
6. Agenten "Test" ska nu vara schedulerad

Lycka till

Hälsningar
Thomas
Tanker ( 2006-10-13 13:04:08 )
Ahhh, got it!

Call newnode.SetAttribute("runlocation","server")
Call newnode.SetAttribute("runserver",AgentRunOnServer)

runlocation er default "local"
- og så vil den ikke have et servernavn.



Tanker ( 2006-10-13 14:53:50 )
Hmmm

Nu bliver den "Scheduled" rigtigt i designer.
- men Agent Manager starter den aldrig.

Ses ikke i listen ved "tell amgr sched"

: (



Sök på Notessidan
Thomas Adrian
ThomasCertifierad utvecklare och administratör inom Notes & Domino

Kontakta mig







Senaste Sökningarna på Notessidan
Sön - sharepoint (R:1)
Sön - räkna and antal and besökare (R:0)
Sön - browser (R:17)
Sön - stoppar and mail (R:1)
Sön - korrupt (R:3)
Sön - böcker (R:0)
Sön - kalendern (R:12)
Sön - feature (R:15)
Sön - print and mime (R:2)
Sön - länka (R:0)
Sön - databasen (R:94)
Sön - access (R:47)
Sön - outlook (R:15)
Sön - webanvändare (R:0)
Sön - google and maps (R:6)
Sön - juffe (R:2)
Sön - uidoc.print (R:1)
Sön - java and lotusscript (R:26)
Sön - besök (R:0)




Databasstatistik Blogg
Uppdateras var 15:e Minut

Antal Poster:562
Antal Kommentarer: 1385
Alla sidvisningar idag:
Unika Besökare idag:
Databasstorlek: 212Mb
Fixup: 2019-08-17 00:31:14
FT:2019-08-17 10:24:08
DB Procent använd: 99
Antal Agenter: 42
Antal Formulär: 65
Antal Vyer: 60
Antal Dokument: 7947
Antal Image Resources: 108
Antal Subformulär: 18
Antal Scriptbibliotek: 11
Totalt Antal Designelement: 576
Antal Attachments: 159
Antal Konflikter: 0
Server version 1: 405
Server version 2: Release 9.0.1FP9|August 14, 2017
Server Plattform: Windows/64
Ändrad: 2019-08-17 10:39:25
Server Tidszon: Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZX=131$ZN=W. Europe
Region:
Kommentarsspam Idag: 12
Kommentarsspam Totalt: 18327


BlogRankers.com

Top Sites at iWEBTOOL.com

Fight Spam! Click Here!

Bloggtoppen.se

Listed on BlogShares

Increase website traffic

Top Internet Blogs

Site Checker