Domino 9 und frühere Versionen > ND8: Entwicklung

FTSearch und Dokumente mit Leserfeldern

(1/2) > >>

Jürgen Schomann:
Beim Aufruf von NotesDatabase.FTSearch wird eine NotesDocumentCollection zurückgegeben. Diese enthält ggf. auch Dokumente, auf die der Nutzer keinen Zugriff hat, weil sie Leserfelder enthalten, in die der Nutzer nicht eingetragen ist.
Lt. Notes Designer-Hilfe soll über die Eigenschaft NotesDocument.IsValid eine Prüfung auf solche Dokumente genauso wie für eventuell gelöschte Dokumente möglich sein. Hier die Textpassage:

'A deletion stub is returned for a document deleted after creation of the collection or for a document to which you do not have read access. Use IsValid in NotesDocument to check whether a document is real (True) or a deletion stub (False).'

NotesDocument.IsValid liefert aber für solche Dokumente trotzdem True. Nur über IsEmpty(NotesDocument.Items) lässt sich so ein Dokument erkennen oder habe ich da etwas falsch verstanden?

Peter Klett:
Wir haben an anderer Stelle

IsArray (NotesDocument.Items)

für gültige (lesbare) Dokumente verwendet, was das gleiche aussagt.

Sicherlich ist mit IsValid der Unterschied gemeint, ob es sich um ein tatsächliches Dokument handelt, auf das der Lesezugriff fehlt (-> True), oder um einen Deletion Stub (-> False). Das ist aber nur meine spontane Interpretation ohne Erfahrungshintergrund. Ich würde mich auf IsArray oder IsEmpty verlassen, und nur dann IsValid prüfen, falls Du noch wissen musst, ob das Dokument real existiert.

In Deinem Script macht es aber vermutlich keinen Unterschied, ob es gelöscht oder nicht lesbar ist. Du wirst es so oder so nicht weiterverarbeiten können / wollen.

Jürgen Schomann:
Vielen Dank für Deine Hinweise.
Ich werde IsArray(NotesDocument.Items) verwenden. Ich will ja nur echte Dokumente (nicht gelöscht bzw. Zugriff besteht) verarbeiten und in dem anderen Fall nur das nächste Dokument holen.

koehlerbv:
Du schützt Dich damit auch vor "Geisterdokumenten" (die i.d.R. nur noch in Ansichtsindizes verzeichnet sind, aber nicht mehr real der DB angehören). Isarray ist eine gute Lösung.
Um ganz auf Nummer sicher zu gehen (okay, ich nenne hier meine Paranoia "gesund"!), verwende ich sicherheitshalber die Kombination von
Isempty und anschliessend
IsDeleted,
um erstmal "Nicht-Dokumente" und dann sicher auch gelöschte Dokumente (die ja noch ggf. als Items interpretierbare Properties haben!) aussen vor zu halten. Und das ist ein aus Erfahrung entstandenes Procedere ...

Bernhard

Edit: "vereichnet" ist irgendwie falsch, ich habe da mal noch ein "z" spendiert.

pram:
Wir prüfen es wie im Codeschnipsel unten, da sich NotesDocument.Items...
1) ...als zu inperformant herausgestellt hat. (Hier muss wohl intern das Array aufwändig aufgebaut werden)
2) ein Zugriff auf doc.items alle MIME-Felder auf Richtext konvertiert, falls man zuvor nicht sichergestellt hat, dass die MIME Konvertierung aus ist


--- Code: ---Public Function docIsValid(doc As NotesDocument) As Integer
    If doc Is Nothing Then Exit Function
    'If doc.Isdeleted Then Exit Function ' inperformant, kommuniziert immer mit dem Server und fragt den aktuellen Zustand ab!
    If doc.Universalid = "" Then Exit Function
    docIsValid = doc.isValid ' docIsValid liefert den Zustand beim Laden des Dokuments (und nicht den aktuellen wie doc.isDeleted)
End Function

--- Ende Code ---
Gruß
Roland

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln