Für viele Formulare spielt die Genehmigung eines Antrags durch einen ganz bestimmten Personenkreis eine wichtige Rolle. Der Antragsteller füllt den Antrag aus, dieser wird weitergeleitet und genehmigt/abgelehnt von einer zweiten Person.
InfoPath bietet die Möglichkeit, mit Rollen zu arbeiten, d.h. im Formular kann festgelegt werden, wer z.B. zu den Genehmigern gehört. Das hat den Nachteil, dass man hier Benutzer und Gruppen aus dem Active Directory fest zuweist. Eine AD-Gruppe wird in der Praxis nicht immer zur Verfügung stehen bzw. kann nicht in der Fachabteilung gepflegt werden. Werden feste Benutzer definiert, muss immer wieder der Formularentwurf angepasst werden, wenn sich die Genehmiger ändern.
Wir zeigen hier, wie mit einer Genehmigerliste in SharePoint ein rollenbasiertes Formular definiert werden kann.
Genehmigerliste definieren
Hier kann eine benutzerdefinierte Liste oder eine Kontaktliste verwendet werden. Es sollte für unser Beispiel auf jeden Fall eine Spalte mit der E-Mail-Adresse verwendet werden.
Genehmigerliste in InfoPath als Datenquelle definieren
Als nächsten Schritt fügen wir in InfoPath diese Liste als Datenquelle hinzu. Die Daten werden beim Öffnen des Formulars automatisch aufgerufen.
Mailadresse des aktuell angemeldeten Benutzers ermitteln
Über einen Webservice ist es möglich, die Mailadresse (und weitere Daten) des aktuell angemeldeten Benutzers aus dem Active Directory auszulesen. Mit welchem Webservice das geht und die weiteren Möglichkeiten dazu finden Sie hier:
Mailadresse einem Textfeld zuweisen
Damit wir immer den aktuellen Benutzer beim Öffnen des Formulars ermitteln, erstellen wir eine Regel beim Öffnen des Formulars und setzen den Wert eines Feldes auf den Wert aus dem Webservice.
- Zuerst ein Textfeld der Datenquelle hinzufügen, wir nennen es "UserEmail"
- Jetzt Menü "Extras – Formularoptionen – Öffnen und Speichern"
- Schaltfläche "Regeln" anklicken
- Dann Regel hinzufügen
- Im nächsten Dialogfeld "Aktion hinzufügen"
- "Den Wert eines Felds setzen" wählen und als Feld "UserMail" aus der primären Datenquelle verwenden
- auf die Funktionsschaltfläche bei "Wert" klicken
- "Feld oder Gruppe einfügen"
- Sekundäre Datenquelle "GetUserProfilByName" wählen (die aus unserem Webservice)
- "dataFields" komplett aufklappen und Feld "Value" wählen
- auf "Daten filtern" klicken
- Filter hinzufügen
- im linken Dropdown aus der sekundären Datenquelle "Feld oder Gruppe auswählen", dann unter PropertyData das Feld "Name" auswählen.
- "ist gleich" lassen
- Rechts "Text eingeben" wählen und "WorkEmail" eingeben (muss genau so geschrieben sein!)
- Alle Dialoge bestätigen und schließen
Jetzt kann das Textfeld zur Überprüfung ins Formular eingefügt werden, es sollte die aktuelle User-Email zeigen (später kann/sollte dieses Feld wieder ausgeblendet oder schreibgeschützt werden):
Prüfen ob der Benutzer in der Genehmigerliste steht
Nun prüfen wir, ob der aktuelle Benutzer in der Genehmigerliste steht. Für das Beispiel verwenden wir eine bedingte Formatierung auf einer Schaltfläche. Ist der Benutzer in der Liste, ist diese aktiv. Wenn nicht, ist sie inaktiv. In der Praxis können Sie dies z.B. für die "Genehmigen"-Schaltfläche verwenden.
- In den InfoPath-Entwurf über Steuerelemente eine Schaltfläche einfügen
- Doppelklick auf die Schaltfläche, Reiter "Anzeige" und dort "Bedingte Formatierung" anklicken
- Bedingung hinzufügen und im ersten Dropdown-Feld "Der Ausdruck" wählen:
- Jetzt (in unserem Beispiel) in das nächste Textfeld einfach folgendes eingeben:
count(xdXDocument:GetDOM("Approvers")/dfs:myFields/dfs:dataFields/dfs:Approvers[@EMail = xdXDocument:get-DOM()/my:meineFelder/my:Benutzerdaten/my:UserEmail]) = 0
- Schließlich noch im Dialogfeld die Option "Dieses Steuerelement deaktivieren" wählen
Was soll das?
Dieser Ausdruck ermittelt die Anzahl der Elemente in der sekundären Datenquelle unserer Genehmiger, bei denen die Mail-Adresse die gleiche ist wie die des aktuellen Benutzers, der das Formular ausfüllt. Da Mail-Adressen eindeutig sind, ist das Ergebnis entweder 0 (Benutzer ist kein Genehmiger) oder 1 (Benutzer ist Genehmiger). Falls "0" deaktivieren wir das Steuerelement.
Wie kommt man jetzt zu diesem Ausdruck, wenn man nicht ausgesprochen sattelfest im Thema XPATH ist? Hier eine kleine Anleitung dazu:
- Verwenden Sie ein beliebiges Textfeld, das Sie in das Formular einfügen
- Doppelklicken Sie auf das Textfeld und wählen die Funktionsschaltfläche rechts von "Wert"
- Fügen Sie die Funktion "Anzahl" ein
- Doppelklicken Sie auf das Feld in der Klammer der Funktion
- Wählen Sie als Datenquelle die "Genehmiger" (bzw. "Approvers" in unserem Beispiel)
- Wählen Sie in dieser Datenquelle die wiederholte Gruppe (bei uns wieder "Approvers")
- Klicken Sie jetzt auf "Daten filtern" und "Hinzufügen"
- Wählen Sie im ersten DropDown den Feldname für die Mailadresse aus der SharePoint-Liste
- "ist gleich"…
- im dritten DropDown "Feld oder Gruppe auswählen"
- Wählen Sie nun die primäre Datenquelle und dort das Feld "UserEmail" (das wir aus unserem Webservice belegt haben)
- Bestätigen Sie die Dialoge mit "OK", bis Sie wieder das Dialogfeld "Formel einfügen" sehen.
- Klicken Sie dort unten auf "XPath bearbeiten" und Sie sehen den korrekten Filterausdruck
- Kopieren Sie diesen in die Zwischenablage und fügen diesen Ausdruck in das Feld bei der bedingten Formatierung ein (s.o.).
- Vergessen Sie nicht das " = 0" an das Ende des Ausdrucks einzufügen
Ergebnis
Sind wir als Anwender nicht in der Genehmigerliste in SharePoint, sieht das so aus:
Sind wir hingegen bei den Genehmigern dabei, ist die Schaltfläche aktiv:
Statt der bedingten Formatierung können damit natürlich noch ganz andere Dinge im Formular "angestellt" werden, wir hoffen, dass Ihnen diese Lösung für Ihre Formulare einmal nützlich sein kann.
