Domino 9 und frühere Versionen > Entwicklung

"Unique" für DocumentCollection

<< < (2/2)

Meff:
Nur zum Verständnis:

Willst Du nicht, dass mehrere Anwender ein und denselben Vorgang bearbeiten? Oder dass der Anwender nicht das Anlegen zu einem Vorgang mehrmals machen kann?

Meff

Glombi:
Hi,
wie wär's mit der "Holzhammermethode".
Erstelle ein Array, dass die bereits bearbeiteten DocIDs speichert. Wenn Du dann über die Collection iterierst, prüfe zunächst, ob die DocID bereits bearbeitet wurde.

Also etwa so:
dim checkdoicids() as String
dim i as integer
dim lastdocid as string
dim ret as variant
... Collcection etc....

if dc.Count = 0 then exit sub

i = 0
set doc = dc.GetFirstDocument


do while not doc is nothing

lastdocid = doc.DocID(0)
if i > 0 then
'Prüfe ob DocID im Array ist. falls nicht: erstelle Dokument
ret = ArrayGetIndex(checkdoicids,doc.DocID(0))
if IsNull(ret) then
'erstelle neues Doc
end if
end if

checkdoicids(i) = lastdocid


i = i + 1
set doc = dc.GetNextDocument(doc)

if not doc is nothing then
redim preserve checkdoicids(i - 1) as string
checkdoicids(i-1) = lastdocid
end if

loop


Andreas

Doc Torte:
... warum immer so kompliziert ?

eine Collection zu durchlaufen dauert doch...

ich arbeite für solche Vorgänge mit Listen. Du erstellst einfach eine Liste, in der Du die DocID als Listeneintrag nimmst, mit IsElement fragst Du ab, ob die angegebene ID schon existiert - das geht schneller und ist auch nicht so kompliziert, da ich mit den ID's arbeite und nicht jedesmal ein Doc zuweisen muß - nebenbei kannst Du die Werte, welche Du zur weiteren Verarbeitung brauchst auch in die Liste legen - und mit ner "List as String", kann das ruhig auch eine große Liste werden  !

Axel:
Hi,

sodala, es ist vollbracht. Ich hab die Lösung. Hier ist ein Auszug aus dem Agenten:


--- Zitat ---idx = 0
Redim arrID(collection.Count)
Set doc = collection.GetFirstDocument
While Not (doc Is Nothing)
   Set tmpdoc = collection.GetNextDocument(doc)
   If idx = 0 Then
      arrID(idx) = doc.xAdressID(0)
   Else
      strTemp = doc.xAdressID(0)
      If Isnull(Arraygetindex(arrID, strTemp)) Then
         arrID(idx) = doc.xAdressID(0)
      Else
         Call collection.DeleteDocument(doc)
      End If  'If Arraygetindex(arrID, doc.xAdressID, 0) <> Null Then         
   End If  'If idx = 0 Then
   idx = idx + 1
   Set doc = tmpdoc
Wend  'While Not (doc Is Nothing)

'Ab hier wird die Collection durchlaufen um die entsprechenden
Infos auszulesen und die Dokumente anzulegen

--- Ende Zitat ---

Das kommt der Lösung von Glombi sehr nahe.

@DocTorte
Hast recht, das durchlaufen der Collection dauert. Aber ich braucht die bereinigte Collection um weitere Infos auszulesen, die ich für die weiteren Aktionen benötige.

@Meff
Es soll ein Vorgang nicht mehrfach angelegt werden.

Vielen Dank an alle die sich Gedanken gemacht haben.

Axel

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln