Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: enny am 09.11.05 - 13:46:13
-
Hallo zusammen,
habe da ein kleines Problem:
Ich versuche in Dokumenten gespeicherte Objekte als Datei zu speichern um die Objekte
gegen Anhänge auszutauschen.
Eigentlich stellt das für mich kein Problem dar, doch leider stehen über den Objekten
Beschriftungen. -> Anhang steht nicht mehr unter Beschriftung -> keiner hat eine Ahnung was
welcher Anhang ist!!!
Meine Idee war mit Hilfe eines NotesRichTextNavigators an die Position des Objekts zu
springen das Objekt zu löschen und den Anhang einzuhängen. Dann weiter zum nächsten
Objekt usw.
Leider scheitere ich beim Einsatz des Navigators, da dieser anscheinend nicht richtig
erstellt wurde (bekomme kein Objekt beim Aufruf von GetFirstElement bzw. SetPosition(Objekt)
bringt eine Fehlermeldung das entweder das Objekt oder der Navigator nicht richtig
initialisiert wurde).
Folgenden Code habe ich bisher:
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim handle As Variant
Dim rtitem As NotesRichTextItem
Dim rtnav As NotesRichTextNavigator
Dim obj As NotesEmbeddedObject
Dim i, j As Integer
Set db = s.CurrentDatabase
Set dc = db.UnprocessedDocuments
For i = 1 To dc.Count
Set doc = dc.GetNthDocument(i)
If doc.HasEmbedded Then
Set rtitem = doc.GetFirstItem("Body")
Set rtnav = rtitem.CreateNavigator
Set obj = rtnav.GetFirstElement(9)
While( Not (obj Is Nothing))
rtnav.SetPosition(obj)
If obj.Type = 1453 Then
Set handle = obj.Activate(True)
If Instr(1, obj.Class, "Word.Document") Then
handle.SaveAs("C:\temp\doc" + Format(j+1,"00") + ".doc")
obj.Remove
Call rtitem.EmbedObject(1454, "", "C:\temp\doc" + Format(j+1,"00") + ".doc")
Elseif Instr(1, obj.Class, "Excel.Sheet") Then
handle.SaveAs("C:\temp\doc" + Format(j+1,"00") + ".xls")
obj.Remove
Call rtitem.EmbedObject(1454, "", "C:\temp\doc" + Format(j+1,"00") + ".xls")
Elseif Instr(1, obj.Class, "AmiProDocument") Then
handle.SaveAs("C:\temp\doc" + Format(j+1,"00") + ".sam")
obj.Remove
Call rtitem.EmbedObject(1454, "", "C:\temp\doc" + Format(j+1,"00") + ".sam")
End If
End If
Set obj = rtnav.GetNextElement
Wend
Call doc.Save(True,False)
End If
Next
End Sub
-
So als zusätzlicher Hinweis:
Set obj = rtitem.EmbeddedObjects(0)
Call rtnav.SetPosition(obj)
gibt den Fehler "Element or Navigator is invalid"
-
Also habe noch ein bißchen getestet.
Agent auf Java umsetzen -> selber Fehler
Habe auch Notes R7 ausprobiert -> selber Fehler
Funktioniert allerdings mit Einschränkungen unter Verwendung von FindNthElement.
Problem beim Einsatz von FindNthElement ist das ich folgenden Fehler bekomme:
Warnung: Ein Teil des Dokuments, das eine Funktion aus einer anderen Notes-Version verwendet, wird ignoriert
Dieser Fehler tritt leider nur bei manchen Dokumenten auf und zwar bei denen die auf
unserem alten R5 bzw. R4.6 Server bereits angelegt wurden.
Werde wegen der Fehlermeldung einen weiteren Thread öffnen.
Zum anderen Thread: http://atnotes.de/index.php?topic=27031.0