Per Workflow feststellen, ob ein Nachschlagefeld leer ist

Man sollte meinen, daß man in einem SharePoint Designer 2010 Workflow mit Hilfe der Bedingung Feld ist leer sehr einfach feststellen kann, ob ein bestimmtes Feld leer ist oder nicht. Bei Nachschlagefeldern geht das aber leider nicht ganz so einfach.

Die Bedingung Feld ist leer ist nur dann wahr, wenn das Nachschlagefeld noch nie Daten enthalten hatte. Wenn ein Nachschlagefeld zu einem früheren Zeitpunkt Daten enthielt und dann wieder geleert wurde, ist es nicht leer sondern enthält eine Null. Um das zu prüfen, muß man sich den Wert in eine Variable holen und diese dann auf Null prüfen. Das wiederum funktioniert aber nur, wenn das Nachschlagefeld auch eine Null (oder einen echten Wert) enthält. Wenn das Nachschlagefeld leer ist, bekommt man dabei einen Fehler. Für eine vollständige Prüfung müssen also beide Bedingungen kombiniert geprüft werden.

Der Ablauf ist also folgender:

Man legt eine neue Variable an, indem man im Workflowdesigner auf Lokale Variablen klickt und im Dialog dann auf Hinzufügen. Man vergibt einen sinnvollen Namen und wählt als Typ Ganze Zahl.

Wenn man die verwendete Variable weiter oben im Workflow bereits benutzt hat – oder wenn man einfach auf Nummer sicher gehen möchte – setzt man sie zuerst explizit auf Null. Das geht mit der Aktion Workflowvariable festlegen.

Jetzt prüft man mit der Bedingung Wenn das aktuelle Elementfeld gleich Wert ist, ob das Nachschlagefeld leer ist. Wenn man ein Nachschlagefeld einer anderen Liste prüfen möchte, verwendet man die Bedingung Wenn ein beliebiger Wert gleich Wert ist. Für den ersten Wert wählt man das Nachschlagefeld aus. Als Vergleichsoperator ist gleich eingestellt, das man durch Klicken in ist nicht leer ändert. Der zweite Wert, der sonst als Vergleich herangezogen wird, verschwindet dadurch und muß nicht angegeben werden.

Innerhalb der Bedingung verwendet man jetzt wieder die Aktion Workflowvariable festlegen und weist damit der Variablen den Wert des Nachschlagefelds zu (von dem man jetzt annimmt, daß es nicht leer ist). Dabei ist ganz wichtig, daß bei Feld zurückgeben als Als ganze Zahl ausgewählt wird. Man verwendet hier normalerweise Nachschlage-ID (als ganze Zahl), aber das erzeugt einen Fehler, wenn das Nachschlagefeld nur eine Null und keinen gültigen Wert enthält.

Damit hat man jetzt in der Variablen entweder die Zahl Null, falls das Nachschlagefeld leer ist, oder die ID des nachgeschlagenen Elements. Durch eine weitere Bedingung kann man jetzt die Variable prüfen und entsprechend reagieren. Zusammengefaßt sieht das dann so aus: