Lotus Notes / Domino Sonstiges > Projekt Bereich
Welche Schleife wann in Script
Semeaphoros:
Die Verwandlungskünste eines Loop
Da habe ich früher mal versprochen, das noch genauer auszuführen. Hier also mal ein Beispiel, wie man dieselbe Logik in den verschiedenen Typen realisieren kann:
Typisches, praxisnahes Beispiel, klar geeignet für FORALL, soll herhalten: man nimmt die Werte eines Multivalue-Feldes aus einem Dokument und bearbeitet die einzelnen Einträge:
Dim Entries As Variant
Entries = Doc.GetItemValue("MyMultiValueField")
' in Entries stehen jetzt die einzelnen Werte und wir wissen nicht wirklich, wieviele
Forall E in Entries
print E
' verarbeite jeden einzelnen Wert irgendwie im Schleifenkörper
End Forall
******* Dasselbe realisiert mit einem For ... next loop ******
.....
Dim Entries As Variant
Entries = Doc.GetItemValue("MyMultiValueField")
For i=Lbound(Entries) to UBound(Entries)
print Entries(i)
.......
Next i
******* Dasselbe realisiert mit einer While ... Wend Schleife ******
.....
Dim Entries As Variant
Dim i as Integer
Entries = Doc.GetItemValue("MyMultiValueField")
i=Lbound(Entries)
While (i <= Ubound(Entries))
print Entries(i)
.......
i=i+1
Wend
******* Do while ist dasselbe: ******
.....
Dim Entries As Variant
Dim i as Integer
Entries = Doc.GetItemValue("MyMultiValueField")
i=Lbound(Entries)
Do While (i <= Ubound(Entries))
print Entries(i)
.......
i=i+1
loop
******* Und auch Do Until unterscheidet sich nur in der Bedingung ******
.....
Dim Entries As Variant
Dim i as Integer
Entries = Doc.GetItemValue("MyMultiValueField")
i=Lbound(Entries)
Do until (i > Ubound(Entries))
print Entries(i)
.......
i=i+1
loop
******* Do loop while erreicht denselben Effekt: ******
.....
Dim Entries As Variant
Dim i as Integer
Entries = Doc.GetItemValue("MyMultiValueField")
i=Lbound(Entries)
Do
print Entries(i)
.......
i=i+1
loop While (i <= Ubound(Entries))
******* Und auch Do loop Until unterscheidet sich nur in der Bedingung ******
.....
Dim Entries As Variant
Dim i as Integer
Entries = Doc.GetItemValue("MyMultiValueField")
i=Lbound(Entries)
Do
print Entries(i)
.......
i=i+1
loop until (i > Ubound(Entries))
******
******* Do .... loop ohne integrierte Bedingung ******
.....
Dim Entries As Variant
Dim i as Integer
Entries = Doc.GetItemValue("MyMultiValueField")
i=Lbound(Entries)
Do
print Entries(i)
.......
i=i+1
if i > UBound (Entries) Then Exit Loop
loop
******
Alle Beispiele hier sind ohne Optimierung dargestellt (um sie möglichst verständlich zu halten) und ausserdem ist das Beispiel so gestaltet, dass die so wichtigen Ausstiegsbedingungen sich für die einzelnen Schlaufenbeispiele nicht verändern, in der Regel müssen Eintritts. und Austrittsbedingungen auf ihre Gültigkeit hin überprüft werden, wenn man sich für einen anderen Schleifentyp entscheidet.
TMC:
Danke für die Tipps.....
Bin z.Zt. allerdings seeeehr eingespannt beruflich, daher bitte um Geduld, dass das alles in der Doku aufgenommen wird.
Ich kümmere mich aber darum, soll kein totgefahrenes Projekt werden!
TMC
Semeaphoros:
No problem ...
Alle:
Schade, dass da nicht noch mehr Beispiele kommen.
TMC:
jip, hab mir auch etwas mehr erhofft.
**** AUFRUF - PLEASE POST EXAMPLES *****
;)
TMC
Glombi:
Ich habe gesehen, dass die Forall Schleife noch zu beschreiben ist, also:
Die Forall-Schleife führt für jedes Element eines Arrays, einer Liste oder einer Collection einen Befehlsblock aus.
Snytax (aus der Hilfe):
ForAll refVar In container
[ statements ]
End ForAll
refVar: Die Referenzvariable, die alle Werte des Arrays, der Liste oder der Collection enthält.
Der Name dieser Referenzvariable darf im Scriptcode nicht an anderer Stelle verwendet werden.
container: Das Array, die Liste oder die Collection
Vorteil:
Die Verwendung von Forall stellt einen einfachen und bequemen Weg dar, über alle Elemente eines Arrays (...) zu iterieren. Man muss sich keine Gedanken um untere oder obere Grenze machen und erspart sich eine Laufvariable, wie si bspw. in der For-Schleife verwendet wird.
Die Forall-Schleife kann durch
Exit Forall
vorzeitig beendet werden.
Beispiel:
Aufgabe:Prüfe, ob der User eine bestimmte Rolle besitzt.
Lösung:
dim userroles as Variant
dim checkrole as String
dim treffer as integer
checkrole = "[Admin]"
treffer = false
userroles = Evaluate(|@Userroles|)
forall r in userroles
if cstr(r) = checkrole then
treffer = true
exit forall
end if
end forall
if treffer then
msgbox "Der User hat die Rolle " & checkrole
else
msgbox "Der User hat die Rolle " & checkrole & " nicht"
end if
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln