Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Schorschi353 am 10.06.08 - 10:22:12

Titel: Parentdocument neu zuweisen, aber wie?!
Beitrag 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
   
Titel: Re: Parentdocument neu zuweisen, aber wie?!
Beitrag von: umi am 10.06.08 - 10:31:42
gibts da nicht die Funktion makeResponse der Notesdocument klasse?
Titel: Re: Parentdocument neu zuweisen, aber wie?!
Beitrag von: Thomas Schulte am 10.06.08 - 10:56:15
Richtig. Die Funktion gibt es
Titel: Re: Parentdocument neu zuweisen, aber wie?!
Beitrag von: Schorschi353 am 10.06.08 - 11:29:42
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?
Titel: Re: Parentdocument neu zuweisen, aber wie?!
Beitrag von: DAU-in am 10.06.08 - 11:35:00
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
Titel: Re: Parentdocument neu zuweisen, aber wie?!
Beitrag von: Schorschi353 am 10.06.08 - 13:32:47
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
Titel: Re: Parentdocument neu zuweisen, aber wie?!
Beitrag von: koehlerbv am 10.06.08 - 13:43:54
Bist Du Dir sicher, Marius, dass das mit der hardkodierten UNID eine wirklich gute Idee ist?

Bernhard
Titel: Re: Parentdocument neu zuweisen, aber wie?!
Beitrag von: Schorschi353 am 10.06.08 - 15:13:35
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
Titel: Re: Parentdocument neu zuweisen, aber wie?!
Beitrag von: koehlerbv am 10.06.08 - 15:18:39
Marius, mal doch mal bitte genau auf, was Du denn überhaupt vorhast.

Bernhard
Titel: Re: Parentdocument neu zuweisen, aber wie?!
Beitrag von: Thomas Schulte am 10.06.08 - 15:24:18
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
Titel: Re: Parentdocument neu zuweisen, aber wie?!
Beitrag von: Schorschi353 am 10.06.08 - 16:27:25
Danke Thomas, für deine Erläuterung.

Aber hier nochmal zum angucken  ;)

Titel: Re: Parentdocument neu zuweisen, aber wie?!
Beitrag von: dirk_2909 am 10.06.08 - 20:30:50
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....
Titel: Re: Parentdocument neu zuweisen, aber wie?!
Beitrag von: Schorschi353 am 11.06.08 - 15:48:03
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