Gewusst wie: Erstellen und Bereitstellen von Workflowaktionen in Sandkastenlösungen

In diesem Thema wird beschrieben, wie Sie eine benutzerdefinierte Workflowaktion in einer Lösung mit eingeschränkter Sicherheitsstufe erstellen und bereitstellen.

Letzte Änderung: Mittwoch, 13. April 2011

Gilt für: SharePoint Foundation 2010

Verfügbar in SharePoint Online

Nachdem eine benutzerdefinierte Aktion bereitgestellt wurde, kann sie in einem deklarativen Workflow-Designer wie z. B. Microsoft SharePoint Designer verwendet werden.

TippTipp

Ein weiteres Beispiel hierzu finden Sie unter How to: Create a Sandboxed Workflow Action.

Wenn Sie eine benutzerdefinierte Workflowaktion für die Verwendung in SharePoint Designer durch Benutzer einer Websitesammlung verfügbar machen möchten, aber nicht die Berechtigung zum Installieren einer Farmlösung haben, können Sie die Workflowaktion in einer Lösung mit eingeschränkter Sicherheitsstufe installieren. Die Vorgehensweise unterscheidet sich in den folgenden beiden Punkten von der Vorgehensweise zum Erstellen und Installieren einer benutzerdefinierten Workflowaktion in einer Farmlösung:

  • Sie müssen eine benutzerdefinierte Klasse und eine benutzerdefinierte Methode erstellen, die vom Workflowmodul aufgerufen und im Sandkasten-Arbeitsprozess ausgeführt wird. Diese Methode stellt die Workflowaktivität der benutzerdefinierten Workflowaktion dar.

  • Das deklarative Markup, mit dem die Workflowaktion für SharePoint Designer definiert wird, wird mithilfe eines Featuremanifests in der Inhaltsdatenbank bereitgestellt, und nicht mithilfe einer ACTIONS-Datei im Dateisystem der Front-End-Webserver. Und das im Featuremanifest verwendete WorkflowActions-Markup unterscheidet sich bei einigen Aspekten von dem in einer ACTIONS-Datei verwendeten WorkflowInfo-Markup.

So erstellen Sie die die Aktivitätsmethode

  1. Starten Sie ein Microsoft Visual Studio SharePoint-Projekt. Sie können einen der Projekttypen verwenden, die in Lösungen mit eingeschränkter Sicherheitsstufe zulässig sind, einschließlich Leeres SharePoint-Projekt. (Business Data Connectivity-Modell, Websitevorlage, Visuelles Webpart, Sequenzieller Workflow oder Zustandsautomatworkflow sind nicht zulässig.)

  2. Doppelklicken Sie im Projektmappen-Explorer auf die FEATURE-Datei, um den Feature-Designer zu öffnen.

  3. Legen Sie im Feature-Designer die Option Bereich auf Website fest.

  4. Fügen Sie dem Projekt eine Klasse hinzu.

  5. Geben Sie der Klasse und dem Namespace entsprechende Namen, und fügen Sie using-Anweisungen für System.Collections, Microsoft.SharePoint und Microsoft.SharePoint.UserCode hinzu.

  6. Deklarieren Sie in der Klasse eine Methode für die Logik der benutzerdefinierten Workflowaktivität. Sie muss die folgenden Bedingungen erfüllen:

    • Sie muss public sein.

    • Sie muss static sein.

    • Sie muss ein Hashtable-Objekt zurückgeben.

    • Der erste Parameter muss ein SPUserCodeWorkflowContext-Objekt sein (zusätzliche Parameter sind bei Bedarf möglich).

    Im folgenden Beispiel wird gezeigt, worüber Sie zu diesem Zeitpunkt verfügen sollten.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.Collections;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.UserCode;
    
    namespace Contoso.SharePoint.Workflow.Actions
    {
        class ListCreation
        {
            public static Hashtable CreateList(SPUserCodeWorkflowContext context, String listTitle, String listDescription, String listType)
            {
    
            }
        }
    }
    
  7. Geben Sie die Logik der Aktivität innerhalb der Methode an.

    Wichtiger HinweisWichtig

    Diese Methode wird in einem Sandkasten-Arbeitsprozess ausgeführt und muss deshalb den Einschränkungen bezüglich der Aktionen entsprechen, die in diesem Prozess ausgeführt werden können. Beispielsweise kann mit dem Code nicht auf Elemente außerhalb der aktuellen Websitesammlung zugegriffen werden, und das Dateisystem des Servers kann weder gelesen noch kann in dieses geschrieben werden. Weitere Informationen finden Sie unter Einschränkungen bei Sandkastenlösungen.

    Im Folgenden wird das vorherige Beispiel fortgesetzt.

    public static Hashtable CreateList(SPUserCodeWorkflowContext context, String listTitle, String listDescription, String listType)
    {
        using (SPSite siteCollection = new SPSite(context.SiteUrl))
        {
            SPWeb currentWeb = siteCollection.OpenWeb(context.WebUrl);  
            SPListTemplateCollection availableListTypes = currentWeb.ListTemplates;
            SPListTemplate listTemplate = availableListTypes[listType];
            Guid listID = currentWeb.Lists.Add(listTitle, listDescription, listTemplate);
            Hashtable result = new Hashtable();
            result["ListID"] = listID.ToString();
            return result;
        }
    }
    

So erstellen Sie das WorkflowActions-Markup

  1. Fügen Sie im Projekt ein Leeres Element aus den SharePoint 2010-Vorlagen in Visual Studio hinzu.

  2. Öffnen Sie im Projektmappen-Explorer die Datei Elements.xml.

  3. Fügen Sie ein WorkflowActions-Element als untergeordnetes Element des Elements-Elements hinzu.

  4. Fügen Sie dem WorkflowActions-Element ein untergeordnetes Action-Element hinzu, und legen Sie dessen Attribute fest. Der folgende Code ist ein Beispiel dafür.

    <Action Name="Create a List" 
            SandboxedFunction="true" 
            Assembly="$SharePoint.Project.AssemblyFullName$" 
            ClassName="Contoso.SharePoint.Workflow.Actions.ListCreation" 
            FunctionName="CreateList" 
            AppliesTo="all" 
            UsesCurrentItem="true"
            Category="Contoso Actions">
    </ Action>
    
  5. Fügen Sie dem Actions-Element ein untergeordnetes RuleDesigner-Element hinzu, und geben Sie dessen Sentence-Attribut an.

    <RuleDesigner Sentence="Create a %1 list named %2, and described as %3">
    
    </RuleDesigner>
    
  6. Fügen Sie für jedes Variablenfeld in Sentence ein untergeordnetes FieldBind-Element hinzu, und konfigurieren Sie dessen Attribute.

    <RuleDesigner Sentence="Create a %1 list named %2, and described as %3">
      <FieldBind Id="1" Field="listType" DesignerType="Text" Text="list type"/>
      <FieldBind Id="2" Field="listTitle" DesignerType="Text" Text="list name"/>
      <FieldBind Id="3" Field="listDescription" DesignerType="Text" Text="description"/>
    </RuleDesigner>
    
    HinweisHinweis

    Im vorherigen Beispiel für RuleDesigner wird zwar nicht das von der Aktivitätsmethode verwendete Hashtable-Element verwendet, aber der zurückgegebene Wert kann in einer Regel verwendet werden. In diesem Fall muss ein FieldBind-Element dafür im RuleDesigner-Element vorhanden sein. Beispielsweise könnten Sie dem Sentence-Attribut des Action-Elements "Result: %4" hinzufügen und anschließend wie folgt ein zusätzliches FieldBind-Element hinzufügen: <FieldBind Id="4" Field="result" DesignerType="Text" Text="ID of new list"/>.

    VorsichtVorsicht

    Fügen Sie kein FieldBind-Element für Parameter hinzu, auf die in Sentence nicht verwiesen wird. Dadurch wird zwar nicht verhindert, dass die Workflowaktion bereitgestellt wird, aber die Benutzer erhalten einen nicht behebbaren Fehler, wenn Sie die Aktion in einem Workflow zu verwenden versuchen.

  7. Das Workflowmodul versucht, nicht Ihren eigenen Code, sondern Ihre benutzerdefinierte Aktivitätsmethode aufzurufen. Deshalb müssen Sie dem Workflowmodul Anweisungen zu den Parametern dieser Methode geben. Fügen Sie dem Action-Element ein Parameters-Element (WorkflowActions) hinzu.

  8. Der erste definierte Parameter ist immer der obligatorische SPUserCodeWorkflowContext-Parameter, und das Markup dafür ist immer identisch. Das Markup ist im folgenden Beispiel dargestellt.

    <Parameters>
      <Parameter Name="__Context" Type="Microsoft.SharePoint.WorkflowActions.WorkflowContext, Microsoft.SharePoint.WorkflowActions" Direction="In" DesignerType="Hide" />
    </Parameters>
    

    Beachten Sie, dass als Typ Microsoft.SharePoint.WorkflowActions.WorkflowContext festgelegt ist, nicht Microsoft.SharePoint.UserCode.SPUserCodeWorkflowContext. Dies liegt daran, dass das Workflowmodul ein SPUserCodeWorkflowContext-Objekt von Eigenschaftswerten in einem WorkflowContext-Objekt generiert.

  9. Fügen Sie ein weiteres Parameter-Element für jedes der FieldBind-Elemente hinzu, die Sie dem RuleDesigner-Element hinzugefügt haben. Das Name-Attribut des Parameter-Elements muss mit dem Wert des Field-Attributs des entsprechenden FieldBind-Elements übereinstimmen. Im Folgenden wird das vorherige Beispiel fortgesetzt.

    <Parameters>
      <Parameter Name="__Context" Type="Microsoft.SharePoint.WorkflowActions.WorkflowContext, Microsoft.SharePoint.WorkflowActions" Direction="In" DesignerType="Hide" />
      <Parameter Name="listType" Type="System.String, mscorlib" Direction="In" DesignerType="TextBox"/>
      <Parameter Name="listTitle" Type="System.String, mscorlib" Direction="In" DesignerType="TextBox" />
      <Parameter Name="listDescription" Type="System.String, mscorlib" Direction="In" DesignerType="TextBox" />
    </Parameters>
    
    HinweisHinweis

    Wenn ein FieldBind-Element für den zurückgegebenen Wert vorhanden ist, ist auch ein Parameter-Element dafür erforderlich. Der Wert des Direction-Attributs von Parameter lautet "Out"; beispielsweise <Parameter Name="result" Type="System.String, mscorlib" Direction="Out" DesignerType="ParameterNames" />

  10. Erstellen und packen Sie die Lösung, und stellen Sie das SharePoint-Lösungspaket (WSP-Datei) den Websitesammlungsadministratoren zur Verfügung.

So stellen Sie die Workflowaktion in einer Websitesammlung bereit

  • Die Lösung mit eingeschränkter Sicherheitsstufe wird vom Websitesammlungsadministrator installiert und bereitgestellt, der die Lösung im Lösungskatalog der Websitesammlung bereitstellt. Dieser Vorgang besteht aus zwei Schritten.

    1. Der Websitesammlungsadministrator lädt das Lösungspaket in den Lösungskatalog hoch.

    2. Der Websitesammlungsadministrator stellt das Paket bereit, was für Lösungen mit eingeschränkter Sicherheitsstufe als "Aktivierung" bezeichnet wird. Mit diesem Schritt werden automatisch alle Features des Pakets aktiviert. Falls Lösungsvalidierer für die Websitesammlung registriert sind, werden sie ebenfalls in der Aktivierungsphase (Bereitstellungsphase) ausgeführt.

    Wenn die Lösung die Validierung besteht und nicht von einem Farmadministrator blockiert wurde, kann sie in der Websitesammlung verwendet werden.

So testen Sie die Workflowaktion

  1. Öffnen Sie eine Website, in der das Feature in Ihrer Lösung aktiviert wurde.

  2. Klicken Sie im Menü Websiteaktionen auf In SharePoint Designer bearbeiten.

  3. Erstellen Sie einen Workflow, der die neue Workflowaktion verwendet, und testen Sie sie. In den folgenden Schritten wird die Workflowaktion im fortlaufenden Beispiel getestet.

    1. Nachdem Sie die Website (die eine Ankündigungsliste enthält) in SharePoint Designer geöffnet haben, klicken Sie im Navigationsbereich auf Workflows.

    2. Klicken Sie auf dem Menüband auf Listenworkflow, und wählen Sie in der Dropdownliste Ankündigungen aus.

    3. Geben Sie im Dialogfeld Listenworkflow erstellen im Feld Name die Zeichenfolge Return From Trade Show ein, und klicken Sie dann auf OK.

    4. Klicken Sie in der Workflowentwurfsoberfläche auf dem Menüband auf Bedingung, und wählen Sie in der Dropdownliste Wenn das aktuelle Elementfeld gleich Wert ist aus. Die Bedingung Wenn Feld gleich Wert wird in Schritt 1 angezeigt.

    5. Klicken Sie auf den Link Feld, und wählen Sie im Dropdownlistenfeld Titel aus.

    6. Klicken Sie auf den Link gleich, und wählen Sie im Dropdownlistenfeld endet mit aus.

    7. Klicken Sie auf den Link Wert, und geben Sie trade show in das Textfeld ein, das geöffnet wird. Drücken Sie die EINGABETASTE.

    8. Klicken Sie auf den Bereich (Beginnen Sie mit der Eingabe...) unterhalb der Bedingung, damit sie den Fokus erhält.

    9. Klicken Sie auf dem Menüband auf Aktion. Ihre neue Kategorie Contoso Actions wird in der Dropdownliste sowie die neue Aktion Create a list in der Liste angezeigt.

    10. Wählen Sie Create a list aus. Der "Satz" (Sentence), den Sie für das Action-Element definiert haben, wird angezeigt.

    11. Klicken Sie auf den Link Listentyp, und geben Sie Contacts in das Textfeld ein, das geöffnet wird. Drücken Sie die EINGABETASTE.

    12. Klicken Sie auf den Link Listenname, und klicken Sie auf die Schaltfläche mit den drei Punkten (...), um das Dialogfeld Zeichenfolgengenerator zu öffnen.

    13. Geben Sie Contacts met at (mit einem Leerzeichen am Ende) in das Textfeld ein.

    14. Klicken Sie auf die Schaltfläche Nachschlagevorgang hinzufügen oder ändern. Dadurch wird das Dialogfeld Nachschlagen für Zeichenfolge geöffnet.

    15. Wählen Sie in der Dropdownliste Datenquelle die Option Aktuelles Element aus.

    16. Wählen Sie in der Dropdownliste Quellenfeld die Option Titel aus.

    17. Klicken Sie auf OK, um das Dialogfeld zu schließen, und klicken Sie dann erneut auf OK, um das Dialogfeld Zeichenfolgengenerator zu schließen.

    18. Klicken Sie auf den Link Beschreibung, und klicken Sie auf die Schaltfläche mit den drei Punkten (...), um das Dialogfeld Zeichenfolgengenerator zu öffnen.

    19. Geben Sie These are contacts we made at the (mit einem Leerzeichen am Ende) in das Textfeld ein.

    20. Klicken Sie auf die Schaltfläche Nachschlagevorgang hinzufügen oder ändern. Dadurch wird das Dialogfeld Nachschlagen für Zeichenfolge geöffnet.

    21. Wählen Sie in der Dropdownliste Datenquelle die Option Aktuelles Element aus.

    22. Wählen Sie in der Dropdownliste Quellenfeld die Option Titel aus.

    23. Klicken Sie auf OK, um das Dialogfeld zu schließen, und klicken Sie dann erneut auf OK, um das Dialogfeld Zeichenfolgengenerator zu schließen.

      Ihre Aktion sollte nun Create a Contacts list named Contacts met at [%Current Item:Title%] lauten und deren Beschreibung wie folgt aussehen: These are contacts we met at [%Current Item:Title%].

    24. Klicken Sie auf dem Menüband auf Auf Fehler prüfen, und beheben Sie gemeldete Fehler.

    25. Klicken Sie auf dem Menüband auf Workfloweinstellungen.

    26. Aktivieren Sie im Bereich Startoptionen das Kontrollkästchen Workflow automatisch starten, wenn ein Element erstellt wird.

    27. Klicken Sie auf dem Menüband auf Speichern.

    28. Klicken Sie auf dem Menüband auf Veröffentlichen.

    29. Schließen Sie SharePoint Designer.

    30. Öffnen Sie in einem Browser die Website, in der Sie den Workflow veröffentlicht haben, und navigieren Sie zur Liste Ankündigungen.

    31. Klicken Sie auf Neue Ankündigung hinzufügen.

    32. Geben Sie als Titel die Zeichenfolge Berlin trade show ein, und klicken Sie dann auf Speichern.

    33. Aktualisieren Sie die Seite mit der Liste Ankündigungen. Die neue Spalte Return from Trade Show wird in der Liste angezeigt, und der Wert für das neue Element lautet In Bearbeitung oder Abgeschlossen.

    34. Aktualisieren Sie die Seite so lange, bis Abgeschlossen für den Workflow Return from Trade Show angezeigt wird.

    35. Klicken Sie im Navigationsbereich auf Listen oder Gesamter Websiteinhalt. Die neue Liste Contacts met at Berlin trade show mit der Beschreibung These are contacts we made at the Berlin trade show ist nun vorhanden.

Siehe auch

Konzepte

Möglichkeiten und Einschränkungen von Sandkastenlösungen

Einschränkungen bei Sandkastenlösungen

Architektur von Sandkastenlösungen