InfoPath 2007 Formulare - selbstlernende Felder

In meinen Projekten bin ich neulich über eine Migration eines Lotus Notes Workflows gestolpert. Normalerweise benutzt man hier aus Gründen der Gestaltung Infopath 2007 Formulare um die Dateneingabe zu validieren.

Jetzt bietet Notes ein sogenanntes selbstlernendes Feld (also eine Combobox die es erlaubt neue eigene Einträge zu erstellen).

Wenn man Infopath als Client verwendet ist das auch sehr einfach, dort ist eine Combobox als Control vorgesehen. Soll das ganze jetzt aber über die Infopath Forms Services laufen wird`s etwas schwieriger, denn die Combobox ist dort nicht verfügbar.

Abhilfe schafft hier ein eigenes kleines Control welches aus 3 Bausteinen besteht:

Einer Textbox für die Eingabe, einem Button für die Steuerung sowie einer Listbox für die Anzeige bestehender Felder. Datenquelle ist hier eine SharePoint Liste. In unserem Fall soll ein Bearbeiter entweder aus der bestehenden Liste ausgewählt werden oder ein neuer Bearbeiter direkt eingegeben werden können - das Ganze ist nicht an irgendein Directory, sondern nur an eine einfache SharePoint Liste gebunden.

Das Ganze sieht dann so aus:

 Combo1

Die Idee dahinter ist die Combobox mit Regeln zu emulieren - d.h. folgende Aktionen hinter die Steuerelemente zu legen:

Button: Blendet die Listbox ein/aus - dies wird über Regeln gesteuert

RulesBearbeiter

Textbox: nimmt die Eingabe auf, sonst benötigt diese Textbox keinerlei Regeln

Listbox: Ist an die SharePoint Werteliste gebunden, beim Klick-Event wird der ausgewählte Eintrag in die Textbox kopiert, auch das geht über Regeln

RegelnBearbeiter

Beim Speichern des Formulars wird geprüft ob der Eintrag schon in der Werteliste vorhanden ist und ggf. eingetragen.

Hierzu kann man den Code in der Submit-Methode verwenden oder wie es hier gemacht wurde in einem nachgeschalteten SharePoint Workflow.

Um die Daten aus dem Formular zu bekommen ist es sehr einfach dies zu deserialisieren und ein typisiertes .net Objekt in Händen zu halten, Details hierzu sind hier.

Viel Spass

Sven