Dialogabläufe

Die Modellierung von Dialogabläufen erfolgt mit einer Untermenge von BPMN, wobei insbesondere Sub-Prozesse, Benutzer-Tasks, und Skript-Task verwendet werden können. Die folgende Abbildung zeigt das Beispiel des modellierten Dialogablaufs zum Ausleihen von Büchern. Hier ist erkennbar, dass das Hauptziel von Dialogabläufen das Spezifizieren des Ablaufs von Dialogschritten ist.

Exemplarisch modellierter Dialogablauf

Am modellierten Dialogablauf ist ersichtlich, dass zwischen den einzelnen Aktivitäten die Übergabe mithilfe von Datenobjekten erfolgt. Beispiel: IdentifizierenOutput, AusleiheBestaetigenInput, AusleiheBestaetigenOutput, etc. Je nach Aktivitätstyp wird das Verhalten über entsprechende Konfigurationsdialoge spezifiziert. Im Fall eines Benutzer-Tasks beispielsweise wird, wie im Folgenden dargestellt, der Dialogschritt BuecherAuswaehlenStep angebunden.

Spezifikationsdialog zur Anbindung eines Dialogschritts in einem Dialogablauf

Die Anbindung von Code über eine Code-Aktivität (= Skript-Task in BPMN) erfolgt äquivalent. Hier kann der Code direkt wie in der nachfolgenden Abbildung oder per Code-Behind-Dateien angeschlossen werden. Das folgende Beispiel zeigt Code, der einen Service aufruft.

Anmerkung: Das Editieren ist per WebModeler oder Visual Studio möglich.

Editieren einer lokalen Code-Aktivität

Ein DialogFlow wird in XML gespeichert. Der grundlegende Rahmen hat dabei folgende Gestalt:

<DialogFlow ...
  Namespace="Schleupen.CS.PI.PR.Tests.Navigation20"
  Name="SimpleFlow"
  Version="1.0.0.0"
  Title="Test Standard-Navigation"
  Icon="SimpleNavigationFlowTest_Step1.png">
  ...
  <object id="wmid-70faf9a2-a7de-4a1c-83c5-4fa59a891396" type="DialogFlowEditorNamespace.LocalCodeActivity" guid="70faf9a2-a7de-4a1c-83c5-4fa59a891396">
    ...
    <property name="script" type="string" value="LeiheAus();" />
	...
  </object>
  ...
</DialogFlow>

Der Code wie in vorstehender Abbildung direkt in einer Code-Aktivität oder Dialogschritt sollte nur zur Anbindung von C#-Code erfolgen, der in Code-Behind-Dateien codiert ist. Hintergrund ist, dass dieser Code im XML platziert wird und die Testbarkeit somit schwieriger und wartungsintensiver wird! Zudem verletzt dies die Prinzipien im Falle von Dialogschritten des MVVM-Musters wie unten beschrieben.

Wie im Falle von Workflows wird hieraus Code erzeugt (Schritt 1), anschließend kompiliert und die resultierenden Assemblys in ein Deployment-Paket verpackt (Schritt 2).

Hauptschritte zur Erstellung eines Pakets einer GP-Komponente

Der generierte Code im Beispiel für die lokale Code-Aktivität Bücher ausleihen hat folgende Gestalt:

public virtual void CodeActivity_WithName_ScriptTask_9_Bcherausleihen()
{
	var sessionTokenScope = new Schleupen.CS.PI.PR.Engine.Code.RuntimeCompilation.SessionTokenScope(this.SessionToken);
	try
	{
		LeiheAus();
	}
	finally
	{
		if ((sessionTokenScope != null))
		{
			sessionTokenScope.Dispose();
		}
	}
}

Die Anbindung von Code in einer Code-Aktivität ist ein eher seltener Fall!

Anzumerken bleibt noch, dass Dialogabläufe auch von anderen Dialogabläufen aufgerufen werden können. Hierzu werden Contracts zur Übergabe von Dialogablauf zu Dialogablauf verwendet, um eine notwendige Entkopplung zu erhalten. Die dafür eingesetzten und implementierten Bibliotheken heißen bei Schleupen ContractLibs.

Cookie Consent mit Real Cookie Banner