Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: MiMueller am 08.07.03 - 11:02:30
-
Hallo,
wie kann ich einem bestehenden Agenten per Lotus-Script die Parameter für den Zeitplan übergeben.
Michael
-
Falls sich Deine Frage darauf bezieht, die RunTime des Agents mittels Script zu setzten:
Gar nicht. Das müsstest Du über die API machen, mit Script kommst Du da nicht dran.
Meff
-
Kein Problem, wenn es mittels Notes-API geht!
Hast du da eine Lösung ?
-
Hi,
ich hab mal in der API-Doku geschaut. Ich hab keine Möglichkeit gefunden.
Axel
-
Wo kann man die API-Doku downloaden ?
-
Hi,
hier:
http://www-15.lotus.com/ldd/products/.cmd/cs/.ce/155/.s/377/_th/302/_lpid.301/307/_lp.301/0/_s.155/372 (http://www-15.lotus.com/ldd/products/.cmd/cs/.ce/155/.s/377/_th/302/_lpid.301/307/_lp.301/0/_s.155/372)
Axel
-
Also, Du kommst an die Einstellungen mittels:
LNAGENTSCHEDULE GetAgentSchedule() const
Und verändern kannst Du das ganze über :
LNSTATUS SetAgentSchedule( LNAGENTSCHEDULE option )
Die aktuelle Dokumentation findest Du hier:
http://www-15.lotus.com/ldd/products/.cmd/cs/.ce/155/.s/377/_th/302/_lpid.301/307/_lp.301/0/_s.155/372 (http://www-15.lotus.com/ldd/products/.cmd/cs/.ce/155/.s/377/_th/302/_lpid.301/307/_lp.301/0/_s.155/372)
Meff
-
Hi,
äähmm, ist in meiner Doku nicht vorhanden. ???
Welche Version hast du denn? Ist C-API oder C++ - API?
Axel
-
Hi,
ich hab's gefunden. Ich hatte eine ältere C-API - Doku. Ist aber in der C++ - API enthalten.
Axel
-
geht auch mit script ( zumindest im weiteren Sinne )
Const wAPIModule = "NNOTES" ' Windows/32
Const NOTE_CLASS_FILTER = &H0200
Type AssistInfo
Version As Integer
TriggerType As Integer ' 0 none, 1 schedule, 2 new mail, 3 paste, 4 manual, 5 update, 6 router
SearchType As Integer ' 0 none, 1 all, 2 new, 3 new/mod, 4 selected, 5 view, 6 unread, 7 prompt, 8 UI
IntervalType As Integer ' 0 none, 1 minutes, 2 days, 3 weeks, 4 months
Interval As Integer
Time1 As Variant ' Start time (ms since midnight)
Time2 As Variant ' Long (weekday or day of month) or end time (ms since midnight)
StartTime As Variant ' Time/Date
EndTime As Variant ' Time/Date
Flags As Long ' 1 hidden, 2 no weekends, 4 store highlights, 8 mail/paste, 16 choose server
Spare(15) As Long
End Type
Type BlockID
hPool As Long
Block As Integer
End Type
Declare Function ConvertTIMEDATEToText Lib wAPIModule Alias "ConvertTIMEDATEToText" _
( Byval zI As Long, Byval zT As Long, Byval T As Long, Byval S As String, Byval nS As Integer, nT As Integer) As Integer
Declare Function ConvertTextToTIMEDATE Lib wAPIModule Alias "ConvertTextToTIMEDATE" _
( Byval zI As Long, Byval zT As Long, pS As Long, Byval nS As Integer, Byval T As Long) As Integer
Declare Private Function NIFFindDesignNote Lib wAPIModule Alias "NIFFindDesignNote" _
( Byval hDB As Long, Byval S As String, Byval C As Integer, N As Long) As Integer
Declare Private Function NSFDbOpen Lib wAPIModule Alias "NSFDbOpen" _
( Byval PathName As String, DbHandle As Long) As Integer
Declare Private Function NSFDbClose Lib wAPIModule Alias "NSFDbClose" _
( Byval DbHandle As Long) As Integer
Declare Private Function NSFNoteOpen Lib wAPIModule Alias "NSFNoteOpen" _
( Byval hDB As Long, Byval NoteID As Long, Byval F As Integer, hNT As Long) As Integer
Declare Private Function NSFNoteClose Lib wAPIModule Alias "NSFNoteClose" _
( Byval hNT As Long) As Integer
Declare Function NSFItemInfo Lib wAPIModule Alias "NSFItemInfo" _
( Byval hNT As Long, Byval N As String, Byval nN As Integer _
, iB As BlockID, D As Integer, vB As BlockID, nV As Long) As Integer
Declare Private Function NSFNoteUpdate Lib wAPIModule Alias "NSFNoteUpdate" _
( Byval hNT As Long, Byval F As Integer) As Integer
Declare Function NSFItemDelete Lib wAPIModule Alias "NSFItemDelete" _
( Byval hNT As Long, Byval N As String, Byval nN As Integer) As Integer
Declare Private Function OSMemAlloc Lib wAPIModule Alias "OSMemAlloc" _
( Byval T As Integer, Byval N As Long, hM As Long) As Long
Declare Private Function OSMemFree Lib wAPIModule Alias "OSMemFree" _
( Byval hM As Long) As Long
Declare Private Function OSLockObject Lib wAPIModule Alias "OSLockObject" _
( Byval H As Long) As Long
Declare Private Sub OSUnlockObject Lib wAPIModule Alias "OSUnlockObject" _
( Byval H As Long)
Declare Private Function OSPathNetConstruct Lib wAPIModule Alias "OSPathNetConstruct" _
( Byval NullPort As Long, Byval Server As String, Byval FIle As String, Byval PathNet As String) As Integer
Declare Private Sub Peek Lib "MSVCRT" Alias "memcpy" _
( D As Any, Byval P As Long, Byval N As Long)
Declare Private Sub Poke Lib "MSVCRT" Alias "memcpy" _
( Byval D As Long, D As Any, Byval N As Long)
Declare Private Sub PokeString Lib "MSVCRT" Alias "memcpy" _
( Byval D As Long, Byval S As String, Byval N As Long)
Sub Click(Source As Button)
a$ = Inputbox$("Name of agent:", "Agent Info", "")
If a$ = "" Then Exit Sub
Dim session As New NotesSession
Dim info As AssistInfo
GetAssistInfo session.CurrentDatabase, a$, info
Messagebox "Version: " & Cstr(info.Version) _
& Chr$(10) & "TriggerType: " & Cstr(info.TriggerType) _
& Chr$(10) & "SearchType: " & Cstr(info.SearchType) _
& Chr$(10) & "IntervalType: " & Cstr(info.IntervalType) _
& Chr$(10) & "Interval: " & Cstr(info.Interval) _
& Chr$(10) & "Time1: " & Cstr(info.Time1) _
& Chr$(10) & "Time2: " & Cstr(info.Time2) _
& Chr$(10) & "StartTime: " & Cstr(info.StartTime) _
& Chr$(10) & "EndTime: " & Cstr(info.EndTime) _
& Chr$(10) & "Flags: " & Cstr(info.Flags)
End Sub
Sub GetAssistInfo(db As NotesDatabase, agent As String, info As AssistInfo)
np$ = Space(1024)
OSPathNetConstruct 0, db.Server, db.FilePath, np$
Dim hDB As Long
NSFDbOpen np$, hDB
If hDB = 0 Then
Messagebox "Can't open database", 16
Exit Sub
End If
pt& = Instr(agent, "|")
If pt& = 0 Then ti$ = Trim$(agent) Else ti$ = Trim$(Left$(agent, pt& - 1))
Dim nID As Long
NIFFindDesignNote hDB, ti$, NOTE_CLASS_FILTER, nID
If nID = 0 Then
Messagebox "Can't find agent " & ti$, 16
Exit Sub
End If
If Instr(db.GetDocumentByID(Hex$(nID)).~$Flags(0), "f") = 0 Then
Messagebox ti$ & " is not an agent", 16
Exit Sub
End If
Dim hNT As Long
NSFNoteOpen hDB, nID, 0, hNT
Dim iB As BlockID, vB As BlockID
NSFItemInfo hNT&, "$AssistInfo", 11, iB, dt%, vB, nv&
If Not vB.hPool = 0 Then
p& = OSLockObject(vB.hPool) + vB.Block
Peek info.Version, p& + 2, 2
Peek info.TriggerType, p& + 4, 2
Peek info.SearchType, p& + 6, 2
Peek info.IntervalType, p& + 8, 2
Peek info.Interval, p& + 10, 2
Peek v&, p& + 12, 4
If v& <= 31 Then info.Time1 = v& Else info.Time1 = Cdat(v&/100/60/60/24)
Peek v&, p& + 16, 4
If v& <= 31 Then info.Time2 = v& Else info.Time2 = Cdat(v&/100/60/60/24)
t$ = Space(81)
ConvertTIMEDATEToText 0, 0, p& + 20, t$, 80, nt%
If Not nt% = 0 Then info.StartTime = Cdat(Left$(t$, nt%))
t$ = Space(81)
ConvertTIMEDATEToText 0, 0, p& + 28, t$, 80, nt%
If Not nt% = 0 Then info.EndTime = Cdat(Left$(t$, nt%))
Peek info.Flags, p& + 36, 4
OSUnlockObject vB.hPool
End If
NSFNoteClose hNT
NSFDbClose hDB
End Sub
Sub SetAssistInfo(db As NotesDatabase, agent As String, info As AssistInfo)
np$ = Space(1024)
OSPathNetConstruct 0, db.Server, db.FilePath, np$
Dim hDB As Long
NSFDbOpen np$, hDB
If hDB = 0 Then
Messagebox "Can't open database", 16
Exit Sub
End If
pt& = Instr(agent, "|")
If pt& = 0 Then ti$ = Trim$(agent) Else ti$ = Trim$(Left$(agent, pt& - 1))
Dim nID As Long
NIFFindDesignNote hDB, ti$, NOTE_CLASS_FILTER, nID
If nID = 0 Then
Messagebox "Can't find agent " & ti$, 16
Exit Sub
End If
If Instr(db.GetDocumentByID(Hex$(nID)).~$Flags(0), "f") = 0 Then
Messagebox ti$ & " is not an agent", 16
Exit Sub
End If
Dim hNT As Long
NSFNoteOpen hDB, nID, 0, hNT
Dim iB As BlockID, vB As BlockID
NSFItemInfo hNT&, "$AssistInfo", 11, iB, dt%, vB, nv&
If Not vB.hPool = 0 Then
p& = OSLockObject(vB.hPool) + vB.Block
Poke p& + 2, info.Version, 2
Poke p& + 4, info.TriggerType, 2
Poke p& + 6, info.SearchType, 2
Poke p& + 8, info.IntervalType, 2
Poke p& + 10, info.Interval, 2
If Isdate(info.Time1) Then Poke p& + 12, Clng(Cdbl(info.Time1) * 24 * 60 * 60 * 100), 4 _
Else Poke p& + 12, Clng(info.Time1), 4
If Isdate(info.Time2) Then Poke p& + 16, Clng(Cdbl(info.Time2) * 24 * 60 * 60 * 100), 4 _
Else Poke p& + 16, Clng(info.Time2), 4
Dim hM As Long
OSMemAlloc 0, 81, hM
b& = OSLockObject(hM)
If Isdate(info.StartTime) Then
t$ = Cstr(info.StartTime) & Chr$(0)
PokeString b&, t$, Len(t$)
ConvertTextToTIMEDATE 0, 0, b&, 81, p& + 20
Else
Poke p& + 20, 0&, 4
Poke p& + 24, 0&, 4
End If
If Isdate(info.EndTime) Then
t$ = Cstr(info.EndTime) & Chr$(0)
PokeString b&, t$, Len(t$)
ConvertTextToTIMEDATE 0, 0, b&, 81, p& + 28
Else
Poke p& + 28, 0&, 4
Poke p& + 32, 0&, 4
End If
Poke p& + 36, info.Flags, 4
OSUnlockObject hM
OSMemFree hM
OSUnlockObject vB.hPool
End If
NSFNoteUpdate hNT, 0
NSFNoteClose hNT
NSFDbClose hDB
End Sub
-
Hallo eknori,
Danke für das Beispiel. habe es gleich ausprobiert und es funktioniert auch LOKAL super.
Wenn ich das ganze dann auf dem Server aktualisiere habe ich leider immer das Problem, das ich die DB mit NSFDbOpen nicht öffnen kann. ("Can´t Open Database"). Hast du eine Idee woran das liegen könnte.
Der Server ist ein "Windows 2000 Server".
!!! Wie gesagt, ich habe das Problem generell. Das Script funktioniert lokal tadellos. Nur auf dem Server nicht. !!!
Danke, Micha
-
versuche mal bitte statt
OSPathNetConstruct 0, db.Server, db.FilePath, np$
ein
OSPathNetConstruct 0, db.Server, db.FilePath, trim (np$)
irgendwo da liegt der Hund begraben.
-
kann auch am
np$ = ...
hier mal np$ = String$(1024, " ")
probieren. Mit und ohne trim im OSNetPath...
-
Ja, war genau das Problem, es geht nun einen Schritt weiter.
Bei
NIFFindDesignNote hDB, ti$, NOTE_CLASS_FILTER, nID
gibt es genau das selbe Problem. Jetzt kann er die Agents nicht finden. :-(
-
hmm, ist auch nicht mein Code ( hab das mal auf LDD gefunden )
pt& = Instr(agent, "|")
If pt& = 0 Then ti$ = Trim$(agent) Else ti$ = Trim$(Left$(agent, pt& - 1))
erscheint mir ein wenig komisch; keine Ahnung, warum das gemacht wird, da der Agent doch als string übergeben wird.
also testen wir jetzt einmal ti$ = agent
und lassen den ganzen quatsch von oben einfach weg.
-
Ich habe den Namen des Agent in Script mal "hard" kodiert. Hat auch nichts gebracht.
Ich glaube, die DB wird nicht richtig geöffnet. Gebe ich den Parameter np$ mit Trim an, funktioniert das öffnen der DB auch LOKAL nicht mehr... :-(
Ich habe nun mal versucht die DB mit dem Object-Handle hDB zu schließen.
NSFDBCLOSE nDB
Dabei verabschiedet sich Notes mit dem Hinweis "ungültiges Object-Handle". Also liegt der Fehler warscheinlich doch beim öffnen der DB.
-
kannst du mir mal deine db mit dem Code zukommen lassen? dann brauche ich das nicht meinerseits aufzubauen, um das mal zu debuggen.
-
Guten Morgen eknori,
ich habe die DB mal auf das wesentliche reduziert. Es geht um die Einstellungen in einem Profile-Dokument.
"Aktionen / Admin-Tools / Einstellungen" öffnet eine Maske. Dort sollen 3 Agenten konfiguriert werden. Im "QueryClose" der Maske befindet sich das Script zu setzen der Agenten.
Danke im voraus für deine Hilfe...
-
soo, habs mal getestet ( local, w2k server, linux server )
arbeitet fehlerfrei !
Ich muß aber dazu sagen, daß ich das Ganze unter ND6 getestet habe; hab keine 5er mehr.
Möglicherweise kann das aber noch mal jemand mit nen 5er Server und client testen, bitte
Ulrich
-
... könnte ich testen, allerdings erst heuet Abend zu Hause...
ata
-
Hallo,
Das Problem ist gelöst...
Manchmal liegt die Lösung ganz nahe, man muss nur drauf kommen.
Ich habe auf meinem Entwicklungsserver einen Path zu meinem Verzeichnis: "Entwicklung\müller\..." Das Problem ist schlicht und ergreifend der Umlaut in meinem Namen.
Nach dem umbenennen in "Entwicklung\mueller" funktioniert das ganze tadellos... :o
Vielen Dank für eure Hilfe (vor allem eknori), DANKE...
-
:o :o :o Aua, Aua, aua ;D
dann setze den thread bitte noch auf "erledigt"
eknori