InfoPath en profielinformatie

Het invullen van een formulier moet zo min mogelijk werk zijn. Het moet instinctief aanvoelen en irritaties voorkomen. Ik ben van mening dat alles wat de gebruiker nodig heeft bij het invullen in het formulier aanwezig moet zijn of vanuit het formulier benaderbaar.

Bij registratieformulieren worden vaak gegevens gevraagd die gaan over de persoon die deze invult. Een gebruiker wordt gevraagd naar zijn naam, afdeling, functie, ect. In deze post laat ik zien hoe je met de “User Profile Service Web service” deze gebruikers-informatie automatisch invult.

Het eerste voorbeeld laat zien hoe de profielinformatie van de huidige gebruiker getoond wordt bij het laden van een formulier. Het tweede voorbeeld laat zien hoe je de gegevens van een andere gebruiker kan inladen in het formulier.

Met de “User Profile Service Web service” lees je de gegevens van de gebruikersprofielen binnen SharePoint. Met de service kun je alle velden opvragen die in het profiel aanwezig zijn. De service roep je aan op de plaats waar het formulier wordt gepubliceerd bijvoorbeeld:

http : //<server>/<site>/_vti_bin/UserProfileService.asmx

http : //<server>/_vti_bin/UserProfileService.asmx

Het opzetten van het formulier

  • Maak in je InfoPath-formulier de velden aan die je wilt gebruiken
  • Maak een lay-out voor het formulier
  • Sleep de velden naar de lay-out
  • Zet een dataverbinding op naar de service
  • Dit doe je door in InfoPath naar de Ribbon te gaan in de tab Data
  • Klik op Data Connections >> Add
  • Kies bij “Create a new connection to” voor “Receive data
  • Selecteer “SOAP Web Service
  • Geef de url van de web-service
  • Kies uit de lijst “GetUserProfileByName
  • Laat het volgende veld staan en klik op “Next” (geen vinkje bij “Store a copy of the data…” );
  • Laat het volgende veld staan en klik op “Finish” (vinkje aan bij “Automatically retrieve data…” ).

Toon profielgegevens van de huidige gebruiker

Alle gegevens in het voorbeeld-formulier haal ik uit de “User Profile Service Web service” bij het laden van het formulier door gebruik te maken van Rules.

De profielfoto is het Picture-control die getoond met de optie “as a link”.

Het twitter-account is het Hyperlink-control waarbij de omlijning is verborgen. Met de web-service worden de beiden links opgehaald en gezetin de velden van de controls.

Alle velden zijn gezet als “read-only”.

Een grens van het gebruik van de web-service binnen InfoPath is het veld  ‘About me’, deze geeft vanuit het Profiel ook de html-tags terug.

Om de velden te zetten bij het laden van een formulier ga in de Ribbon  naar de tab Data, selecteer Form Load. Hier zet je de Rules die opkomen bij het laden van het formulier.

Ik heb de Rule ‘SetAccountName’ (1) gemaakt die geen condities (2) heeft met verschillende Acties (3). Je kunt voor de rule condities zetten als dit in je formulier nodig is. Voor elk veld waar ik een waarde voor wil zetten met de “User Profile Service Web service” heb ik een ac;tie gemaakt die het veld in het formulier de waarde geeft.

Om de acties te maken herhaal de volgende stappen voor elke actie:

  • Selecteer Add >> “Set a field’s Value
  • Selecteer het veld binnen je formulier
  • Klik op de functie van het veld (fx)
  • Klik op “Insert Field or Group
  • Selecteer bovenin bij Field de dataconnectie naar de web-service die je gemaakt hebt en selecteer het veld “Value” en klik op “Filter Data
  • Selecteer het veld “Name” uit de web-service
  • Selecteer “is equal to
  • In het derde veld geef je als tekst de naam van het veld wat je wilt opvragen.

In dit voorbeeld vraag ik de PictureUrl die ik in mijn Picture-controle zet. Voor als je een andere waarde terug wilt hebben uit het profiel vul je hier aan ander veldnaam in.

Tonen van profielgegevens van een andere gebruiker

Er zijn veel voorbeelden te bedenken dat je de gegevens wilt tonen van een andere gebruiker. Bijvoorbeeld een secretaresse die een aanvraagformulier invult voor haar opdrachtgever.

Standaard is de “User Profile Service Web service” geladen met de gegevens van de huidige gebruiker. Door gebruik te maken van Rules is het eenvoudig om de web-service-gegevens terug te laten geven van een ander profiel.

In dit voorbeeld doe ik dit samen met het control “Person/Group Picker” en een button. Alle gegevens in mijn voorbeeld-formulier haal ik uit de “User Profile Service Web service” door op een button te klikken.

Met een Rule (8) dwing ik in het formulier af als in de “Person/Group Picker” een waarde is ingevuld dat dan pas de button actief wordt.

Als de “Person/Group Picker” is gevuld en de button is aangeklikt wordt de waarde van de “Person/Group Picker” gezet (9) in de webservice en de gegevens van het profiel opgehaald (10). En vraagt de waarden van de velden terug die je wilt hebben.

Om dit te doen selecteer de Button, ga naar de Ribbon  naar de tab Home, selecteer Manage Rules.

Hier zet je de Rules die opkomen bij het aanklikken van de Button. In dit voorbeeld heb ik verschillende Rules gemaakt. Je kunt ook één Rule maken met de verschillende acties.

9. RuleSetAccountName

  • Selecteer als actie “Set a field’s value
  • bij Field selecteer “AccountName” uit de web-service onder query Fields bij Value selecteer het veld “AccountId”
    van het “Person/Group Picker control” uit het formulier.

10. RuleQeury

  • Selecteer als actie “Query for data
  • Bij data connection selecteer de dataconnectie naar de web-service die je hebt gemaakt.
  • Met deze Rule worden de gegevens opgehaald van de web-service.

11. Herhaal de stappen 1 tm 7

De “User Profile Service Web service” is binnen InfoPath een krachtig middel om profielgegevens voor in te vullen voor de gebruiker. Zodat de gebruiker minder handelingen hoeft te doen om een formulier in te vullen. En voorkomt vergissingen.