Domino 9 und frühere Versionen > Entwicklung
Collection 2 mal durchlaufen !?
Don Pasquale:
Hallo Leute,
ich muss eine Collection (einer View) 2 mal durchlaufen,
weiss aber nicht, ob und wie ich den 2 Durchlauf neu initialisiere.
Ich überprüfe ob es ein Dokument derselben Identnummer bereits gibt und welchen Bearbeiter es hat.
Hat das oder die anderen Dokumente mit derselben IDENTnummer noch keinen Bearbeiter, soll Ihnen im 2 Durchlauf der Bearbeiter zugewiesen werden.
Was mache ich beim Zweiten Durchlauf falsch ?
Manchmal wird er nämlich durchlaufen,
manchmal nicht. Dabei hätte in meinen Probedurchläufen die Collection nicht leer sein
dürfen ..
wundert sich
Don Pasquale
--- Code: --- Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = ws.CurrentDocument
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim temp As Integer
Dim dc As NotesDocumentCollection
Set db = session.CurrentDatabase
Set view = db.GetView( "(InternIdent)" )
Dim item As NotesItem
Dim nameList As Variant
Dim frontenddoc As Notesdocument
Dim key As String
Set frontenddoc = uidoc.document
Zielo$ = frontenddoc.e4fldWeiterverarbeitung(0)
Zielp$ = frontenddoc.Zielperson(0)
key$ = frontenddoc.e4fldIdentnummer(0)
Bearbeiter$ = frontenddoc.Bearbeiter(0)
Set dc = view.GetAllDocumentsByKey(key$, True)
Set doc = dc.getfirstdocument
While Not (doc Is Nothing)
Set item = doc.GetFirstItem("Identnummer")
If frontenddoc.e4fldIdentnummer(0) = doc.e4fldIdentnummer(0) Then
If doc.e4fldInitiator(0) <> "" Then
If doc.e4fldInitiator(0) <> frontenddoc.Zielperson(0) Then
' Ein anderer Mitarbeiter bearbeitet bereits diese Identnummer
' Dann kann dieses Dokument auch gleich dorthin
Zielp$ = doc.e4fldInitiator(0)
End If
End If
End If
Set doc = dc.GetNextDocument(doc)
Wend
Set uidoc = ws.EditDocument( True )
Call uidoc.FieldSetText("e4fldInitiator",Cstr(Zielp$))
Call uidoc.FieldSetText("e4fldIndexiert", "True")
Call uidoc.FieldSetText("e4fldNeuZugewiesen", "heute")
Call uidoc.FieldSetText("e4fldLetzterBearbeiter",Cstr(Bearbeiter$))
Call uidoc.FieldSetText("e4fldStatus",Cstr(Zielo$))
Call uidoc.FieldSetText("e4fldOrdner","Register")
temp = ws.folder("Register",True)
Call uidoc.save
Call uidoc.close
' Und nun wird überprüft, ob es noch andere Doks mit dieser IDentnummer gibt,
' die noch keinen Initiator haben
Set dc = view.GetAllDocumentsByKey(key$, True)
Set doc = dc.getfirstdocument
While Not (doc Is Nothing)
Set item = doc.GetFirstItem("Identnummer")
If frontenddoc.e4fldIdentnummer(0) = doc.e4fldIdentnummer(0) Then
If doc.e4fldInitiator(0) = "" Then
Call doc.ReplaceItemValue( "e4fldInitiator", Cstr(Zielp$) )
Call doc.Save( True, False )
End If
End If
Set doc = dc.GetNextDocument(doc)
Wend
End
--- Ende Code ---
Rob Green:
hm...
wie wäre es zunächst, wenn Du eine Schleife in die Schleife setzt...und zwar an folgender Stelle:
While Not (doc Is Nothing)
Set item = doc.GetFirstItem("Identnummer")
If frontenddoc.e4fldIdentnummer(0) = doc.e4fldIdentnummer(0) Then
If doc.e4fldInitiator(0) <> "" Then
If doc.e4fldInitiator(0) <> frontenddoc.Zielperson(0) Then
' Ein anderer Mitarbeiter bearbeitet bereits diese Identnummer
' Dann kann dieses Dokument auch gleich dorthin
Zielp$ = doc.e4fldInitiator(0)
End If
Else...
Call doc.ReplaceItemValue( "e4fldInitiator", Cstr(Zielp$) )
Call doc.Save( True, False )
End If
End If
Set doc = dc.GetNextDocument(doc)
Wend
Denn Du hast ja die Abfrage in der ersten Schleife:
If doc.e4fldInitiator(0) <> "" Then
...
und mit Else
kannst Du automatisch auf
doc.e4fldInitiator(0) = "" abchecken und Maßnahmen treffen.
Ob das allerdings dann Dein Prob löst, weiß ich nicht, zumindest ist es sehr ineffizient zwei Schleifen mit gleichen Bedingungen separat laufen zu lassen. Denn einmal läufst Du alle Docs durch, dann nochmal.
Don Pasquale:
--- Zitat ---
Ob das allerdings dann Dein Prob löst, weiß ich nicht, zumindest ist es sehr ineffizient zwei Schleifen mit gleichen Bedingungen separat laufen zu lassen. Denn einmal läufst Du alle Docs durch, dann nochmal.
--- Ende Zitat ---
Hi Rob,
Erst wenn ich alle Docs abgearbeitet habe, kann ich sicher sein, dass nicht ein Dokument bereits einen Bearbeiter hat.
> Denn einmal läufst Du alle Docs durch, dann nochmal.
Wenn es denn 2 mal die Docs durchlaufen würd
e, aber das tut es eben nicht immer und ich habe keinen Schimmer wieso ?
Ratlos
Don Pasquale
Glombi:
Hast Du mal den Debugger laufen lassen, um zu sehen, an welcher Stelle abgebrochen wird?
Ausserdem ist es nicht notwendig, die dc nochmal zu setzen. Du kannst beim 2. Lauf wieder dc nehmen ohne es vorher zu setzen - ausser: Die Zugriffsformel bewirkt, dass das Frontend-Dokument (uidoc) nicht mehr angezeigt wird. Dann solltest Du vor dem Setzen der view ein view.Refresh aufrufen.
Gruß
Andreas
Don Pasquale:
Mellon Glombi,
abgebrochen hat er nirgends, das Count der 2 ten
Collection war manchmal 0 bzw. es hat sich im Gegensatz zur ersten Collection nicht verändert, dabei hätte es Einen mehr sein müssen.
Danke Rob, Danke Glombi,
ich muss es nochmals ausgiebig testen,
aber das scheint es mir zu sein.
Danke
Don Pasquale
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln