Domino 9 und frühere Versionen > Entwicklung
"Unique" für DocumentCollection
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