Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Schorschi353 am 10.06.08 - 10:22:12
-
Hey alle zusammen,
ich hab n kleines Problem..
Wir haben bei uns ne DB, in der sich Dokumente mit Antwortdokumenten befinden.
Aus irgendwelchen Gründen habe ich ein Antwortdokument, dem das falsche Hauptdokument zugeordnet ist.
Jetzt wollte ich dem Antwortdokument mit einem Agent das Hauptdokument neu zuweisen, und zwar mit dieser Formel:
Dim session As New notessession
Dim db As notesdatabase
Dim dc As notesdocumentcollection
Dim doc As notesdocument
Dim item As notesitem
Set db=session.currentdatabase
Set dc=db.unprocesseddocuments
Set doc = dc.GetFirstDocument
Set item = doc.ReplaceItemValue( "$ref", "FBAB1AC92:CB1A36EC-NC12573FD:002A0463" )
Call doc.save(False,False,True)
Set doc = dc.getnextdocument(doc)
Loop Until doc Is Nothing
Der Typ des Feldes ist jetzt aber nicht mehr "Response", sondern "Textliste".
Im Antwortdokument habe ich einen Button "Gehe zum Hauptdokument". Wenn ich den nun betätige, bekomme ich die Fehlermeldung "Invalid universal id".
Wie kann ich den Fehler beheben? *verzweifeltschau* ???
Danke schonmal für eure Antworten!
Gruß, Marius
-
gibts da nicht die Funktion makeResponse der Notesdocument klasse?
-
Richtig. Die Funktion gibt es
-
Cool, dass ihr so schnell geantwortet habt!!
So sieht das Konstrukt jetzt aus:
Dim session As New notessession
Dim db As notesdatabase
Dim dc As notesdocumentcollection
Dim doc As notesdocument
Dim docH As NotesDocument
Set db=session.currentdatabase
Set docH = db.GetDocumentByID("FBAB1AC92:CB1A36ECNC12573FD:002A0463")
Set dc=db.unprocesseddocuments
Set doc = dc.GetFirstDocument
Call doc.MakeResponse(docH) <------- hier bleibt der Debugger stehen
Call doc.save(False,False,True)
Jedoch scheint er ein Problem mit der ID zu haben.
Beim Ausführen des Agents bekomme ich die Fehlermeldung
"Parent document is required to make a response Document".
Wenn ich mir die ID im Eigenschaften-Fenster des Hauptdokuments ansehe, steht die in zwei Zeilen so da:
OFBAB1AC92:CB1A36EC
ONC12573FD:002A0463
schau ich mir aber das $ref Feld eine anderen Antwortdokumentes dieses Hauptdokumentes an, sieht die ID so aus "FBAB1AC92:CB1A36EC-NC12573FD:002A0463"..
Woran liegt das und welches ist das richtige Format?
-
nimm doch mal die Doppelpunkte raus.
Edith: deine ID hat vorne 9 ziffern, oder sehe ich das falsch/kann ich nicht mehr rechnen??
setz dir doch hilfweise ein berechnete Feld, das dir die ID anzeigt, dann kannst du das überprüfen
-
Jippie.. es hat geklappt..
Hab die ID nochmal genau unter die Lupe genommen.
Die UNID ist ja genau 32 Zeichen lang, hab dann rausgefunden, dass bei der ID, die ich benutzt habe
Set docH = db.GetDocumentByID("FBAB1AC92:CB1A36ECNC12573FD:002A0463")
die beiden roten Zeichen überflüssig waren.
der Befehl lautet jetzt:
Set docH = db.GetDocumentByID("BAB1AC92CB1A36ECC12573FD002A0463")
Die Doppelpunkte müssen auch raus.
Danke für eure wie immer schnelle Hilfe!!!
Marius
-
Bist Du Dir sicher, Marius, dass das mit der hardkodierten UNID eine wirklich gute Idee ist?
Bernhard
-
Hey Bernhard,
nunja, es ist zumindest eine "schnelle" Möglichkeit, ein Dokument einem bestimmten Hauptdokument zuzuweisen.
Aber natürlich ist es umständlich, die UNID immer per Hand im Agent zu ändern, wenn man mehrere verschiedene Hauptdokumente hat.
Was wäre denn der einfachste Weg, den Code zu verallgemeinern??
Marius
-
Marius, mal doch mal bitte genau auf, was Du denn überhaupt vorhast.
Bernhard
-
Bernhard das hat er doch eigentlich schon.
Gegeben ist in Antwortdokument das an der Falschen Ecke hängt und das ich schon ausgewählt habe.
Gesucht ist eine Methode es einem anderen Parent zuzuweisen.
eigentlich ganz einfach generisch zu lösen.
Unprocessed für das Dokument das ich in der Ansicht markiert habe
Picklist auf eine definierte Ansicht zum suchen des neuen Parents.
Makeresponse des unprocessed Dokuments auf das mit der Picklist ausgewählte Dokument
-
Danke Thomas, für deine Erläuterung.
Aber hier nochmal zum angucken ;)
-
Aber die von Thomas beschriebene Lösung wäre genauso schnell umzusetzen
gewesen, wie Deine Grafik.
Mach es so wie Thomas beschrieben hat oder rufe in Deinem Agenten eine Inputbox
auf, in der Du/der Benutzer die UNID eingeben kann....
-
Hab jetzt noch PickListString eingebaut, jetzt kann man das Dokument auswählen, welches man als neues Hauptdokument deklarieren will, der Code sieht jetzt so aus:
Dim session As New notessession
Dim uiws As New NotesUIWorkspace
Dim db As notesdatabase
Dim dc As notesdocumentcollection
Dim doc As notesdocument
Dim docH As NotesDocument
Dim vPicklist As Variant
Set db=session.currentdatabase
vPicklist = uiws.PickListStrings( PICKLIST_CUSTOM, , db.Server , db.FilePath , "Lookup\ProjektNachUNID", "Projekt wählen", "Bitte deklarieren Sie ein Projekt als Hauptdokument!", 1 )
If ( Isempty( vPicklist ) ) Then
Messagebox "Vorgang abgebrochen!" , , "Projekt auswählen"
Exit Sub
Else
Messagebox Cstr(vPicklist(0)) , , "Ausgewählte Projekt-UNID:"
End If
Set docH = db.GetDocumentByUNID(Cstr(vPicklist(0)))
Set dc=db.unprocesseddocuments
Set doc = dc.GetFirstDocument
Call doc.MakeResponse(docH)
Call doc.save(False,False,True)
Danke euch nochmal! :)
Marius