Domino 9 und frühere Versionen > ND6: Entwicklung
Typisch Notes
flaite:
Ich glaub das sich das mit den RichTextItems anders verhält als mit dem von Andreas geschilderten appendItem Feature.
Reine Hypothese: Ein RT-Item wird zwar zerstückelt in 64k Einheiten, aber für die Script-API ist das logisch immer nur ein RichTextItem, obwohl es physisch anders ist. (und die Eigenschaftsbox ist die physische Sicht). Kann aber sein, dass das überhaupt nicht so ist.
MadMetzger:
Wahrscheinlich ist das so bei RT-Items, wie du es beschreibst, Axel... Mit TextItems habe ich noch nicht experimentiert. Werde ich noch tun, aber nicht mehr heute...
MadMetzger:
Also ich habe jetzt mal mit TextItems herumexperimentiert. Ich habe über Doc.appendItemValue(x) einem Item Werte hinzugefügt und danach war in den Dokumenteigenschaften auch das Item mehrfach vorhanden. Nur verhielt es sich in dem Script wieder so wie mit den RT-Items, das heißt jedes Item mit mehrfach vorhandenem Namen wurde nur einmal gefunden trotz Würgaround mit temporärem Dokument, in das per copyAllItems die Items kopiert wurden. Möglich ist natürlich, dass copyAllItems auch nur die "GetFirstItem"s erreicht.
Vielleicht hat ja jemand anderes die Muße sich diese Sache mal anzuschauen. Ich würde dann meinen bisher vorhandenen Quellcocde zum Ausprobieren zur Verfügung stellen.
koehlerbv:
Notes teilt Items immer in Portionen kleiner als 64 KB auf - hier liegt innerhalb der ODS die "magische Grenze".
NotesDocument.GetFirstItem greift sich jedoch immer nur das erste Item mit gleichem Namen. Es gibt jedoch Workarounds dafür, siehe
--- Zitat von: Glombi am 19.05.04 - 15:35:26 ---Soweit mir bekannt geht das nur mit einem Trick: Erstelle ein neues temporäres Dokument und kopiere alle Items. Wenn das Item "Received" heisst, nenne es um in Received_<i>. Und das solange es ein Item namens "Received" gibt.
Hier der Code:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim tempdoc As NotesDocument
Dim item As NotesItem
Dim i As Integer
Set db = session.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
Set tempdoc = db.CreateDocument
Call doc.CopyAllItems(tempdoc,False)
i = 1
Forall feld In doc.Items
If feld.Name = "Received" Then
Call tempdoc.ReplaceItemValue("Received_" & Cstr(i), tempdoc.Received(0))
Set item = tempdoc.GetFirstItem("Received")
Call item.Remove
i = i + 1
End If
End Forall
For i = 1 To i - 1
Print tempdoc.GetItemValue("Received_" & Cstr(i))(0)
Next
Andreas
--- Ende Zitat ---
NotesItem.CopyToDocument nimmt jedoch immer alle Items gleichen Namens mit. Gleiches gilt auch für NotesDocument.CopyAllItems.
NotesDocument.AppendItemValue ist daher durchaus gefährlich, wenn man das "einfach so" einsetzt. .ReplaceItemValue tut in der Regel das, was man eigentlich will.
Bernhard
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln