Es war einmal… ein SharePoint Designer Workflow, oder so ähnlich 🙂

Aufgund einer vor kurzen aufgetretenen Kundenanforderung, musste ich mich mit einer eigentlich simplen Thematik dann doch einige Zeit herumschlagen. Diese war nichts anderes, als einfach in den logischen Workflow Blöcken einen Zeitstempel zu integrieren um eine spätere Auswertung zu ermöglichen.

Da ich längere Zeit nicht mehr mit dem SPD gearbeitet hatte, war ich dann doch 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, welche aber allesamt weit entfernt von einer sinnvollen oder performanten Lösung sind.

Nun gut, ich habe mich dann für meinen eigenen Ansatz entschieden. Und zwar, dem Kunden eine simple Lösung bereitzustellen, 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 dazu?
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. Das ganze Builden und in die /_catalogs/solutions Bibliothek hochladen und aktivieren. Danach steht die Aktion auch schon ohne Zeitverlust oder Application Pool Neustart im SharePoint Designer zur Verwendung bereit und kann wie alle anderen Aktionen eingefügt werden.

 

Dauer der ganzen Aktion: 5-10 Minuten und man hat die Möglichkeit, innerhalb des Workflows Zeitstempel zu protokollieren.

Für alle die es noch einfacher wollen, stellt euch Smarter Solutions hier die Sandkasten WSP mit Site Feature als Download bereit.