Domino 9 und frühere Versionen > Entwicklung

Collection 2 mal durchlaufen !?

(1/5) > >>

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