Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Thorsten Kalweit am 11.03.09 - 09:42:39

Titel: Script PutInFolder
Beitrag von: Thorsten Kalweit am 11.03.09 - 09:42:39
Guten Morgen zusammen,

mein Script bricht immer mit der Fehlermeldung "Object variable not set ab". Der Debugger stoppt immer in der Zeile "Set currentDocument = Source.Document".

Woran liegt das?

Zum Hintergrund:
In einer Datenbank zur Archivverwaltung wählt der Benutzer ein Dokument aus einer Auswahlliste aus. Von dem ausgewählten Dokument wird u.a. die DocID in dem Feld "docIDAkte" zwischengespeichert. Sobald der Benutzer auf die Aktion "Als Favorit ablegen" drückt, wird der Agent gestartet, der das unten angehängte Script ausführt.
Dieses Script soll das Dokument anhand der DocID finden und in den Ordner "Meine Akten" (am Besten als Kopie) ablegen.

Vielen Dank im Voraus.
Thorsten

Code
Sub Initialize
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim dc As NotesDocumentCollection
	Dim doc As NotesDocument
	Dim Source As NotesUiDocument
	Dim currentDocument As NotesDocument
	
	Set currentDocument = Source.Document
	
	Set db = session.CurrentDatabase
	Set dc = db.FTSearch(currentDocument.GetItemValue("docIDAkte")(0),1)
	Set doc = dc.GetFirstDocument
	While Not(doc Is Nothing)
		Call doc.PutInFolder("Meine Akten",True)
		Set doc = dc.GetNextDocument(doc)
	Wend
End Sub
Titel: Re: Script PutInFolder
Beitrag von: DerAndre am 11.03.09 - 09:56:23
Ist ja auch klar.

Source ist ja auch nothing.

Deklariert Ja, instanziert Nein.

Mach ein

dim workspace as new ui workspace

set currentdocument = workspace.currentdocument.document
Titel: Re: Script PutInFolder
Beitrag von: BigWim am 11.03.09 - 09:58:52
Hallo Thorsten,

das aktuelle Dokument erhälst Du über die notesuiworkspace-Klasse, also

Dim uiws as new notesuiworkspace
dim source = uiws.currentdocument

Aber bei Agenten mit FrontEnd-Klassen ist immer ein wachsames Auge geboten ....

Markus
Titel: Re: Script PutInFolder
Beitrag von: Thorsten Kalweit am 11.03.09 - 10:04:39
Hallo zusammen,

vielen Dank für Eure Hilfe. Der Agent arbeitet nun so, wie es sein sollte.

Hier das funktionierende Script:
Code
Sub Initialize
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim dc As NotesDocumentCollection
	Dim doc As NotesDocument
	Dim workspace As New Notesuiworkspace
	Dim currentDocument As NotesDocument
	
	Set currentDocument = workspace.currentdocument.document
	
	Set db = session.CurrentDatabase
	Set dc = db.FTSearch(currentDocument.GetItemValue("docIDAkte")(0),1)
	Set doc = dc.GetFirstDocument
	While Not(doc Is Nothing)
		Call doc.PutInFolder("Meine Akten",True)
		Set doc = dc.GetNextDocument(doc)
	Wend
End Sub
Titel: Re: Script PutInFolder
Beitrag von: Driri am 11.03.09 - 10:07:49
Mit Option Declare wärst Du direkt auf den Fehler hingewiesen worden. Das sollte man sich im Programmers Pane als Standard setzen.
Titel: Re: Script PutInFolder
Beitrag von: dirk_2909 am 11.03.09 - 10:15:28
Zitat
Mit Option Declare wärst Du direkt auf den Fehler hingewiesen worden. Das sollte man sich im Programmers Pane als Standard setzen.

Warum wäre er dann auf den Fehler gekommen? War doch alles deklariert .. nur nicht inztantiiert.
Titel: Re: Script PutInFolder
Beitrag von: DerAndre am 11.03.09 - 10:23:44
Und ein Fehlerhandling, dann muss man wegen diesen 'Kleinkram' nicht immer debuggen.
Titel: Re: Script PutInFolder
Beitrag von: Thorsten Kalweit am 11.03.09 - 10:35:45
Leider war ich ein wenig zu vorschnell.

Das Script kopiert nicht das gesuchte Dokument (Akten) in den Ordner, sondern das temporäre, aus dem es aufgerufen wird.

Kennt jemand einen anderen Lösungsansatz?
Titel: Re: Script PutInFolder
Beitrag von: koehlerbv am 11.03.09 - 10:48:28
Das ist ja auch logisch - Du verlangst es ja so: Du suchst nach einem String, der im aktuellen Dokument vorkommt - und dann beschränkst Du das Ergebnis noch auf genau ein Dokument.

Bernhard
Titel: Re: Script PutInFolder
Beitrag von: Thorsten Kalweit am 11.03.09 - 10:59:31
Ich dachte, dass ich mit FTSearch in der gesamten Datenbank suche.

Ich möchte anhand der DocumentUniqueID und der Form "frmAkte" suchen. ...  :-:
Titel: Re: Script PutInFolder
Beitrag von: koehlerbv am 11.03.09 - 11:02:19
Natürlich sucht FTSearch in der ganzen DB. Dein offenes Dokument gehört aber auch zur DB, oder?  ;)

Warum fasst Du Dein FTSearch syntaktisch nicht strenger und gibst auch die Itemnamen mit an, in denen Du Deine Werte erwartest?

Bernhard
Titel: Re: Script PutInFolder
Beitrag von: Thorsten Kalweit am 11.03.09 - 11:38:59
öööööhhm ja  ???

Ich mache gerade meine ersten Schritte in Script  ;)
Titel: Re: Script PutInFolder
Beitrag von: Thorsten Kalweit am 11.03.09 - 11:49:13
So!

Habs dann jetzt so gelöst  ;D ... bin sehr stolz auf mich :P Learning by Doing

Code
Sub Initialize
	
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim view As NotesView
	Dim vc As NotesViewEntryCollection
	Dim workspace As New Notesuiworkspace
	Dim currentDocument As NotesDocument
	Set db = session.CurrentDatabase
	Set currentDocument = workspace.currentdocument.document
	
	Set view = db.GetView("(alleAktenNachDocID)")
	Set vc = view.GetAllEntriesByKey(currentDocument.GetItemValue("docIDAkte")(0))
	Call vc.PutAllInFolder("Meine Akten")
End Sub

... und es funktioniert super
Titel: Re: Script PutInFolder
Beitrag von: koehlerbv am 11.03.09 - 11:58:12
Sauber  ;)

Bernhard
Titel: Re: Script PutInFolder
Beitrag von: Driri am 11.03.09 - 13:36:41
@Dirk :

Sorry, hatte ich überlesen.  :-[

Schaden kann Option Declare aber trotzdem nicht  ;)