Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

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

  • Status
    colourYellow
    titleab WMS 1.1.4
    Per Knopfdruck eine Variable anlegen

  • Status
    colourYellow
    titleab WMS 1.1.4
    Für den Ausdruckseditor einen Standard-Namen vorbelegen, damit der Nutzer dort schnell eine Variable anlegen kann

Inhalt

Inhalt

Automatisch bei Hinzufügen der Aktivität

Gehen Sie wie folgt vor, wenn Ihre Aktivität eine Variable automatisch anlegen soll:

  1. Die Aktivität muss das Interface " Accantum.Wms.ActivityContracts.IAutoCreateVariables"  implementieren
    (so wird gespeichert, ob die Variable bereits erstellt wurde)

    C# Aktivität

    Codeblock
    languagec#

...

...

  1. 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; }
  2. Die Variable selbst wird im Designer erzeugt.

...

  1. Überschreiben Sie dazu

...

  1. die Methode "

...

  1. OnModelItemChanged" dens ActivityDesigners in der CodeBehind.

    C# Designer - Codebehind

    Codeblock
    language

...

  1. c#
             protected override void OnModelItemChanged(object newItem)
            {
    			//Eigenschaft finden, der die Variabel zugewiesen werden soll:
                

...

  1. 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);
         

...

Die Implementierung der Methoden finden Sie in der CodeBehind

...

languagec#
linenumberstrue
collapsetrue
  1.    }

Per Knopfdruck (AddVariableButton)
Status
colourYellow
titleab 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.
(Anhand dessen wird der Typ der Variable ermittelt)

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.

Codeblock
languagexml
<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.

Image Added

Ist das Eingabefeld noch leer, kann der Benutzer ebenfalls das “+” klicken. Dann wird der DefaultVariableName verwenden (sofern vorhanden).

Variablenamen für den Ausdruckseditor
Status
colourYellow
titleab WMS 1.1.4

Mit der 1.1.4 hat der Anwender die Möglichkeit im Ausdruckseditor eine passende Variable anzulegen.

Tipp

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

Codeblock
languagexml
<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}"/>
Codeblock
languagec#
  [DefaultVariableName(WmsVariableNames.WmsCommentList)]
  public OutArgument<List<WmsTaskComment>> CommentList { get; set; }

Image Added