Vor kurzem traf eine neue Kundenanforderung bei uns ein, bei der wir einen Zeitstempel in den logischen Workflow-Blöcken integrieren mussten. Dadurch soll der Kunde die Möglichkeit erhalten, spätere Auswertungen durchzuführen. Obwohl diese Anforderung doch eigentlich simpel erscheint, musste ich mich dennoch einige Zeit damit herumschlagen. Aus diesem Grund zeige ich dir, wie man einen Zeitstempel im SharePoint Designer macht!

Da ich längere Zeit nicht mehr mit dem SharePoint Designer gearbeitet hatte, war ich verblüfft, dass es hier keine Standardlösung von Microsoft gibt. Im weiteren Verlauf meiner Recherche fand ich heraus, dass diese Problematik seit 2009 (!) bekannt ist und es dafür verschiedenste – mehr oder weniger – schlechte Workarounds gibt. Diese sind aber allesamt weit entfernt von einer sinnvollen oder performanten Lösung.

Daher habe ich mich dann für meinen eigenen Ansatz entschieden. Ich stelle dem Kunden eine simple Lösung bereit, welche noch dazu wiederverwendbar ist – denn das ist was wir tun – Lösungen generieren. 😉

Die Rede ist hier von einer kleinen aber effektiven Sandbox Workflowaktion, welche genau die gegebene Anforderung erfüllt. Nämlich einen Zeitstempel zu generieren.

Was benötigt man für einen Zeitstempel im SharePoint Designer?

  1. Leere Visual Studio SharePoint Sandbox Solution erstellen
  2. Neues Element vom Typ Modul hinzufügen
  3. Das autogenerierte „Elements.xml“ bearbeiten
  4. Eine Klasse mit dem Code bereitstellen
  5. Deployen, Einbinden &… Profit!

Wie sieht das nun aus und was kommt in die Files?

Inhalt der Elements.xml:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <WorkflowActions>
        <Action Name="Aktuelles Datum und Zeit ausgeben" Category="Smarter Sandbox" Assembly="$SharePoint.Project.AssemblyFullName" ClassName="Smarter.WFActivities" FunctionName="GetDateTimeNow" AppliesTo="all" UsesCurrentItem="true" SandboxedFunction="true">
            <RuleDesigner Sentence="Gib aktuelles Datum und Uhrzeit in %1 aus">
                <FieldBind Field="DateTimeNow" DesignerType="ParameterNames" Text="DateTimeNow" Id="1" />
            </RuleDesigner>
            <Parameters>
                <Parameter Name="__Context" Type="Microsoft.SharePoint.WorkflowActions.WorkflowContext,Microsoft.SharePoint.WorkflowActions" Direction="In" DesignerType="Hide" />
                <Parameter Name="DateTimeNow" Type="System.String, mscorlib" Direction="Out" DesignerType="ParameterNames" />
            </Parameters>
        </Action>

    </WorkflowActions>
</Elements>

Inhalt der Code Datei:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using Microsoft.SharePoint.UserCode;

namespace Smarter
{
    partial class WFActivities
    {
        public Hashtable GetDateTimeNow(SPUserCodeWorkflowContext context)
        {
            Hashtable hTable = new Hashtable();
            hTable["DateTimeNow"] = DateTime.Now.ToShortTimeString();
            return hTable;
        }
    }
}

Und das war’s eigentlich auch schon für den Zeitstempel im SharePoint Designer. Jetzt kann die Solution gebuildet und in die /_catalogs/solutions Bibliothek hochgeladen und aktiviert werden. Danach steht die Aktion auch schon ohne Zeitverlust oder Neustart des Application-Pools im SharePoint Designer zur Verwendung bereit und kann wie alle anderen Aktionen eingefügt werden.

Die Erstellung dauert 5-10 Minuten und man hat die Möglichkeit, innerhalb des Workflows Zeitstempel im SharePoint Designer zu protokollieren.

Für alle, die es noch einfacher wollen, stellen wir euch hier die Sandkasten-WSP mit Site-Feature für Zeitstempel im SharePoint Designer als Download bereit.