Design des Workflows
Nachdem der Workflow geöffnet wurde, wird dieser auf der Registerkarte Designer grafisch dargestellt und bearbeitet. Um den Workflow und dessen Elemente zu bearbeiten, müssen Sie das entsprechende Element markieren; anschließend können Sie im Property-Grid oder über das Context-Menu Einstellungen ändern. Es gibt zum einen den Workflow selber, der markiert wird, in dem Sie auf den Hintergrund klicken und die Workflow-Elemente; das können Forms oder andere Workflows sein.
Weiterhin gibt es noch Links, welche die einzelnen Workflow-Elemente verbinden und Branches und Switches, mit denen es möglich ist, Links zu verzweigen und mit Bedingungen zu versehen.
Um neue Workflow-Elemente in einem Workflow zu erstellen, müssen Sie ein Form oder einen Workflow per Drag & Drop auf die Design-Fläche ziehen. Wie was auf den Workflow gezogen wird, ist in den folgenden Abschnitten beschrieben.
Workflow-Properties
DesignSize
Größe des Design-Bereiches. Dieser Wert kann in den Properties nicht geändert werden. Um die Größe zu ändern, kann der Design-Bereich markiert und mit der Maus vergrößert oder verkleinert werden.
Name
Bezeichnung des ausgewählten Workflows.
StartInstance
(Workflow-Form) Gibt an, welches Form beim Start des Workflows angezeigt werden soll.
Alternativ können Sie in den Properties des Workflow-Forms IsStartinstance auf True setzen.
StartMethod
Gibt an, welche Form-Methode aufgerufen werden soll, wenn beim Start des Workflows ein Form angezeigt werden soll. Es werden die Methoden des unter StartInstance eingestellten Forms angeboten.
Wird der Workflow so aufgerufen, dass gezielt ein Form mit einer Methode gestartet werden soll, ist diese Angabe hier hinfällig.
IsStartable
(True, False) Wollen Sie den ausgewählten Workflow zu einer Startinstanz für Ihre Applikation machen, müssen Sie hier True auswählen. Default: False.
SafeInitialize
(True, False) Gibt an, ob beim Start der Anwendung der Safe-Initialize-Modus aktiviert werden soll. Diese Einstellung kann nur an einem Start-Workflow vorgenommen werden.
Der Safe-Initialize-Modus dient dazu, z.B. in einer Update-Situation Fehlermeldungen zu unterbinden. Über this.Global.SafeInitializing
kann der Status dieses Modus abgefragt werden. Der Modus muss mithilfe der Funktion this.Global.EndSafeInitialize()
nach dem Start der Anwendung zurückgesetzt werden.
BaseFullName
Dieses Property ist für spätere Erweiterungen vorgesehen und zurzeit ohne Funktion.
CheckedOutDateString
(Schreibgeschützt) Datum des letzten Checkouts.
CheckedOutUserName
(Schreibgeschützt) Benutzer, der den Workflow zuletzt bearbeitet und eingecheckt hat. Wenn Sie den Workflow gerade ausgecheckt haben, steht Ihr Benutzername in diesem Feld.
Workflow-Form
Die Forms werden in der Registerkarte Design auf der linken Seite des Fensters angeboten und können von dort aus in den Workflow gezogen werden.
Ein Form kann als Start-Instance und/oder Entrance-Instance definiert werden.
Wenn ein Workflow gestartet wird, gibt es zwei Möglichkeiten, wie entschieden wird, welches Form aufgerufen werden soll:
Beim Aufruf wird nichts angegeben, d.h. es wird nur der Workflow gestartet, ohne dass ihm gesagt wird, was er machen soll. Dann wird das Form gestartet, das als Start-Instance definiert ist.
Beim Aufruf des Workflows wird gesagt, welches Form gestartet werden soll. Das lässt sich aber nur mit Forms machen, die als Entrance-Instance definiert sind. (Weitere Einzelheiten dazu sind im Workflow-Link erklärt.)
Wenn Sie das erste Form in den Workflow ziehen, wird es automatisch als Start-Instance definiert.
Workflow-Form Properties
Die Eigenschaften des Workflow-Elements werden im Property-Grid definiert.
Frame
Gibt an, in welchem Frame das Fenster angezeigt werden soll. Es werden hier alle Frames angezeigt, die im Frameset in der Configuration definiert sind. Wird das Form als modaler Dialog angezeigt, hat diese Einstellung keine Auswirkung.
(siehe Property IsModal)
IsEntranceInstance
(True, False)
Gibt an, ob es sich bei diesem Form um eine Entrance-Instance handelt. Forms, die als Entrance-Instance definiert sind, können beim Aufruf des Workflows direkt angesprochen werden. Andere Forms können nur innerhalb des Workflows, indem sie sich befinden, angesprochen werden.
IsModal
(true, false)
Gibt an, ob das Form als modaler Dialog geöffnet werden soll.
Wird ein Form von einem anderen modalen Dialog geöffnet, wird dieses immer modal angezeigt – egal was bei IsModal angegeben ist.
IsStartInstance
(True, False)
Gibt an, ob das Form eine Start-Instance sein soll. Wird der Workflow geöffnet und kein Form direkt angesprochen, wird das Form geöffnet, das als Start-Instance definiert ist.
Warning
Es kann maximal ein Form als Start-Instance gekennzeichnet sein.
Location
(schreibgeschützt) Position des Forms innerhalb des Workflows. In den Properties kann dieser Wert nicht verändert werden. Um die Position zu verändern, muss das Form im Design-Panel mit der Maus verschoben werden.
Name
Name des Workflow-Elements. Wenn das Form in den Workflow gezogen wird, wird der Name des Forms vorbelegt.
Size
(schreibgeschützt) Größe des Forms im Workflow. In den Properties kann der Wert nicht verändert werden. Um die Größe des Forms zu ändern, muss diese im Designer mit der Maus geändert werden.
BaseFullName
Dieses Property ist für spätere Erweiterungen vorgesehen und zurzeit ohne Funktion.
Workflow-Forms Events
Im Event-Teil des Property-Grids können die Workflow-Events des Forms mit den Workflow-Events des Workflows, in dem sich das Form befindet, verbunden werden. Das ist aus folgendem Grund notwendig: Wenn dieser Workflow in einen anderen Workflow eingebunden wird und dort wollen Sie auf ein Workflow-Event aus dem Form reagieren, dann ist es notwendig dieses Form-Event nach außen weiter zu reichen. Das passiert hier in dieser Zuordnung.
In dieser Liste werden alle Workflow-Events des Forms aufgelistet.
FiredEvent
Soll das Workflow-Event eines Forms im Workflow selber nach außen angeboten werden, muss das Event des Forms mit einem Event aus dem Workflow verbunden werden.
Diese Zuordnung kann in FiredEvent vorgenommen werden.
Workflow im Workflow
Die Workflows werden in der Registerkarte Namespaces angeboten (dort wo sie auch verwaltet werden). Von dort aus können sie per Drag & Drop in die Design-Fläche gezogen werden.
Workflow im Workflow Properties
Die Eigenschaften des Workflow-Elements werden auf der Registerkarte Property definiert.
IsEntranceInstance
(true, false) Gibt an, ob das Workflow-Element als Entrance-Instance fungieren soll. Wenn ja, dann ist es möglich diesen Workflow (das Element) von außen direkt anzusprechen (analog zu den Forms).
Location
(schreibgeschützt) Position des Workflows innerhalb des Workflows. In den Properties kann dieser Wert nicht verändert werden. Um die Position zu verändern, ist es erforderlich diesen Workflow im Design-Panel mit der Maus zu verschieben.
Name
Name des Workflow-Elements. Dieser Wert wird automatisch mit dem Namen des Workflows, der hineingezogen wird, vorbelegt.
Size
(schreibgeschützt) Größe des Workflows im Workflow. In den Properties kann der Wert nicht verändert werden. Um die Größe des Workflows zu ändern, wird diese im Designer mit der Maus geändert.
BaseFullName
Dieses Property ist für spätere Erweiterungen vorgesehen und zurzeit ohne Funktion.
Workflow im Workflow Events
Auch Workflows können wie die Forms Workflow-Events besitzen. Wenn diese nach außen weitergereicht werden sollen, funktioniert das genau wie bei den Forms. (Workflow-Forms Events)
Link
Ein Link dient zum Verbinden zweier Workflow-Elemente. Er hat als Ausgangspunkt ein Workflow-Event von einem Workflow-Element. Als Ziel hat er ein anderes Workflow-Element.
Auf der Registerkarte Design wird der Link angeboten. Ziehen Sie ihn per Drag & Drop auf das Ausgangs-Element. Anschließend ziehen Sie das Ende des Pfeils auf das Ziel-Element.
Es öffnet sich ein Dialog, in dem Sie genau einstellen können, wie sich der Link verhalten soll.
Sie können diesen Dialog auch später wieder öffnen, um Änderungen am Link durchzuführen. Im Context-Menu des Links wird dazu der Befehl Properties angeboten.
Link-Properties
Name
Name des Links. Dieser wird immer mit Link1 vorbelegt.
Source
(schreibgeschützt) Name des Ausgangs-Elements.
SourceEvent
In dieser Combobox werden alle Workflow-Events des Ausgangs-Elements angeboten. Sie müssen hier auswählen, auf welches der Link reagieren soll.
Container
In dieser Combobox werden alle FormContainer- und DashboardContainer-Steuerelemente des Quellformulars angezeigt. Wird ein Wert ungleich null
eingestellt, so wird das Zielformular in diesem Container erstellt und angezeigt. In diesem Fall ist jedoch keine automatische Fokussierung möglich.
Target
Gibt das Ziel-Element an. Das kann hier nachträglich noch geändert oder auch genauer angegeben werden. Die Combobox zeigt alle Workflow-Elemente des Workflows an. Zusätzlich werden für jeden Workflow die als Entrance-Instance definierten Elemente angezeigt.
Sie können z.B. gezielt ein Form ansprechen. Wenn Sie das machen, gibt es auch die Möglichkeit an dem Form eine Methode anzustoßen.
Target Method
Ist in Target ein Form angegeben, werden in der Combobox alle public-Methoden des Forms angeboten und Sie können eine Methode auswählen, die angestoßen werden soll.
Hat die Methode Parameter, werden diese in der Tabelle unter der Methode aufgelistet. Es wird der Name das Parameters und der Typ des Parameters angezeigt.
In der dritten Spalte geben Sie an, welcher Wert übergeben werden soll. In der Combobox werden alle public Membervariablen des Forms mit deren Properties angegeben. Sie können einen Wert aus der Liste angeben.
Wenn es sich bei dem Parameter um eine Zahl oder einen String handelt, können Sie auch bestimmte Werte angeben. Z.B.
Löschen können Sie einen Link über das Context-Menu des Links mit dem Befehl Delete.
InstanceID
Um mehrere Instanzen eines Formulars anlegen zu können, muss am Quellformular ein Property vom Datentyp string oder FSstring angelegt werden. Dieses Property enthält die Instanz ID des nächsten Formulars, welches mittels Workflow-Event erstellt wird. Genau dann, wenn diese Instanz ID beim Aufruf des Workflow Events mit keiner bereits existierenden übereinstimmt, wird eine neue Instanz erzeugt.
Das Property, welches die neue ID darstellt, wird in diesem Feld innerhalb der Workflow-Link Eigenschaften angegeben. Wird das Feld leer gelassen, so gilt die Instanz-ID des Workflows.
Create Target
Nur wenn dieser Wert auf „true“ steht wird für den Fall, dass das Formular (unter Berücksichtigung der InstanceID) noch nicht instanziiert wurde, ein neues Formular erzeugt.
AutoFocus
Steht dieser Wert auf true
, so wird der Fokus nach Aufruf des Workflow-Events in das Zielformular gesetzt.
Branch
Mit einem Branch können Sie einen Link mit einer Bedingung versehen oder verzweigen.
Ein Branch hat immer einen Link als Eingang und einen oder zwei Links als Ausgang. Welcher der Ausgänge aufgerufen wird, wird mit der Bedingung im Branch ermittelt. Die Bedingung ist ein boolscher Ausdruck. Je nachdem, wie das Ergebnis dieses boolschen Ausdrucks ist, wird der True-Zweig oder der False-Zweig aufgerufen. Indem nur einer dieser beiden Zweige verwendet wird, können Sie einen Link mit einer Bedingung erstellen.
Einen Branch binden Sie ein, indem Sie ihn per Drag & Drop in den Workflow ziehen. Das Symbol befindet sich im unteren Teil der Registerkarte Design.
Anschließend erstellen Sie einen Link von der Quelle zum Branch.
Über das Context-Menu des Branchs können Sie den Property-Dialog öffnen. In ihm wird die Bedingung festgelegt.
Im linken Teil des Fensters befinden sich alle Properties, die das Quellobjekt anbietet. Aus diesen Properties kann die Bedingung zusammengesetzt werden. Darunter befindet sich eine Liste der Operatoren. Mit einem Doppelklick in eine der beiden Listen wird der entsprechende Text in die Bedingung eingefügt. Der Text wird dabei an die Stelle des Cursors gesetzt.
Es muss eine Bedingung herauskommen, die von .NET verarbeitet werden kann. Es wird später daraus folgender Code erstellt:
if (Bedingung)
{ True-Link }
else
{ False-Link }
Wenn die Bedingung fertiggestellt ist, können die Links vom Branch zum Ziel (zu den Zielen) definiert werden.
Dazu ziehen Sie einen neuen Link auf den Branch und den Pfeil des Links auf das Ziel. Es öffnet sich wie bereits beschrieben der Property-Dialog des Links. Als Source-Event kann jetzt true
oder false
ausgewählt werden. Es können jetzt noch weitere Links mit true oder false definiert werden. Beim Ausführen werden dann, wenn die Bedingung wahr ist, alle Links aufgerufen, die als Source-Event true
besitzen und wenn die Bedingung falsch ist, alle Links, die als Source-Event false
haben.
Wird am Ziel eine Target-Method mit Parameter aufgerufen, können dieser Methode Werte aus der Quelle vor dem Branch mitgegeben werden.
Switch
Mit einem Switch kann ein Link mehrfach verzweigt werden.
Ein Switch hat einen Link als Eingang und kann mehrere Links als Ausgang besitzen. Im Switch wird ein Property des Quell-Elements ausgewertet. Je nachdem, welchen Wert dieses Property besitzt, wird einer der Ausgänge angesprochen.
Einen Switch binden Sie ein, indem Sie Ihn per Drag & Drop in den Workflow ziehen. Das Symbol befindet sich im unteren Teil der Registerkarte Design.
Anschließend müssen Sie einen Link vom Quell-Element in den Switch ziehen.
Über das Context-Menu des Switches gelangen Sie in einen Dialog, in dem Sie die Einstellungen des Switches festlegen können.
Unter Object können Sie ein Property aus dem Quell-Element angeben. Für dieses Property wird anschließend unter Events festgelegt, welche Werte ausgewertet werden sollen. Jeder dieser Werte stellt einen Ausgang aus dem Switch dar. Es können Zahlen und Zeichenketten eingegeben werden.
Jetzt müssen noch die Links vom Switch zu den Zielen definiert werden. Ziehen Sie dazu einen Link auf den Switch und verbinden Sie das Ende des Links mit dem Ziel. Als Source-Event werden jetzt die unter Event hinterlegten Einträge angeboten.
Der Quellcode, der aus diesen Angaben generiert wird, sieht in etwa so aus:
switch Form.Property
{
case Event1:
{
Link 1
}
case Event2:
{
Link 2
}
default:
{
Link 3
}
}
Global Events
Mit Global Events können Events an alle geöffneten Workflows gesendet werden.
Global Events werden auf der Registerkarte Namespaces abgelegt und mit Drag & Drop in den Designer gezogen werden. Auf der Registerkarte Namespaces werden direkt unter dem Event zwei Einträge angeboten: Das Event, das aufgerufen werden kann und der Event Handler, mit dem Sie auf das Event reagieren können.
Global Events aufrufen
Um ein Global Event aufzurufen, ist es nötig den ersten Eintrag per Drag & Drop in den Workflow zu ziehen. Anschließend wird ein Link vom aufrufenden Element in das Global Event gezogen. In den Link-Properties kann dann am Global Event eine Methode Init angegeben werden.
Diese Methode enthält alle im Global Event definierten Parameter. So können Sie dem Global Event alle am aufrufenden Element zur Verfügung stehenden Properties übergeben.
Auf Global Events reagieren
Um auf ein Global Event zu reagieren, ist es erforderlich aus der Registerkarte Namespaces den zweiten Eintrag unter dem Global Event per Drag & Drop in den Workflow zu ziehen (gevXxxHandler).
Den Event Handler erkennen Sie an dem Strich links am Oval und der Inschrift gevXxxHandler.
Anschließend wird ein Link vom Global Event Handler in des Ziel-Element gezogen. In den Link-Properties können Sie bei einem Methoden-Aufruf am Ziel-Element als Parameter alle Parameter aus dem Global Event übergeben. In der Combobox für die Parameter werden die Parameter unter dem Eintrag „e“ angezeigt.