Wen es genauer interessiert:
Ich habe den relevanten Code mal rausgepflückt (leicht verkürzt):
9er Code:
usrname:=@DbLookup("":"NoCache";server:db;"($Users)";ListName;3);
tmpusrname:=@If(@IsError(usrname);"";usrname);
@If( @LowerCase(tmpusrname) = @LowerCase(ListName); L_ERR_MSG3; "");
==> Ein Lookup mit allen Werten aus ListName, wenn nicht @IsError, dann Vergleich der Ergebnisses (Spalte 3 = FullName des Users), wenn identisch, dann Fehler.
10er Code:
tmpusrname := @Transform(ListName; "_x"; @If(@DbLookup("":"NoCache";""; "($Users)"; _x; 3; [FailSilent]) = ""; @Nothing; _x));
@If(tmpusrname != ""; L_ERR_MSG3; "");
==> Pro Wert in ListName ein Lookup mit FAILSILENT- Parameter, aber der Return- Wert aus Spalte 3 wird gar nicht berücksichtigt, sondern direkt der Lookup- Wert in die Variable geschrieben... dieser Wert wird dann mit "" verglichen. Gibt es also IRGENDEINEN Match (mit einem Vornamen, Nachnamen), dann kommt der Fehler...
11er Code:
tmpusrname := @Transform(@ThisValue; "_x"; @If(@LowerCase(@DbLookup("":"NoCache";""; "($Users)"; _x; 3; [FailSilent])) = @LowerCase(_x); _x; @Nothing));
sMsg := @If(tmpusrname != ""; L_ERR_MSG3; "");
==> Pro Wert in ListName ein Lookup mit Failsilent, das Ergebnis wird direkt mit dem Lookup- Wert verglichen, und nur wenn sie identisch sind, wird etwas zurückgeliefert. Dann kommt die Meldung...
Damit funktioniert der 11er Code so, wie der 9er gedacht war und eben auch für mehrere ListNames, was der 9er nicht konnte (wenn nicht alle ListNames gematcht haben).
Nur eine Nebenbemerkung: Im 9er Code kam die Definition der Variablen "server" und "db" erst in der Zeile NACH dem Lookup, und der Code hat nur zufälligerweise deshalb funktioniert, weil "" : "" im DBLookup identisch ist mit @Subset(@DbName;1) : @Subset(@DbName;-1).