Domino 9 und frühere Versionen > ND9: Entwicklung
Extrahieren per Lotusscript bringt Fehler Type Mismatch
koehlerbv:
Da hast Du aber ein ganz anderes Problem. Schau Dir das Beispiel zu NotesRichTextItem.EmbeddedObjects an. Für nähere Analysen würden wir hier Code benötigen, aber ich denke, mit dem genannten Beispiel der DesigneDokumente.rHelp solltest Du zurecht kommen. Oder Du hast ein anderes Problem innerhalb Deiner Dokumente.
Bernhard
PS: Wenn Du Deinen richtigen Namen unter Deine Posts schreibst, steigt hier auch das Engagement der Helfer. Wir mögen eher den direkteren Kontakt.
Peter Klett:
Auf Dokumentation zu stützen, ist irgendwie nicht mein Ding, deshalb habe ich mal folgendes ausprobiert, wobei das verwendete doc ein TextItem namens Form, ein RichtextItem namens Body und kein Item Body2 enthält.
--- Code: ---Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim view As NotesView
Set view = db.GetView ("test")
Dim doc As NotesDocument
Set doc = view.Getfirstdocument
Dim rtitem As NotesRichtextItem
Set rtitem = doc.GetFirstItem ("Body")
MsgBox rtitem.Name
End Sub
--- Ende Code ---
-> gibt "Body" als Msgbox aus
--- Code: ---Sub Initialize
...
Dim rtitem As NotesRichtextItem
Set rtitem = doc.GetFirstItem ("Body2")
MsgBox rtitem.Name
End Sub
--- Ende Code ---
-> gibt ein Object variable not set in der MsgBox-Zeile
--- Code: ---Sub Initialize
...
Dim rtitem As NotesRichtextItem
Set rtitem = doc.GetFirstItem ("Form")
MsgBox rtitem.Name
End Sub
--- Ende Code ---
-> gibt ein type mismatch in der Set rtitem ... - Zeile
Also kann ein NotesRichtextItem definitiv ein doc.GetFirstItem, Voraussetzung ist, dass das Item existiert und ein RichtextItem ist, oder eben nicht existiert. Existiert es und ist kein RichtextItem, kommt das type mismatch.
Nun zu Lordi's Code:
1. Mit If doc.HasEmbedded prüfst Du nur, ob in dem DOKUMENT Anhänge vorhanden sind, diese können aber an jedem beliebigen anderen Richtextfeld sein
2. Es ist völlig irrelevant, ob in der MASKE das Feld "Userpicture" ein RichtextItem ist, entscheidend für Deine Routine sind die DOKUMENTE. Schau also in den Dokumenteigenschaften nach, welcher Typ Item gespeichert ist. Da Du über mehrere Dokumente läufst, genügt ein Dokument, bei dem Userpicture ein Textitem ist, und schon bekommst Du den Fehler
-> Exkurs zum Verständnis: Du erstellst in der Maske ein neues Feld Userpicture als Textfeld. Danach erstellst Du mit der Maske ein paar Dokumente, die dadurch ein Textitem Userpicture enthalten. Anschließend änderst Du in der Maske das Feld in ein Richtextfeld. Diese Änderung hat keinen Einfluss auf danach nicht neu im Frontend gespeicherte Dokumente! Notes ist keine relationale Datenbank, bei der Feldänderungen in einer Tabelle erfolgen, die dann gnadenlos drübergebügelt werden, Notes ist dokumentenbasiert und tickt da ganz anders. Auch andere Routinen können in Dokumente Items schreiben, die in der Maske entweder nicht oder ganz anders definiert sind. Das ist die totale Freiheit, verlangt aber eine andere Denkweise des Entwicklers
Du musst also prüfen, ob es sich tatsächlich um ein Richtextitem handelt. Dazu ist eine Möglichkeit, rtitem als Variant zu deklarieren und dann abzuprüfen, ob es sich wirklich um ein RichtextItem handelt (-> siehe Hilfe zu notesItem.Type)
3. Wenn Du wirklich prüfen willst, ob ein RichtextItem Dateianhänge hat, musst Du prüfen, ob EmbeddedObjects ein Array ist. Deshalb knallt Deine Forall-Zeile, weil Du durch ein Nichtarray loopen willst
--- Code: ---If IsArray (rtitem.EmbeddedObjects) Then
Forall obj ...
End Forall
End If
--- Ende Code ---
Jens Winkelmann:
Die Klasse NotesRichTestItem erbt alle Eigenschaften und Methoden der Klasse NotesItem.
Also auch GetFirstItem.
In der Doku http://www-12.lotus.com/ldd/doc/domino_notes/rnext/help6_designer.nsf/b3266a3c17f9bb7085256b870069c0a9/baebe8a2bdfffc8485256c54004d29ec?OpenDocument
heißt es auch Inherits from: NotesItem
Ist glaube ich die einzige Notes Klasse, die von einer anderen abgeleitet ist!?!
Peter Klett:
Unabhängig davon ist NotesDocument.GetFirstItem keine Methode von NotesItem oder NotesRichtextItem, sondern von NotesDocument und liefert laut Hilfe ein NotesItem oder NotesRichtextItem zurück.
Hier der Auszug aus der Hilfe:
GetFirstItem method
Given a name, returns the first item of the specified name belonging to the document.
Defined in
NotesDocument
Syntax
Set notesItem = notesDocument.GetFirstItem( name$ )
Parameters
name$
String. The name of the item you want to find.
Return value
notesItem
NotesItem or NotesRichTextItem. The first item with the specified name. Returns Nothing if the document does not contain an item with this name.
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln