Infopath, Sharepoint und das Datum

Eigentlich, so erwartet man, sollten Infopath und Sharepoint als “eingespieltes” Team mit Datumsformaten umgehen können und hier eine einheitliche Linie finden. Leider ist dem nicht so. Kein Grund zur Panik.

Der Zweck heiligt die Mittel: Ein Workaround zum Umgang mit Datumsfeldern, die über Infopath aus einer Sharepoint Liste in ein Ausdrucksfeld eingelesen werden.

Ausgangssituation

Die Ausgangssituation ist eine Sharepointliste, die über die Datenverbindung mit einem Infopath Formular verknüpft ist, um Daten aus der Sharepointliste auszulesen und in Infopath weiterzuverwenden.

Ein Feld innerhalb der Sharepoint Liste ist als Datumsformat angelegt. Die Settings sind dabei auf “nur Datum” ohne Zeit eingestellt. Benutzer können dieses Datum selbst über ein Kalender Date-Pick-Up auswählen. In der Sharepointliste wird dieses dann korrekt angezeigt.

Trotz Formatierung des Infopath Ausdruckselements als Datum nach Eingabegebietsschema (also Deutsch) wird diese Formatierung jedoch nicht übernommen.  Aus 10.02.2009 wird aller Formatierungsanweisungen zum Trotz: 2009-02-10 00:00:00.

Workaround

Es gibt zwei mögliche Workarounds der schnellen Art: die Manipulation innerhalb der Sharepoint Liste und die im Infopath.

Ich habe mich entschlossen, keine Manipulation an der Sharepoint Liste vorzunehmen. Dies würde bedeuten, die Sharepoint Liste um ein weiteres Feld vom Typ “berechnet” zu erweitern und aus dem Datumsformat einen String zu erstellen. Für jedes Datumsfeld muss demnach ein Textfeld angelegt werden, das für den Benutzer nicht sichtbar ist, aber immer “mitgeschleppt” würde.

Meine Variante erledigt dies innerhalb der Infopath Vorlage:

concat(substring(xdXDocument:GetDOM("Verknuepfte_Liste") /dfs:myFields/dfs:dataFields/dfs:_Verknuepfte_Liste/@Datumsfeld, 9, 2), ".", substring(xdXDocument:GetDOM("Verknuepfte_Liste") /dfs:myFields/dfs:dataFields/dfs:_Verknuepfte_Liste/@Datumsfeld, 6, 2), ".", substring(xdXDocument:GetDOM("Verknuepfte_Liste") /dfs:myFields/dfs:dataFields/dfs:_Verknuepfte_Liste/@Datumsfeld, 1, 4))

Der Code ersetzt das aus Sharepoint ausgelesene Datumsformat durch das hierzulande übliche dd.mm.YYYY.

Schön ist das alles nicht. Aber es ist ein Workaround, der die Sharepointliste unberührt lässt und vor allem dann sinnvoll ist, wenn mehrere Datumsfelder aus der Sharepointliste ausgelesen werden sollen. Da ein Ausdrucksfeld ausschließlich Daten anzeigt, die jedoch nicht innerhalb des späteren XML Dokuments gespeichert werden, ist der Verlust des Formatierungstyps an dieser Stelle eindeutig zu verschmerzen.

Bildnachweis: Uhren “gibt’s” bei

 

Auch was dazu sagen?