Datenverbindungen werden in InfoPath angelegt um Daten aus SharePoint, Webdiensten oder anderen “sekundären Datenquellen” abzurufen. Für ein Projekt richtete ich eine SharePoint Liste als Datenverbindung ein, die ein “Person oder Gruppe”-Feld enthielt. Der Benutzer sollte dann aus einem Dropdown-Listenfeld einen Eintrag auswählen und die zugehörige Person angezeigt bekommen.
Leider musste ich feststellen, dass InfoPath von den Werten in diesem Felder nur folgende erhält: DisplayName (der Name trügt, dies ist nicht der angezeigte Name, sondern der Benutzername mit vorgestellter Domäne), AccountId und AccountType. Was mich aber wirklich interessierte, war die E-Mail-Adresse.
Woher sollen also diese zusätzlichen Informationen kommen? Wie wäre es mit dem People-Webdienst?
Zuerst musste dafür eine zusätzliche Datenverbindung eingerichtet werden:
- Neue Verbindung erstellen mit: Daten empfangen
- SOAP-Webdienst
- “http://MeinSharePoint/_vti_bin/people.asmx”
- “ResolvePrincipals”
- Wert von “tns:principalType” auf “All” setzen
- Verbindung benennen (z.B. “WebService_People_ResolvePrincipals”)
- Haken entfernen vor “Daten beim Öffnen des Formulars automatisch abrufen”
Die erstellte Sekundäre Datenquelle bietet deutlich mehr Informationen:
Nachdem die Verbindung erstellt war, musste zusätzliches Feld für die E-Mail-Adresse erstellt werden. Dieses Feld konnte dann mit einer Regel jedes Mal gesetzt werden, wenn sich das Feld mit dem Benutzernamen geändert hat.
Die Regel besteht aus drei Aktionen:
- principalKeys (Suchstring) aus Benutzernamen (DisplayName von pc:Person) befüllen
- Webdienst-Verbindung abfragen
- E-Mail-Adresse aus sekundärer Datenquelle auslesen
Hier noch einmal in Screenshots:
Schritt 1: Feld string = . setzen
Schritt 3: Feld EntwicklerEmail = Email setzen
Nach dieser Anpassung wird das Feld EntwicklerEmail jedes Mal mit der E-Mail-Adresse des Benutzers aus dem Feld Entwickler gefüllt, wenn sich dieses ändert.