Autor Thema: Agent soll nur mit makierten Dokumenten arbeiten  (Gelesen 9059 mal)

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Agent soll nur mit makierten Dokumenten arbeiten
« am: 11.11.08 - 10:42:38 »
Guten Tag, ich hab hier ne Frage bei der ihr mir evtl weiterhelfen könnt.

Es geht darum das ein Nutzer in einer Ansicht eine beliebige Menge an Dokumenten makieren kann und der Nutzer kann dann einen Agent ausführen der dann nur auf die makierten Dokumente sich bezieht. Also der Agent ist soweit fertig bis auf einen entscheidene Kleinigkeit :)

wie sag ich dem Agent das er nur makierte Dokumente  benutzen kann ? :)

hoffe ihr könnt mir da helfen

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #1 am: 11.11.08 - 10:52:20 »
Target: all selected documents?
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Glombi

  • Gast
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #2 am: 11.11.08 - 10:52:49 »
Formelsprache oder Script ?
Falls letzteres:

set dc = db.UnprocessedDocuments

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #3 am: 11.11.08 - 11:24:09 »
aso sry, in Lotus Script soll das ganze geschehen

und mit set dc = db.UnprocessedDocuments funktioniert das jetzt auch wunderbar, danke euch

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #4 am: 11.11.08 - 13:41:04 »
mir ist gerade noch nenn Fehler aufgefalle, wenn ich diesen Agent auf einzelne Dokumente ausführe geht das problemlos, wenn ich jetzt ihn jetzt auf mehre ausführe auch. Allerdings wenn ich jetzt nochmal den die Aktion ausführen will bekomm ich nenn Error: "Falscher Datentyp in Methode NormCompArg: SHORT wurde gefunden, String wurde erwartet".

Ich hohl mal ein bisschen weiter aus...

die Dokumente die ausgewählt wurden werden jetzt durch eine Prozedur gejagd und zum schluss gelöscht, darauf hin soll sich das nächste Dokument gehohlt werden

Code
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
.
.
.
Set rdoc = doc
Set doc = collection.GetNextDocument(doc)
Call rdoc.Remove(True)
Wend

Das Problem ist jetzt wohl das wenn ich mehre Dokumente auswähle, er beim letzten Dokument keins mehr finden kann und somit hohlt er sich ein leeres laut Debugger, in meiner Prozedur gibt es eine Abfrage nach einer Zahl, da er aber ein leeres Dokument sich hohlt hat dieses Feld dann quasi den Wert "" und ich bekomm bei der Abfrage nenn Fehler. Irgendwie cachet er das wohl somit bekomm ich dann immer wieder den gleichen Fehler wenn ich die Aktion wieder ausführe. Wenn ich die Anwendung jetzt neustart gehts wieder problemlos , bis ich dann wieder mehrere Dokumente gelöscht habe.

Ich hoffe ich hab das jetzt halbwegs verständlich beschrieben :) kann mir da wer helfen?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #5 am: 11.11.08 - 14:26:35 »
Dem Codeteil, den Du gepostet hast, fehlt nichts - das passt. Und die Meldung kommt ja an einer anderen Stelle.

Wenn Du eh alle selektierten Dokumente löschen willst, warum machst Du dann kein NotesDocumentCollection.RemoveAll?

Bernhard

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #6 am: 11.11.08 - 14:33:57 »
Bei den Dokumenten die ich löschen will handelt es sich um Mail Dokumente, aus dessen Body ich 5 Zeilen brauch, mit diesen Zeilen muss ich dann ein anderes Dokument erstellen. Und das mit jedem Dokument welches ich löschen will.

Daher ist es schlecht alle Dokumente aufeinmal zulöschen.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #7 am: 11.11.08 - 14:36:47 »
Das Löschen kannst Du dann ja zum Schluss machen.

Bernhard

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #8 am: 11.11.08 - 14:57:24 »
ok, jetzt weiss ich wie das meintest, also die Idee ist gut, aber daran lag es aufjedenfall nicht.

Er versucht irgendwie dann immer ein leeres Dokument zuladen, NUR nachdem ich mehrere gelöscht habe

hier mal das was der Debugger mir dazu sagt


Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #9 am: 11.11.08 - 15:05:22 »
Na, das wird ein Deletion Stub sein. Aus der Designer-Hilfe zur NotesDocumentCollection:

Zitat
A deletion stub is returned for a document deleted after creation of the collection or for a document to which you do not have read access. Use IsValid in NotesDocument to check whether a document is real (True) or a deletion stub (False).
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #10 am: 11.11.08 - 15:13:14 »
Wobei nach meiner Erfahrung auch IsValid nicht immer hundertprozentig greift. Der sicherste Weg ist nach meiner Erfahrung, zu prüfen, ob NotesDocument.Items ein Array zurückgibt.

Bernhard

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #11 am: 11.11.08 - 15:27:18 »
also erzeigt mir solange "This document is valid." an bis ich nachdem ich mehrere gelöscht habe, noch eins löschen möchte, dann bekomme ich "This document is not valid."

außerdem hab ich jetzt einfach mal versucht mit strg + c das dokument zukopieren, dabei bekomm ich nenn Fehler zurück der mir sagt "Dokument wurde gelösct"

