Domino 9 und frühere Versionen > ND6: Entwicklung

Typisch Notes

<< < (8/8)

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