Automatisches Anlegen von Variable
Bei komplexen Typen kann es für den Anwender nützlich sein, wenn die Aktivität automatisch eine Variable dazu anlegt. So muss der Anwender den Typ (den er erst einmal nicht kennt) nicht umständlich über das "Typ suchen"-Fenster suchen.
Es gibt mit der WmsActivityContracts Methoden, die das anlegen einer Variable vereinfachen. Folgende Fälle sind dabei zu unterscheiden:
Beim Hinzufügen der Aktivität automatisch eine Variable anlegen
ab WMS 1.1.4 Per Knopfdruck eine Variable anlegen
ab WMS 1.1.4 Für den Ausdruckseditor einen Standard-Namen vorbelegen, damit der Nutzer dort schnell eine Variable anlegen kann
Automatisch bei Hinzufügen der Aktivität
Gehen Sie wie folgt vor, wenn Ihre Aktivität eine Variable automatisch anlegen soll:
Die Aktivität muss das Interface " Accantum.Wms.ActivityContracts.IAutoCreateVariables" implementieren
(so wird gespeichert, ob die Variable bereits erstellt wurde)C# Aktivität
public class MyActivity : WmsCodeActivity, IAutoCreateVariables { /// <summary> ///Kennzeichen, ob durch die Aktivität bereits automatisch eine Variable angelegt wurde (<see cref="IAutoCreateVariables"/>) /// </summary> [Browsable(false)] [ExcludeInAnnotation] public bool VariableCreated { get; set; } public OutArgument<List<WmsFileInfo>> MyActivityResult { get; set; }
Die Variable selbst wird im Designer erzeugt. Überschreiben Sie dazu die Methode "OnModelItemChanged" dens ActivityDesigners in der CodeBehind.
C# Designer - Codebehind
protected override void OnModelItemChanged(object newItem) { //Eigenschaft finden, der die Variabel zugewiesen werden soll: ModelProperty oResultProp = ModelItem.Properties[nameof(MyActivity.MyActivityResult]; //Methode aus der WmsActivityContracts (Namespace "Accantum.Wms.ActivityContracts.Utils") aufrufen, Typ und Name der Variable angeben ModelItem.AddVariableAndAssignByType(oResultProp, new Variable<List<WmsFileInfo>>("aoFileInfos")); base.OnModelItemChanged(newItem); }
Per Knopfdruck (AddVariableButton) ab WMS 1.1.4
Beschreibung des Controls
Das Control “AddVariableButton” erstellt bei Klick eine Variable des Typs der angegeben Eigenschaft. Als Name wird der aktuelle Ausdruck verwendet (sofern es ein gültiger Variablenname ist).
Eigenschaft | Beschreibung |
---|---|
PathToArgument | Name der Eigenschaft in der Aktivität, für die die Variable angelegt und gesetzt werden soll. |
ModelItem | Die Aktivität (i.d.R. die Eigenschaft ModelItem aus dem ActivityDesigner) |
DefaultVariableName | (optional) Name der Variable, der verwendet werden soll, wenn der Ausdruck leer ist. Wenn nicht angegeben, kann nur eine Variable erstellt werden, wenn ein Ausdruck angegeben ist. |
Beispiel
Designer - XAML
Hier ist der Button neben einer Expressiontextbox mit einem OutArgument<List<WmsTaskComment>> eingefügt.
<DockPanel Grid.Column="1" Grid.Row="4">
<controls:AddVariableButton DockPanel.Dock="Right"
PathToArgument="CommentList"
ModelItem="{Binding ModelItem}"
DefaultVariableName="{x:Static workflow:WmsVariableNames.WmsCommentList}"/>
<sapv:ExpressionTextBox OwnerActivity="{Binding ModelItem}" UseLocationExpression="True"
PathToArgument="CommentList"
Expression="{Binding ModelItem.CommentList, Mode=TwoWay, Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=Out}"
ExpressionType="{extensions:GenericType BaseTypeName=System.Collections.Generic.List, ArgumentType1=portal:WmsTaskComment}"/>
</DockPanel>
Aussehen im WMS Studio
Der Anwender träge einen (noch nicht vorhandenen) Variablennamen ein. Mit Klicka auf + kann er die Variable anlegen, ohne in die Variablenliste zu wechseln.
Ist das Eingabefeld noch leer, kann der Benutzer ebenfalls das “+” klicken. Dann wird der DefaultVariableName verwenden (sofern vorhanden).
Variablenamen für den Ausdruckseditor ab WMS 1.1.4
Mit der 1.1.4 hat der Anwender die Möglichkeit im Ausdruckseditor eine passende Variable anzulegen.
Das funktioniert, ohne dass eine Anpassung Ihrer externen Aktivität notwendig ist.
Sie können dem Anwender aber ggf Tipparbeit ersparen, wenn Sie den Variablenamen vorbelegen. Nutzen Sie dazu die Eigenschaft "PathToArgument" im Designer und das "DefaultVariableName" in der Aktivitätsklassen.
Beispiel