Autor Thema: Frage zu IsActivatable und GetAgent  (Gelesen 1283 mal)

Offline Sabine

  • Aktives Mitglied
  • ***
  • Beiträge: 112
  • Geschlecht: Weiblich
Frage zu IsActivatable und GetAgent
« am: 15.01.07 - 13:34:31 »
Hallo,

ich habe einen Agenten geschrieben (Aufruf über die Menüleiste), der alle Maildatenbanken, auf einem bestimmten Server in einem bestimmten Verzeichnis liegen, durchforstet. Die Informationen, die er sich dort holt schreibe ich in meine DB wo der Agent läuft. Ich hole mir beispielsweise den Namen (xyz.nsf) und die Größe, dass klappt auch wunderbar, aber wenn ich aus den Mail-DB'en auslesen möchte, ob der OutOfOffice Agent aktiviert ist oder nicht, dann funktioniert das nicht.

Denn ich habe den Agenten nicht im Zugriff! Woran könnte das liegen?

Die Pfade vom Server, den Namen des Agenten und andere Angaben habe ich in meinem Profildokument gemacht. Zugriff habe ich auch auf alle Datenbanken, daran kann es nicht liegen.

Hier mein Agent:

Code
Sub Initialize
	'Dieser Agent liest alle Namen der (Mail-) Datenbanken aus dem 
	'im Profildokument angegebenen Server und Verzeichnis heraus
	
	'On Error Resume Next
	
	Dim session As New NotesSession	
	Dim server As Variant
	Dim verzeichnis As Variant
	Dim agent As NotesAgent
	Dim agentname As Variant
	Dim stragentname As String
	
	'Derzeitige Datenbank
	Dim dbCurrent As NotesDatabase 	
	Set dbCurrent = session.CurrentDatabase
	
	'Profildokument
	Dim pdoc As NotesDocument
	Set pdoc = dbCurrent.GetProfileDocument("profil")	
	server = pdoc.GetItemValue( "Setup_Server_OoO" )
	verzeichnis = pdoc.GetItemValue( "Setup_Verzeichnis_OoO" )
	agentname = pdoc.GetItemValue( "Setup_AgentName" )
	
	'Zuvor die alten Maildokumente löschen
	Call Loeschen()
	
	'Maildatenbanken
	Dim db As NotesDatabase 	
	Dim doc As NotesDocument
	Dim size As Double
	Dim dbdir As New NotesDbDirectory(server(0))
	Set db = dbdir.GetFirstDatabase(DATABASE)
	
	While Not (db Is Nothing)
		If Instr(db.FilePath, verzeichnis(0))  Then	
			
			If Not ( db.IsOpen ) Then
				Call db.Open( "", "" )
			End If
			
			Set doc = dbCurrent.CreateDocument
			stragentname = agentname(0)
			Set agent = db.GetAgent(stragentname) '!!!!!! hier hat er den Agenten nicht!!! Da liegt sicherlich das Problem :-(
			
			If agent.IsActivatable Then
				doc.Merkmal = "OoO aktiv"
			Else
				doc.Merkmal = "OoO inaktiv"
			End If
			
			doc.Form = "Import"
			doc.Maildatenbank = db.FileName
			doc.Groesse = db.Size
			Call doc.Save( True, True )			
		End If
		Set db = dbdir.GetNextDatabase			
	Wend		
End Sub

Dankeschön  :)

Gruß Sabine
« Letzte Änderung: 15.01.07 - 14:05:06 von Sabine »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Frage zu IsActivatable und GetAgent
« Antwort #1 am: 15.01.07 - 13:37:52 »
Hast Du mindestens Designer- Rechte auf alle Mail- Datenbanken aller Benutzer ? wenn nicht, dann geht das so nicht, dann musst DU mit einem Server- basierten Agenten und "Run on behalf of" oder signatur mit dem Server arbeiten...

Tode
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Sabine

  • Aktives Mitglied
  • ***
  • Beiträge: 112
  • Geschlecht: Weiblich
