Autor Thema: Agenten per Script steuern  (Gelesen 10677 mal)

Offline MiMueller

  • Frischling
  • *
  • Beiträge: 37
  • Geschlecht: Männlich
  • das is´ halt Notes...
Agenten per Script steuern
« 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


 

Offline Meff

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.095
  • Geschlecht: Männlich
  • Das Denken der Zukunft muß Kriege unmöglich machen
    • apparet id etiam caeco
Re:Agenten per Script steuern
« Antwort #1 am: 08.07.03 - 11:05:02 »
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
"Zwei Dinge sind zu unserer Arbeit nötig: Unermüdliche Ausdauer und die Bereitschaft, etwas, in das man viel Zeit und Arbeit gesteckt hat, wieder wegzuwerfen."
Albert Einstein

Offline MiMueller

  • Frischling
  • *
  • Beiträge: 37
  • Geschlecht: Männlich
  • das is´ halt Notes...
Re:Agenten per Script steuern
« Antwort #2 am: 08.07.03 - 11:09:20 »
Kein Problem, wenn es mittels Notes-API geht!

Hast du da eine Lösung ?

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Agenten per Script steuern
« Antwort #3 am: 08.07.03 - 11:28:29 »
Hi,

ich hab mal in der API-Doku geschaut. Ich hab keine Möglichkeit gefunden.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline MiMueller

  • Frischling
  • *
  • Beiträge: 37
  • Geschlecht: Männlich
  • das is´ halt Notes...
Re:Agenten per Script steuern
« Antwort #4 am: 08.07.03 - 11:41:30 »

Wo kann man die API-Doku downloaden ?

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Meff

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.095
  • Geschlecht: Männlich
  • Das Denken der Zukunft muß Kriege unmöglich machen
    • apparet id etiam caeco
Re:Agenten per Script steuern
« Antwort #6 am: 08.07.03 - 11:55:31 »
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

Meff
"Zwei Dinge sind zu unserer Arbeit nötig: Unermüdliche Ausdauer und die Bereitschaft, etwas, in das man viel Zeit und Arbeit gesteckt hat, wieder wegzuwerfen."
Albert Einstein

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Agenten per Script steuern
« Antwort #7 am: 08.07.03 - 12:03:36 »
Hi,

äähmm, ist in meiner Doku nicht vorhanden.  ???

Welche Version hast du denn? Ist C-API oder C++ - API?


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Agenten per Script steuern
« Antwort #8 am: 08.07.03 - 12:28:43 »
Hi,

ich hab's gefunden. Ich hatte eine ältere C-API - Doku. Ist aber in der C++ - API enthalten.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.710
  • Geschlecht: Männlich
Re:Agenten per Script steuern
« Antwort #9 am: 08.07.03 - 12:34:07 »
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

Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline MiMueller

  • Frischling
  • *
  • Beiträge: 37
  • Geschlecht: Männlich
  • das is´ halt Notes...
Re:Agenten per Script steuern
« Antwort #10 am: 08.07.03 - 14:54:55 »
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

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.710
  • Geschlecht: Männlich
Re:Agenten per Script steuern
« Antwort #11 am: 08.07.03 - 15:07:11 »
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.

Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.710
  • Geschlecht: Männlich
Re:Agenten per Script steuern
« Antwort #12 am: 08.07.03 - 15:12:54 »
kann auch am

np$ = ...

hier mal np$ = String$(1024, " ")

probieren. Mit und ohne trim im OSNetPath...
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline MiMueller

  • Frischling
  • *
  • Beiträge: 37
  • Geschlecht: Männlich
  • das is´ halt Notes...
Re:Agenten per Script steuern
« Antwort #13 am: 08.07.03 - 15:33:44 »
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. :-(

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.710
  • Geschlecht: Männlich
Re:Agenten per Script steuern
« Antwort #14 am: 08.07.03 - 15:43:05 »
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.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline MiMueller

  • Frischling
  • *
  • Beiträge: 37
  • Geschlecht: Männlich
  • das is´ halt Notes...
Re:Agenten per Script steuern
« Antwort #15 am: 08.07.03 - 16:00:33 »
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.

« Letzte Änderung: 08.07.03 - 18:41:26 von MiMueller »

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.710
  • Geschlecht: Männlich
Re:Agenten per Script steuern
« Antwort #16 am: 09.07.03 - 07:06:14 »
kannst du mir mal deine db mit dem Code zukommen lassen? dann brauche ich das nicht meinerseits aufzubauen, um das mal zu debuggen.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline MiMueller

  • Frischling
  • *
  • Beiträge: 37
  • Geschlecht: Männlich
  • das is´ halt Notes...
Re:Agenten per Script steuern
« Antwort #17 am: 09.07.03 - 08:53:39 »
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...


Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.710
  • Geschlecht: Männlich
Re:Agenten per Script steuern
« Antwort #18 am: 09.07.03 - 09:08:36 »
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
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Agenten per Script steuern
« Antwort #19 am: 09.07.03 - 09:11:23 »
... könnte ich testen, allerdings erst heuet Abend zu Hause...

ata
Grüßle Toni :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz