Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: tks am 10.11.09 - 15:47:15

Titel: Meldung: "Anhänge des Quelldokuments fehlen" bei save
Beitrag von: tks am 10.11.09 - 15:47:15
Hallo liebe Notesgemeine.

Ich habe ein, zumindest für mich, nicht nachvollziehbares Problem. Ich versuche das ganze mal verständlich zu beschreiben.

Ich habe eine Datenbank, die auf der modifizierten Schablone "Dokumentbibliothek" Version 6 basiert. Weil in der DB die Dokumente untereinander zum Teil verlinkt sind, habe ich im Freigabeworkflow einen Passus eingebaut, der das Ursprungsdokument immer beibehält (wg. der NoteID) und nur den Inhalt des Dokumentes austauscht. Bei der Kopiererei treten jetzt bei Dokumenten mit Anhang Probleme auf, in Gestalt der Fehlermeldung:

"Ein oder mehrere Anhänge des Quelldokuments fehlen. Starten Sie Fixup, um das Dokument in der Quelldatenbank zu löschen."

Der folgende Quellcode steckt in einer Scriptlib (Function SendToNext) und wird im QuerySave aufgerufen:

Code
...
Set arcdoc = db.GetDocumentByID(note.ReleasedDocID(0))
Set tmpdoc = db.CreateDocument
Call arcdoc.CopyAllItems(tmpdoc,True)
Call tmpdoc.Save(False,False)
Call note.Save(False,False)
Forall e In arcdoc.Items
Call arcdoc.RemoveItem(e.name)
End Forall
Call arcdoc.Save(True,False)
Call note.CopyAllItems(arcdoc,True)
Call arcdoc.Save(True,False)
Set agent = db.GetAgent("agDeactivateDoc")
If agent.RunOnServer(arcdoc.NoteID) <> 0 Then
Messagebox "Fehler beim Deaktivieren des freigegebenen Dokumentes" + Chr13)  "Bitte benachrichtigen Sie Ihren Administrator",16,"Archivierung"
End If
Forall e In note.Items
Call note.RemoveItem(e.name)
End Forall
Call tmpdoc.CopyAllItems(note,True)
Call note.Save(True, False)
...

Der Fehler passiert beim Speichern des aktuell geöffneten Dokumentes (note.save).

Wenn ich mir das Dokument im Debugger anschaue, dann ist dort aber der Anhang korrekt vorhanden. Das tmpdoc wird übrigens problemlos gespeichert. Auch mit Anhang.

Ich hoffe ich konnte mich verständlich machen und jemand hat eine zündende Idee.

Bei notes.net habe ich zwar einige Threads in dieser Richtung gefunden ($File soll nicht "so einfach" zu kopieren sein), aber weitergeholfen hat's mir nicht.
Titel: Re: Meldung: "Anhänge des Quelldokuments fehlen" bei save
Beitrag von: koehlerbv am 10.11.09 - 16:25:14
Im QuerySave und mit Deinem Code kämpfen hier Front- und Backend um die Vorherrschaft - und beide verlieren (was zu erwarten war).

Bau das im QueryClose ein - da sind die Messen schon gelesen und nur das Backend darf noch (richtig) mitspielen.

Bernhard
Titel: Re: Meldung: "Anhänge des Quelldokuments fehlen" bei save
Beitrag von: tks am 10.11.09 - 16:28:56
Dann sag' ich einstweilen mal "Danke Bernhard" und versuche deinen Hinweis umzusetzen. Werde über Erfolg oder Misserfolg berichten.
Titel: Re: Meldung: "Anhänge des Quelldokuments fehlen" bei save
Beitrag von: tks am 11.11.09 - 10:57:52
So, im QueryClose kommt der gleiche Fehler. Was ich nicht verstehe:

Im Debugger ist das Dokument korrekt. $File ist da.

Werd' mal weiter suchen. Mist!
Titel: Re: Meldung: "Anhänge des Quelldokuments fehlen" bei save
Beitrag von: pram am 12.11.09 - 10:03:52
ich denke dass deine Routine
Code
Forall e In arcdoc.Items
  Call arcdoc.RemoveItem(e.name)
End Forall
das Dokument nicht vollständig leert. (da bei RT-Items z.B. nur das erste gelöscht wird)
check das mal mit dem Debugger und probier dann evtl:
Code
do while isArray(arcdoc.Items)
  Forall item In arcdoc.Items
    item.remove
  End Forall
loop

das tmpDoc muss meiner Meinung auch nicht gespeichert werden
Gruß
Roland
Titel: Re: Meldung: "Anhänge des Quelldokuments fehlen" bei save
Beitrag von: tks am 12.11.09 - 14:33:35
Sodele. Nachdem das mit dem CopyAllItems in keinster Weise funktioniert hat, habe ich mich des Problems dadurch entledigt, dass ich nun mit den UNID's jongliere.

Ich weise die UNID des erstmalig freigegebenen Doks (also der Version 1) immer wieder der neuesten Version zu (das alte Dok wird natürlich zuerst gelöscht). Damit funktioniert es jetzt.

Danke an alle Mithelfenden.