Re: Frage zu IsActivatable und GetAgent
« Antwort #2 am: 15.01.07 - 13:43:15 »
Hallo Tode,

die Datenbank läuft zunächst auf einem Testserver, wo nur 5 Testmaildatenbanken drauf stehen. Auf diese habe ich Zugriff als Manager. Daran kann es nicht liegen, da ich zuvor auch ein db.open ausgeführt habe und das Ergebnis auch auf True sich gesetzt hat. Habe die DB im vollen Zugriff :-(...

Gruß Sabine

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Frage zu IsActivatable und GetAgent
« Antwort #3 am: 15.01.07 - 13:47:49 »
Dann kann ich mir nur noch vorstellen, dass Du in Deinem Profil- Dokument den Namen des Agenten falsch geschrieben hast...

Was anderes kann es fast nicht sein, das Script ist ja ziemlich einfach (unter anderem fehlt ein ErrorHandling...

Tode
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Glombi

  • Gast
Re: Frage zu IsActivatable und GetAgent
« Antwort #4 am: 15.01.07 - 13:51:57 »
Was sagt denn der Debugger zu stragentname?
Steht dort wirklich "OutOfOffice" drin?

Statt
If agent.IsActivatable Then
möchtest Du doch eher
If agent.IsEnabled Then
aufrufem, oder? Du willst doch wissen, ob der Agent aktiv ist,

Andreas

Offline Sabine

  • Aktives Mitglied
  • ***
  • Beiträge: 112
  • Geschlecht: Weiblich
Re: Frage zu IsActivatable und GetAgent
« Antwort #5 am: 15.01.07 - 14:04:35 »
@Tode,
ich hatte zunächst im Profildokument OutOfOffice|OutOf Office drinnen stehen gehabt, das war falsch! Habe nun nur noch OutOf Office drin stehen... super dankeschön. Ein Error-Handling komt noch rein  ;)


@Andreas,
genau, herzlichen Dank, da habe ich wohl was falsch in der Designer-Help verstanden...


Hier aber noch der fehlerfreie Code:

Code
Sub Initialize
	'Dieser Agent liest alle Namen der (Mail-) Datenbanken aus dem 
	'im Profildokument angegebenen Server und Verzeichnis heraus
	
	On Error Resume Next
	
	Dim session As New NotesSession	
	Dim server As Variant
	Dim verzeichnis As Variant
	Dim agent As NotesAgent
	Dim agentname As Variant
	Dim stragentname As String
	
	'Derzeitige Datenbank
	Dim dbCurrent As NotesDatabase 	
	Set dbCurrent = session.CurrentDatabase
	
	'Profildokument
	Dim pdoc As NotesDocument
	Set pdoc = dbCurrent.GetProfileDocument("profil")	
	server = pdoc.GetItemValue( "Setup_Server_OoO" )
	verzeichnis = pdoc.GetItemValue( "Setup_Verzeichnis_OoO" )
	agentname = pdoc.GetItemValue( "Setup_AgentName" )
	
	'Zuvor die alten Maildokumente löschen
	Call Loeschen()
	
	'Maildatenbanken
	Dim db As NotesDatabase 	
	Dim doc As NotesDocument
	Dim size As Double
	Dim dbdir As New NotesDbDirectory(server(0))
	Set db = dbdir.GetFirstDatabase(DATABASE)
	
	While Not (db Is Nothing)
		If Instr(db.FilePath, verzeichnis(0))  Then	
			
			If Not ( db.IsOpen ) Then
				Call db.Open( "", "" )
			End If
			
			Set doc = dbCurrent.CreateDocument
			stragentname$ = agentname(0)
			Set agent = db.GetAgent(stragentname$)
			
			If agent.IsEnabled  = True Then
				doc.Merkmal = "OoO aktiv"
			Else
				doc.Merkmal = "OoO inaktiv"
			End If
			
			doc.Form = "Import"
			doc.Maildatenbank = db.FileName
			doc.Groesse = db.Size
			Call doc.Save( True, True )			
		End If
		Set db = dbdir.GetNextDatabase			
	Wend		
End Sub

Gruß Sabine  :) :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz