Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: AC am 08.01.04 - 14:42:48

Titel: ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: AC am 08.01.04 - 14:42:48
Hi Leute.
Frage hierzu (fand bei der Suche hier im Forum keine Antwort):

Set parent = db.GetDocumentByUNID( doc.ParentDocumentUNID )
(zuvor dim parent as notesdocument)

Was ich nicht verstehe, daß ich auch ein Parentdocument bekomme (zu sehen im Debugger)
obwohl keins existiert bzw. nie existiert hat , weil es z.B. nicht gespeichert wurde (via backend in dem speziellen Fall)

Im Debugger sehe ich, daß das "pseudo"parent keinerlei items besitzt.

Auch   
If parent Is Nothing Then
msgbox "nicht da"
else
msgbox "vorhanden"  ...

liefert mir als Ausgabe ein vorhanden.

In der ganzen Testdatenbank ist aber nur ein einziges Dokument, nämlich das elternlose Kinderdokument natürlich.

Was seh ich hier falsch oder was passiert hier ?
Ich hätte erwartet, daß kein Elterndokument gefunden wird.
Habe ich hier Dokumentengeister ?   (Die TestDB hier war jungfräulich, keinerlei Löschmarken etc)

holcomb
PS Bin ich bei ner Produktivanwendung hier drübergestolpert wie ich auf Fehlersuche ging.
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: Semeaphoros am 08.01.04 - 15:11:44
Da würd ich mal vermuten, dass tatsächlich irgend ein Ghost-Dokument existiert. Musst Du mal mit NotesPeek in die DB reinschauen
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: AC am 08.01.04 - 15:42:57
Da würd ich mal vermuten, dass tatsächlich irgend ein Ghost-Dokument existiert. Musst Du mal mit NotesPeek in die DB reinschauen

Danke für den Tip-
NotesPeek kannte ich bisher nicht, ich werde mal danach suchen.


Ich kann den "Fehler" immer wieder reproduzieren. Hmm.
Auch, wenn ich mal die Dokumente von Hand anlege und dann das Elterndokument von Hand lösche, findet ich via  
Set parent = db.GetDocumentByUNID( doc.ParentDocumentUNID )
das nicht mehr vorhandene Dokument.

Strange, dürfe IMO eigentlich nicht sein.

In der produktiven Anwendnung werden die Eltern und die Antwortdokumente im Backend via Script erzeugt.

Zuerst das Elterndokument (ohne  save erstmal), dann in einer While scheilfe die Antwortdokumente) und danach wird das Elterndokument erst geseichert.


Während des Durchlaufs der Scheilfe passierte ein Fehhler und ich war daher der Meinung es könnte kein Elterndokument existieren.

Aber ich finde eben was für parent, aber ohne jegliche items (im debugger).



Mir scheint, daß ich obige script Zeile hier gar nicht mehr anwenden kann in diesem Zusammenhang, weil wenn er nicht vorhandene Elterndokumente findet, dann isses für die Katz.  :-/

Holcomb

Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: Glombi am 08.01.04 - 15:47:21
Vielleicht wird ja auch das Deletion Stub für das Elterndokument gefunden.

Wie kann man abfragen, ob ein Dokument ein Deletion Stub ist? Evtl. so

if doc.Size < 101 then
'Deletion Stub
end if

Vermutung, da

How large is a deletion stub in Notes?

In Notes 5.x,  a deletion stub occupies 100 bytes.
In Notes 4.x, a deletion stub occupies 88 bytes.
In Notes 3.x, a deletion stub occupies 64 bytes.

oder so
To get: flag = notesDocument.IsDeleted
Legal values
True indicates that the document is a deletion stub.
False indicates that the document exists.

Andreas
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: Semeaphoros am 08.01.04 - 15:54:05
Na, wenn Du nach dem Löschen des Parent noch ein Parent findest, bekommst Du wahrscheinlich den Deletion Stub zurück. Da gibts einen Parameter, "IsValid" oder so ähnlich, mit dem man das feststellen kann.

Für NotesPeek gibt es in 2 bis 3 Minuten im Fachwörterbuch einen Link ....   :D
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: AC am 08.01.04 - 15:56:52
Vielleicht wird ja auch das Deletion Stub für das Elterndokument gefunden.

Andreas


Neee, kanns nicht sein.
Ich hab mir extra zum testen und nachforschen eine neue TestDB gebaut.
Dort erzeuge ich die Dokumente im Backend via script (Siehe Antwort an Semea)

Das Elterrndokument wird erzeugt (noch nicht gespeichert), anschliessend ein oder auch mehrere Antwortdokument (werden gespeichert).

Wenn das Elterndokument nicht gespeichert wird tritt das Phänomen auf. (Auch schön im Debugger nachzuverfolgen)

In der DB habe ich nur alleinig die Antwortdokumente.
Aber via
Set parent = db.GetDocumentByUNID( doc.ParentDocumentUNID )

bekomme ich eben das "geisterdokument"

Habe mir jetzt grade aus der Sandbox das NotesPeek gezogen.

Holcomb


 Grüße, Holcomb

 





Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: AC am 08.01.04 - 16:07:26
@glombi

Zur Info
Ich hab Deinen Tip in meinen code eingebaut
ich bekomme für das gefundene parent bei isdeleted ein false zurück.

Kann keine Löschmarkierung sein, weil ich auch außerdem nichts gelöscht habe.

(Ich habe nur vorhin _zusätzlich_ aus Neugierde mal getestet, was passiert, wenn man die Dokumente vpon Hand erzeugt und das elternteil  von Hand wieder löscht .)
 

Holcomb
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: Glombi am 08.01.04 - 16:15:40
Ich habe das reproduziert. Offenbar legt Notes intern irgendein obskures Dokument an, indem es aber keine Items gibt. Das ganze geht nur, wenn man es über das Backend macht, so wie Du es beschrieben hast.

Man kann das dann wie folgt abfangen:

Dim session As New NotesSession
   Dim db As NotesDatabase
   Set db = session.CurrentDatabase
   Dim dc As NotesDocumentCollection
   Set dc = db.UnprocessedDocuments
   Dim doc As NotesDocument
   Set doc = dc.GetFirstDocument
   Dim pdoc As NotesDocument
   Set pdoc = db.GetDocumentByUNID( doc.ParentDocumentUNID )
   
   Dim x As Variant
   x = pdoc.Items
   
   If Isempty(x) Then
      Print "Elterndokument nicht gefunden"
   Else
      Print "Alles ok"
   End If
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: Semeaphoros am 08.01.04 - 16:17:37
Kann man nur sagen: "Huch ...."
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: AC am 08.01.04 - 16:18:47
NotesPeek findet keine deletionstubs (habe neue DB zum test herangezogen) und nur die richtige Anzahl von Antwortdokumenten.


Mein
Set parent = db.GetDocumentByUNID( doc.ParentDocumentUNID )

findet aber ein Dokument  :-/ für parent.

<grübel>
Bug ? Ich zu dämlich ;-)   ?
Hab Dt Version 5.0.10

Holcomb
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: Glombi am 08.01.04 - 16:24:04
Mit NotesPeek finde ich das Geisterdokument nicht.
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: Semeaphoros am 08.01.04 - 16:24:05
Siehe die Message von Andreas, ich würde das für einen Bug halten
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: AC am 08.01.04 - 16:26:27
Ich habe das reproduziert. Offenbar legt Notes intern irgendein obskures Dokument an, indem es aber keine Items gibt. Das ganze geht nur, wenn man es über das Backend macht, so wie Du es beschrieben hast.


Merci, gibt die Gerwissheit, daß man nocht ganz doof ist.  <g>

Backend ist jetzt klar.
ABer bei mir hat er auch was beim manuellen Löschen gefunden.
War das dann die Löschmarkierung ? (das habe ich nicht mit deinem code getestet)

Workaround , merci.
Ist logo, weil ja der Debugger anzeigt, daß das gefundene "Etwas" keine Items besitzt .

Danke Euch beiden fürs rasche EInspringen.
Ich setz den Thread jetzt mal auf erledigt.

Gruß Holcomb


Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: Glombi am 08.01.04 - 16:35:20
Es bleibt mysteriös: Ich habe per Backend Haupt- und Antwortdokument erstellt und beide gespeichert.
Danach habe ich das Hauptdokument mit ENTF + F9 gelöscht.

Der Debugger zeigt das gleiche Verhalten wie Dokument per Backend erstellen ohne zu speichern:
- Es sind keine Items da.
- IsDelete = false !!!!

D.h. IsDelete liefert wohl nur dann True zurück, wenn es eine Soft Deletion ist. Keine Ahnung, ich habe es noch nie benutzt.

Andreas
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: AC am 08.01.04 - 16:41:42
@glombi

Ich habs jetzt auch nochmal getestet mit dem Erstellen von Hand (Eltern und Antwortdok) und dann dem Löschen des Elterndokuments.

Auch hier zeigt .isdelelted an, daß es sich um keine Löschmarkierung handelt.  

Gruß, Holcomb
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: Glombi am 08.01.04 - 17:10:58
In der LDD wurde das auch schon diskutiert, bspw.
http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/07c7b1cb350e42af85256bb200386d3a?OpenDocument&Highlight=0,isdeleted (http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/07c7b1cb350e42af85256bb200386d3a?OpenDocument&Highlight=0,isdeleted)

Es ist und bleibt ein Bug - unter 6.5 hat sich nix geändert.

Meine Theorie: IsDeleted wurde für Soft Deletions implementiert und für Deletion Stub dokumentiert, welches durch folgendes Satz aus der KBASE untermauert wird:

In both cases, checking for DOC.NoteID = "" ferrest out these troublesome documents.  In the latter case, IsDeleted=True shows that it's been soft deleted, not just hidden via ReaderAccess lists.


Andreas
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: AC am 08.01.04 - 17:21:28
@glombi

jou, aber wir haben hier 2 Phänomene.

wobei immer noch ungeklärt ist, warum im obigen fall beim Backendfall für parent diese Geisterding rumspukt.

Die Abfrage nach dem Parentdokument lässt sich daher nur mit der weiteren Prüfung auf Items einsetzen wenn man sicher gehen will.  
<seufz>

Gruß Holcomb
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: Glombi am 08.01.04 - 17:25:52
Für mich stellt sich der Sachverhalt so da:
Per Script Backend-Dokument ohne save erstellen <=> Gespeichertes Dokument mit ENTF + F9 löschen

Laut Debugger ist es dasselbe - nämlich Deletion Stubs. Aber nur letztere werden auch in NotesPeek angezeigt.

Das IsDeleted liefert für beide Fälle False zurück (siehe dazu meine Theorie).

Andreas
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: koehlerbv am 08.01.04 - 17:55:17
In Fällen, in denen ich mit deletion stubs rechnen muss, verwende ich folgenden Algorithmus, um "ungültige" Dokumente von weiterer Behandlung auszuschliessen:

Code
If Not (NotesDocument.IsValid And Isarray (NotesDocument.Items)) Then
   'Mach was anderes - wir haben gerade Schrott gefunden ...
End If

Derartiger Trödel kann auch in anderem Kontext passieren - sogar beim Scannen einer stino View.. Auch wenn UPDALL und Konsorten das Problem dann vielleicht beheben - der Agent darf auf sowas nicht hereinfallen.

HTH,
Bernhard

PS @Semeaphoros: Haben wir "stino" schon im Wörterbuch ? Und koMo, koWo, koJa usw. ?
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: Semeaphoros am 08.01.04 - 18:01:04
Nö, nichts davon drin. Was ist denn "stino"? Ach so ..... schon entziffert, ganz normal ....  ;D
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: AC am 08.01.04 - 18:11:43
Für mich stellt sich der Sachverhalt so da:
Per Script Backend-Dokument ohne save erstellen <=> Gespeichertes Dokument mit ENTF + F9 löschen

Laut Debugger ist es dasselbe - nämlich Deletion Stubs. Aber nur letztere werden auch in NotesPeek angezeigt.

Das IsDeleted liefert für beide Fälle False zurück (siehe dazu meine Theorie).

Andreas

Yepp.
Hab wieder was dazugelernt heute, wenn auch wengier produktiv geleistet.
bye, Holcomb
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: koehlerbv am 08.01.04 - 18:37:12
Ja, ja, der Philologe ;-) Und der hat "ganz" jetzt bestimmt auch längst durch das richtige Wort ersetzt ;-)

Einen ganz herzlichen Gruss an den Editor dieses immer prächtigeren Wörterbuchs (welches Forum hat das denn überhaupt ?)

Bernhard
Titel: Re:ParentDocumentUNID findet parent obwohl nicht vorhanden
Beitrag von: Semeaphoros am 08.01.04 - 18:41:17
Natürlich, @Replace war im Einsatz ;-)

Wüsste kein Forum, das so etwas zu bieten  hätte, ausser @Semaion ......  ;D