was mich aber sehr wundert ist das es , nachdem ich den Anwendung neugestartet hab, wieder funktioniert

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #12 am: 11.11.08 - 15:42:05 »
was mich aber sehr wundert ist das es , nachdem ich den Anwendung neugestartet hab, wieder funktioniert

weil nach dem Neustart die Collection neu erstellt wurde?
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #13 am: 12.11.08 - 13:36:07 »
also ne Lösung hab ich noch nicht dazu gefunden, ich post hier mal den gesamten QT, evtl liegt der Fehler irgendwo anders.

Code
Sub Click(Source As Button)
	Dim session As NotesSession
	Dim item As NotesItem
	Set session = New NotesSession()
	Dim database As NotesDatabase
	Set database = session.CurrentDatabase
	Dim agent As NotesAgent
	Set agent = database.GetAgent("PushAgent")
	Dim collection As NotesDocumentCollection
	Set collection = database.UnprocessedDocuments
	Dim doc,rdoc As NotesDocument

	
	Set doc = collection.GetFirstDocument()
	While Not(doc Is Nothing)
		NextLine$ = Chr(13) & Chr(10)
			
	
		If doc.Fehler(0) = 0 Then
			
			Set item = doc.GetFirstItem( "Body" )
			BodyText = item.Text
			
			Fieldlist = Split(BodyText, NextLine$)
		'***************** 
			Status=""
			DokID=""
			Datum=""
			Zeit=""
			PIN=""
		'***************** 
			
			Status = Fieldlist(0)
			DokID = Fieldlist(1)
			Datum = Fieldlist(2)
			Zeit = Fieldlist(3)
			PIN = Fieldlist(4)
			
			Datum = Cdat(Datum)		
			Zeit = Cdat(Zeit)			
			
			Set docAddress = New NotesDocument(database)
			Call docAddress.ReplaceItemValue("Form","Task")		
			Call docAddress.ReplaceItemValue("Pin",PIN)		
			Call docAddress.ReplaceItemValue("Datum",Datum)				
			Call docAddress.ReplaceItemValue("Zeit",Zeit)			
			Call docAddress.ReplaceItemValue("DokID", DokID)			
                Call docAddress.ReplaceItemValue("Status", Status)	

			
			Call docAddress.Save( True, True )
			
			status = agent.run
			Call docAddress.Remove(True)
			
		End If
		
		Set doc = collection.GetNextDocument(doc)
		
	Wend
	
	Call collection.RemoveAll(True)
	Dim workspace As New NotesUIWorkspace
	Call workspace.ViewRefresh

End Sub
« Letzte Änderung: 12.11.08 - 13:38:45 von Akunin »

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #14 am: 12.11.08 - 13:43:23 »
Dim doc,rdoc As NotesDocument

zieh das mal auseinander:

Dim doc As NotesDocument
Dim rdoc As NotesDocument



und was ist Sinn und Zweck von dem hier?
Set docAddress = New NotesDocument(database)
         Call docAddress.ReplaceItemValue("Form","Task")      
         Call docAddress.ReplaceItemValue("Pin",PIN)      
         Call docAddress.ReplaceItemValue("Datum",Datum)            
         Call docAddress.ReplaceItemValue("Zeit",Zeit)         
         Call docAddress.ReplaceItemValue("DokID", DokID)         
                Call docAddress.ReplaceItemValue("Status", Status)   

         
         Call docAddress.Save( True, True )
         
         status = agent.run
         Call docAddress.Remove(True)


du erstellst ein dokument, befüllst es und löscht es wieder?

grüsse

Dau-in





mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #15 am: 12.11.08 - 13:47:32 »
ähh, wenn das der ganze Code ist, dann schalte bite 'Option declare' ein und behebe einmal alles, was rot wird.

Grüsse

Dau-in
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline Akunin

  • Junior Mitglied
  • **
  • Beiträge: 82
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #16 am: 12.11.08 - 14:20:55 »
"du erstellst ein dokument, befüllst es und löscht es wieder?"

stimmt fast, ich das gefüllte Dokument wird dann über einen Agent, deswegen ja das agent.run an der stelle an einen BlackBerry geschickt, die ganze Prozedur ist dafür da , das die Auftrag auf dem BlackBerry gelöscht werden, dazu muss ich diese Dokument losschicken, quasi ist es ein löschdokument.

Nach dem ichs abgeschickt hab wird das löschdokument wieder entfernt.

so, ich habe jetzt die Option declare aktiviert, aber farblich verändert hat sich daraufhin nix

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Agent soll nur mit makierten Dokumenten arbeiten
« Antwort #17 am: 12.11.08 - 14:28:33 »
bei mir wird der halbe Code rot.

aber warum setzt du auf die löschdokumente nicht ein flag 'später löschen', machst anschliessend eine Löschcollection mit flag ='später löschen' und haust die Dinger auf einen Schlag weg?

vielleicht hab ich Tomaten auf den Augen, aber wo machst du die Prüfung  'isValid'?

Und warum löscht du die anderen Dokumente auch alle?

Und wofür ist rdoc?

Ich verstehe den Sinn ehrlich gesagt noch nicht wirklich.
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz