• home
    • news & events
    • blog
  • über uns
    • projekte und referenzen
    • partner
    • produkte & technologien
    • offene jobs / stellen
  • dienstleistungen & services
    • software design & architektur
    • software entwicklung
    • beratung / consulting
    • training, kurse und workshops
  • angebote
    • quick-starts
    • trainings, schulungen & kurse
    • workshops
  • kontakt
Wir bieten SharePoint und .NET
Kompetenz, Erfahrung und Know-How:
"1stQuad guaranteed."
Diesen Blog abonnieren
Subscribe in NewsGator Online Add to My AOL
Add to Google Reader or Homepage Add to netvibes

Aktuelle Posts

State Machine Workflow mit InfoPath Formularen für SharePoint 2010 – Teil 8
SharePoint 2010 / PowerShell: Mehrsprachige Taxonomien importieren
State Machine Workflow mit InfoPath Formularen für SharePoint 2010 – Teil 7
State Machine Workflow mit InfoPath Formularen für SharePoint 2010 – Teil 6
State Machine Workflow mit InfoPath Formularen für SharePoint 2010 – Teil 5

Archiv

August 2010 (2)
Juli 2010 (11)
Juni 2010 (13)
Mai 2010 (11)
April 2010 (4)
März 2010 (6)
Februar 2010 (2)
Januar 2010 (6)
Dezember 2009 (4)
November 2009 (13)
Oktober 2009 (17)
September 2009 (2)
Juli 2009 (2)
März 2009 (2)
Januar 2009 (1)

Als Microsoft Certified Partner bietet 1stQuad Solutions SharePoint und .NET Kompetenz, Erfahrung und Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Zürich, Bern, Basel, Schweiz sowie Deutschland und Östereich.
Als Spezialist für kleine und mittlere Unternehmungen (KMU) bietet 1stQuad Solutions SharePoint und .NET Produkt- und Projekt-Kompetenz, -Erfahrung und -Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Zürich, Bern, Basel, Schweiz sowie Deutschland und Östereich.
Mit Kentico CMS bietet 1stQuad Solutions neben SharePoint und .NET CMS-Produkt- und Projekt-Kompetenz, -Erfahrung und -Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Zürich, Bern, Basel, Schweiz sowie Deutschland und Östereich.
© 2010 1stQuad Solutions
Alle Rechte vorbehalten
> Impressum
Wir bieten Microsoft SharePoint und .NET Projekt- und Produkt-Know-how, Kompetenz und Erfahrung für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Zürich, Bern, Basel, Schweiz sowie Deutschland und Östereich.

Blog > Juli 2010

State Machine Workflow mit InfoPath Formularen für SharePoint 2010 – Teil 3

Im dritten Teil der Workflow Serie geht es um die Formulare zur Zuweisung und zum Starten des Workflows.

Veröffentlicht am 28.07.2010 00:39:32 von Reiner Ganser mit 0 Kommentar(en)

Teil 3: Zuweisungs und Start-Formular für den Workflow erstellen

 Diesen Blog-Post als PDF herunterladen

   Sourcecode
 

Eine Neuerung beim Erstellen von Workflows für SharePoint 2010 ist die automatisierte Erstellung von Zuweisungs- und Startformularen in Visual Studio 2010. Es werden dabei ASP.NET Seiten verwendet. Hierzu sind bereits 2 Elementvorlagen in Visual Studio vorhanden. Um das Zuweisungsformular zu erzeugen geht man wie folgt vor:
Rechte Maustaste auf den Workflow Ordner (in unserem Fall SMApproval) und Auswahl von Add -> New Item

 
Danach kann man die Vorlage Workflow Association Form auswählen. Wir verwenden den Namen WorkflowAssociation.aspx für unser Formular.

 
In der ASPX Seite kann man nun seine Controls hinzufügen. Wir verwenden ein einfaches Formular mit 2 Textboxen (eine für die Zuweisung des Genehmigers und eine für die Anweisungen für den Genehmiger) und 2 Schaltflächen. Der Markup innerhalb des Placeholders Main in der Datei WorkflowAssociation.aspx ändern wir wie folgt ab:

<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    Genehmiger:&nbsp;<asp:TextBox ID="txtApprover" runat="server" Width="200px" />
    <br /><br />
    Anweisungen:<br />
    <asp:TextBox ID="txtInstructions" runat="server" TextMode="MultiLine"
                 Height="100px" Width="400px" />
    <br /><br />
    <asp:Button ID="AssociateWorkflow" runat="server" 
                On-Click="AssociateWorkflow_Click" Text="Workflow zuweisen" />
    &nbsp;&nbsp;&nbsp;
    <asp:Button ID="Cancel" runat="server" Text="Cancel" OnClick="Cancel_Click" />
</asp:Content>


In der Datei WorkflowAssociation.aspx.cs wird die Methode GetAssociationData() verwendet, um die Zuweisungsdaten zurückzuliefern und in den Zuweisungsdaten der Liste zu speichern. Wer sich genauer dafür interessiert, wie die Zuweisung erfolgt, findet in der Methode PopulateAssociationParams() die Antwort. Dort wird die Methode GetAssociationData() aufgerufen, um die Daten aus der Form zu lesen. Dies ist auch die Methode, die wir implementieren müssen. Da diese nur einen Text zurückliefern kann und wir in unserem Beispiel mehrere Werte zurückliefern wollen, verpacken wir das Ganze in XML. In unserem Beispiel wird der Einfachheit halber der folgende Code verwendet:

private string GetAssociationData()
{
   string retVal = string.Format("<associationData><approver>{0}</approver><instructions><![CDATA[{1}]]></instructions></associationData>",
   txtApprover.Text, txtInstructions.Text);
   return retVal;
}

Damit ist das Zuweisungsformular erst mal fertig. Ich verzichte an dieser Stelle auf den Einsatz des People Picker Controls von SharePoint. Man könnte dieses aber natürlich einbinden.
In gleicher Weise kann man nun ein Startformular erstellen. In diesem Fall ist die Element Vorlage Workflow Initiation Form auszuwählen. In unserem Beispiel verwenden wir den Namen WorkflowInitiation.aspx.
Das Markup sieht in diesem Fall sehr ähnlich aus wie beim Zuweisungsformular:

<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    Genehmiger:&nbsp;<asp:TextBox ID="txtApprover" runat="server" Width="200px" />
    <br /><br />
    Anweisungen:<br />
    <asp:TextBox ID="txtInstructions" runat="server" TextMode="MultiLine" 
                 Height="100px" Width="400px" />
    <br /><br />
    <asp:Button ID="StartWorkflow" runat="server" OnClick="StartWorkflow_Click" 
                Text="Workflow starten" />
    &nbsp;&nbsp;&nbsp;
    <asp:Button ID="Cancel" runat="server" Text="Abbrechen" OnClick="Cancel_Click" />
</asp:Content>

Und der Code ist ebenfalls sehr ähnlich:

private string GetInitiationData()
{
   string retVal =  string.Format("<initiationData><approver>{0}</approver><instructions><![CDATA[{1}]]></instructions></initiationData>",
   txtApprover.Text, txtInstructions.Text);
   return retVal;
}


Bevor wir den Workflow im Workflow Designer weiter modellieren, sollten wir den Workflow erst nochmal ausrollen und mit den Formularen testen.

Eine Frage ist allerdings noch offen: Wie kann man die Daten, welche man bei der Zuweisung des Workflows angegeben hat, in das Startformular übernehmen? Um dies zu bewerkstelligen fügen wir etwas Code zur Page_Load() Methode hinzu, welcher die Zuweisungsdaten (SPWorkflowAssociation) wieder lädt, die XML Daten entpackt und in die Felder schreibt. Die Page_Load() Methode sieht damit wie folgt aus:

protected void Page_Load(object sender, EventArgs e)
{
   InitializeParams();

   try
   {
      // Optionally, add code here to pre-populate your form fields.
      SPWorkflowAssociation association = this.workflowList.WorkflowAssociations[new Guid(this.associationGuid)];
      XmlDocument associationDoc = new XmlDocument();
      associationDoc.LoadXml(association.AssociationData);

      XmlNode approverNode = associationDoc.SelectSingleNode("//approver");
      if (null != approverNode)
      {
         txtApprover.Text = approverNode.InnerText;
      }
      XmlNode instructionNode = associationDoc.SelectSingleNode("//instructions");
      if (null != instructionNode)
      {
         txtInstructions.Text = instructionNode.InnerText;
      }
   }
   catch (Exception ex) { }
}

Bevor wir den Workflow im Workflow Designer weiter modellieren, sollten wir den Workflow erst nochmal ausrollen und mit den Formularen testen.
Hierzu wechselt man In die beim Anlegen des Projektes angegebenen Dokumentenbibliothek. Dort findet man im Reiter Bibliothek den Punkt Workfloweinstellungen:


Hier sieht man die momentan zugeordneten Workflows:


Nach der Standardmaske zur Auswahl des gewünschten Workflows und der Startart:


erscheint unser Zuweisungsformular, in welchem wir Parameter forgeben können, die bei jedem Start des Workflows schon vorausgefüllt sind:


Danach können wir wieder den Workflow an einem Dokument starten und erhalten dann das Startformular des Workflows (WorkflowInitation.aspx). Die Daten aus der Zuweisung werden dabei  übernommen und können noch abgeändert werden:

Unsere Zuweisungs- und Startformulare scheinen also zu funktionieren.

Hinweise zum Troubleshooting

An dieser Stelle kann es bereits zu Fehlern kommen, die zumeist aus der Verbindung zwischen HTML Markup und Code kommen. Vor allem wenn man manuelle Änderungen am Markup vornimmt, wird die zugehörige Codedatei nicht immer entsprechend angepasst (z.B. Event Handler eines Buttons ist im Markup anders benannt, als im Code). Ruft man dann ein Formular auf, erhält man folgende Fehlermeldung:

 
Aus Erfahrung weiss man zumeist, dass man die CustomErrors in der web.config auf Off stellen muss. In diesem Fall hilft es allerdings nichts, wenn man versucht, diese Änderung in der web.config der Webanwendung durchzuführen, da im Layouts Verzeichnis con SharePoint (C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS) eine weitere web.config liegt, in der man die CustomErrors ausschalten muss.

<customErrors mode="Off" />

Nach dem Ändern der Einstellung, bekommt dann auch prompt die eigentliche Fehlermeldung angezeigt:

 
Die Einstellung macht natürlich nur Sinn in einer Entwicklungsumgebung. In einer Produktionsumgebung ist der Benutzer wahrscheinlich eher verwirrt, wenn er diese Fehlermeldung sieht.
Im nächsten Teil geht es mit dem weiteren Design des Workflows im Workflow Designer von Visual Studio.NET 2010 weiter.

 

Kommentar
Dieser Blog-Eintrag wurde noch nicht kommentiert.
Kommentar hinterlassen



 Security code
Zurück, Seite drucken