Wochentage ermitteln und berechnen mittels InfoPath und SharePoint

SharePoint erlaubt bekanntermaßen die Verwendung von Formeln zur Spaltenberechnung. InfoPath hingegen ist nicht in der Lage, diesen kompletten Funktionsumfang abzubilden. Benötigt man beispielsweise den Wochentag eines bestimmten Datums, so gibt es standardmäßig keine Möglichkeit, dies ohne Weiteres mit InfoPath Boardmitteln abzubilden. An dieser Stelle kommt wieder der SharePoint ins Spiel, welcher im Gegensatz zu InfoPath die WOCHENTAG()-Funktion kennt, um den Wochentag eines bestimmten Datums zurückzugeben. Im Folgenden wird gezeigt, wie diese Werte auch in InfoPath-Formularen verwendet werden können. Weiterhin beschreibt dieser Artikel die Möglichkeit, Wochentage nach Ablauf einer bestimmten Zeitperiode (z.B. 1 Tag, 3 Tage) zu berechnen und dabei sogar das Wochenende zu berücksichtigen – d.h., zu “überspringen”.

  • Zunächst wird eine SharePoint Liste benötigt, welche die Wochentage berechnet und später von InfoPath aus angesprochen werden kann. Die Liste “Wochentage” erhält zwei neue Spalten: eine namens Datum vom Typ “Datum” sowie eine namens “Wochentag” vom Typ “Berechnete Spalte”. Letztere erhält als Formel den Eintrag:
    =TEXT(WOCHENTAG(Datum);"dddd")
    Die Spalte Titel wird im Beispiel auf optional gesetzt und ausgeblendet, da diese nicht benötigt wird.
    image
  • Diese Liste muss nun mit den gewünschten Datumswerten befüllt werden und berechnet für diese automatisch die Wochentage. Das Befüllen kann z.B. mit der Datenblattansicht gelöst werden. Dazu muss einfach das erste zu verwendende Datum (im Bsp. 1.1.2013) eingetragen und die Zelle per Drag&Drop beliebig oft vervielfältigt werden.
    image
  • Nachdem die Listeneinträge erzeugt wurden, können diese per InfoPath über eine sekundäre Datenverbindung ausgelesen werden. Ribboneintrag Daten –> Datenverbindungen –> Hinzufügen –> Empfangen –> von SharePoint –> SP Website eintragen –> Liste mit Wochentagen wählen. Als auszuwählende Felder müssen “Datum” und “Wochentag” ausgewählt werden. Weiterhin ist ein Name der Datenverbindung einzutragen und das automatische Abrufen der Verbindung beim Formularladevorgang zu aktivieren. 
    image image
  • Es sei vorausgesetzt, dass bereits ein InfoPath-Formular mit folgenden Feldern und Steuerelementen existiert:
    image
    - Beginn (Typ: Datum mit Steuerelement Datumsauswahlfeld)
    - Wochentag Beginn (Typ: Text mit Steuerelement Textfeld)
    - Dauer (Typ: Zahl mit Steuerelement DropDownListe –> Auswahlmöglichkeiten “1 Tag” (Wert=1), “3 Tage” (Wert=3), “Arbeitswoche” (Wert=7))
    image
    - Ende (Typ: Datum mit Steuerelement Textfeld)
    - Wochentag Ende (Typ: Text mit Steuerelement Textfeld)
  • Nun ist in den Feldern “Wochentag Beginn” und “Wochentag Ende” jeweils ein Standardwert zu hinterlegen, welcher bezogen auf “Beginn” bzw. “Ende” jeweils die Wochentage aus der SharePoint-Liste abruft. Dabei ist zu beachten, dass ein Filter zu setzen ist, damit das Steuerelement weiß, welches der x Elemente aus der SharePoint Liste abzurufen ist. Das Matching geschieht über das Datum. Dies geschieht z.B. für “Wochentag Beginn” wie folgt:
    Standardwert –> f(x) –> Feld oder Gruppe einfügen –> Sekundäre Datenverbindung –> dataFields –> Wochentag –> Daten filtern –> Hinzufügen –> Filterbedingung: “Datum” “enthält” –> Feld oder Gruppe einfügen –> Primäre Datenquelle –> Beginn
    filterverbindung
    Das ganze liest sich dann in SQL Logik etwa so: select “Wochentag” from “Sekundäre Datenverbindung.SharePoint Wochentagsliste” where “Datum” contains “Primäre Datenverbindung.Datum Beginn”. Wichtig ist, dass als Operator “enthält” (contains) und nicht “ist gleich” (equals) verwendet wird. Dies kommt daher, dass der Wert aus der SharePoint Datumsspalte immer auch die Uhrzeit mit enthält, selbst wenn diese nicht angezeigt wird (ISO 8601 Wert mit Nullen als Uhrzeit, z.B. 2013-01-01T00:00:00). Somit würde ein Join über “equals” fehlschlagen (2013-01-01T00:00:00 != 2013-01-01).
  • Damit ausgeschlossen werden kann, dass der Beginn außerhalb der Arbeitswoche liegt, muss dies mit einer Validierungsregel unterbunden werden: DropDownListenfeld –> Regeln –> Neu –> Überprüfung. Eine mit “ODER” verknüpfte Bedingung prüft, ob der Wert von WochentagBeginn gleich den Textwerten “Samstag” bzw. “Sonntag” entspricht. Ist dies der Fall, soll eine Fehlermeldung ausgegeben werden.
    image
  • Um die eigentliche Berechnung durchführen zu können kommt nun die AddDays-Funktion zum Einsatz. Hierfür müssen folgende Regeln auf dem Steuerelement WochentagEnde erstellt werden:
    Bedingung Aktion (je Feldwert von “Ende” setze mit AddDays Funktion)
    wenn WochentagEnde = Samstag UND Dauer = 1 Tag addDays(Beginn; 3)
    wenn WochentagEnde = Samstag UND Dauer = 3 Tage addDays(Beginn; 5)
    wenn WochentagEnde = Sonntag UND Dauer = 3 Tage addDays(Beginn; 5)
    wenn WochentagEnde = Montag UND Dauer = 3 Tage addDays(Beginn; 5)

Schließlich ist auch die Berechnungslogik implementiert und das Formular sollte entsprechend der Regeln die korrekten Wochentage des EndDatums ausgeben.

Kommentare sind geschlossen