Versionen im Vergleich

Schlüssel

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

Der ActivityDesigner sollte auf die darunterliegende Aktivität abgestimmt sein. Fügen Sie Ihren Projekt eine "Activity Designer"-Datei hinzu. Es handelt sich dabei um ein WPF-Control mit ein paar Besonderheiten:

  • Auf die Aktivität greifen Sie über das ModelItem-Property zu.
  • Das ExpressionTextBox-Control Ermöglicht

    Der ActivityDesigner sollte auf die darunterliegende Aktivität abgestimmt sein. Fügen Sie Ihren Projekt eine "Activity Designer"-Datei hinzu. Es handelt sich dabei um ein WPF-Control mit ein paar Besonderheiten:

    • Auf die Aktivität greifen Sie über das ModelItem-Property zu.

    • Das ExpressionTextBox-Control ermöglicht die Eingabe von VB-Ausdrücken für In/Out-Argumente

    • Aktivitäten werden über das DesignerAttribute mit dem Designer verknüpft.

    Folgende Dinge sind zu beachten: 

    • Der

    Workflow-Designer sollte In-
    • Anwender sollte alle Argumente eingeben können, ohne dabei auf das Eigenschaften-Fenster zurückgreifen zu müssen

    .Alle für die Aktivität nötigen Argumente sollten im Designer eingegeben werden können
    • .

    • Die Reihenfolge der Argumente sollte deutlich sein :

    In-Argumente
    • InArgumente => In/Out-Argumente =>

    Out-Argumente
    • OutArgumente

    • Labels und Beschreibungen der Argumente sollten lokalisiert verfügbar sein (Deutsch/Englisch).

    • Der Inhalt des Controls sollte einklappbar sein (Content-Presenter).

    Hinweis für VB:

    • Namespaces werden in VB bei XAML Dateien nicht unterstützt, es wird für die Versionierung daher empfohlen die Version in den Namen einzubinden.

    Image Modified

    (

    ActivityDesigner in VisualStudio

    anlegen) Codeblocklanguagexmltitle

    anlegen

    Beispiel für einen ActivityDesigner C#
    linenumbers
    Codeblock
    truetrue
    language
    collapse
    xml
    <sap:ActivityDesigner x:Class="Designer.HelloWorld.V01.HelloWorldDesigner"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:local="clr-namespace:Designer.HelloWorld.V01"
                 xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"
                 xmlns:converters="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"
                 xmlns:system="clr-namespace:System;assembly=mscorlib"
                 mc:Ignorable="d" 
                 d:DesignHeight="450" d:DesignWidth="800">
        <sap:ActivityDesigner.Resources>
            <ResourceDictionary>
                <converters:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" />
    
                <DataTemplate x:Key="CollapsedTemplate">
                    <Label Padding="0" Foreground="#FF6D6D6D" FontStyle="Italic"
                       HorizontalAlignment="Center" VerticalAlignment="Center"
                       Content="{x:Static res:Resources.CollapsedToolTip}"/>
                </DataTemplate>
    
                <DataTemplate x:Key="ExpandTemplate" DataType="{x:Type local:HelloWorldDesigner}">
                    <Grid>
    
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
    
                        <!-- InArgumente und Eigenschaften ... -->
    
                        <!-- Text -->
                        <TextBlock Grid.Row="0" Grid.Column="0" Margin="0 10 0 0" Text="Text" ToolTip="Geben sie 
    <!--
    einen Text 
    --
    ein"/>
                        
    <TextBlock
    <sap:ExpressionTextBox Margin="4" Grid.Row="0" Grid.Column="
    0
    1" 
    Margin="0 10 0 0" Text="Text" ToolTip="Geben sie einen Text ein"/>
    OwnerActivity="{Binding ModelItem}"
                                             
    <sap:ExpressionTextBox
     
    Margin="4" Grid.Row
     ExpressionType="
    0
    system:String"
    
    Grid.Column="1"
     
    OwnerActivity="{Binding
     
    ModelItem}"
                                             
    ExpressionType
    PathToArgument="
    system:String"
    Text"
                                               Expression="{Binding ModelItem.Text, Mode=TwoWay, Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=In}"/>
    
                        <!-- OutArgumente und Eigenschaften ... -->
                    </Grid>
                </DataTemplate>
    
                <!-- Mechanismus, um die Aktivität auf und zuzuklappen-->
                <Style x:Key="ExpandOrCollapsedStyle" TargetType="{x:Type ContentPresenter}">
                    <Setter Property="ContentTemplate" Value="{StaticResource CollapsedTemplate}"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=ShowExpanded}" Value="true">
                            <Setter Property="ContentTemplate" Value="{StaticResource ExpandTemplate}"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ResourceDictionary>
        </sap:ActivityDesigner.Resources>
    
        <ContentPresenter Style="{StaticResource ExpandOrCollapsedStyle}" Content="{Binding}"/>
    </sap:ActivityDesigner>
    Codeblocklanguagec#title


    Code Behind C#
    linenumbers
    Codeblock
    true
    language
    collapsetrue
    c#
    namespace Designer.HelloWorld.V01
    {
        /// <summary>
        /// Interaction logic for HelloWorld.xaml
        /// </summary>
        public partial class HelloWorldDesigner
        {
            public HelloWorldDesigner()
            {
                InitializeComponent();
            }
        }
    }
    code
    languagexml


    title
    Beispiel für einen ActivityDesigner VB
    linenumbers
    true
    Codeblock
    collapse
    language
    true
    xml
    <sap:ActivityDesigner x:Class="HelloWorldDesignerV01"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:local="clr-namespace:Designer.HelloWorld.V01"
                 xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"
    			 xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation"
                 xmlns:converters="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"
                 xmlns:system="clr-namespace:System;assembly=mscorlib"
                 mc:Ignorable="d" 
                 d:DesignHeight="450" d:DesignWidth="800"
    			 Loaded="ActivityDesigner_Loaded">
        <sap:ActivityDesigner.Resources>
            <ResourceDictionary>
                <converters:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" />
    
                <DataTemplate x:Key="CollapsedTemplate">
                    <Label Padding="0" Foreground="#FF6D6D6D" FontStyle="Italic"
                       HorizontalAlignment="Center" VerticalAlignment="Center"
                       Content="Zum Anzeigen doppelklicken."/>
                </DataTemplate>
    
                <DataTemplate x:Key="ExpandTemplate" DataType="HelloWorldActivity:HelloWorldDesignerV01">
                    <Grid>
    
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
    
                        <!-- InArgumente und Eigenschaften ... -->
    
                        <!-- Text -->
                        <TextBlock Grid.Row="0" Grid.Column="0" Margin="0 10 0 0" Text="Text" ToolTip="Geben sie einen Text ein"/>
                        <sapv:ExpressionTextBox Margin="4" Grid.Row="0" Grid.Column="1" OwnerActivity="{Binding ModelItem}"
                                                ExpressionType="system:String"
                                                PathToArgument="Text"
                                                Expression="{Binding ModelItem.Text, Mode=TwoWay, Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=In}"/>
    
                        <!-- OutArgumente und Eigenschaften ... -->
                    </Grid>
                </DataTemplate>
    
                <!-- Mechanismus, um die Aktivität auf und zuzuklappen-->
                <Style x:Key="ExpandOrCollapsedStyle" TargetType="{x:Type ContentPresenter}">
                    <Setter Property="ContentTemplate" Value="{StaticResource CollapsedTemplate}"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=ShowExpanded}" Value="true">
                            <Setter Property="ContentTemplate" Value="{StaticResource ExpandTemplate}"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ResourceDictionary>
        </sap:ActivityDesigner.Resources>
    
        <ContentPresenter Style="{StaticResource ExpandOrCollapsedStyle}" Content="{Binding}"/>
    </sap:ActivityDesigner>
    Codeblocklanguagevbtitle


    Code Behind VB
    linenumbers
    Codeblock
    true
    language
    collapsetrue
    vb
    Imports System.Activities.Presentation
    
    Class HelloWorldDesigner01
        Inherits ActivityDesigner
        Private Sub ActivityDesigner_Loaded(sender As Object, e As RoutedEventArgs)
    
        End Sub
    
    End Class


    Testen des Designers

    Den Designer können Sie testen, indem Sie Ihrem Projekt eine Activity-Xaml-Datei hinzufügen. (New Item > Workflow > Activity)

    Hier können Sie nach einem Build Ihre Aktivität mit Drag&Drop aus der Toolbar ziehen und Ihren Designer überprüfen. Über das Eigenschaftsfenster von VisualStudio können Sie die Eigenschaften der Aktivität einsehen.

    Image Removed
    Image Added

    Anpassung des Designer an WMS über Resourcen aus der WmsActivityContracts.dll

    Mit Hilfe der Klasse "Accantum.Wms.ActivityContracts.Theme.WmsActivityTheme" haben Sie Zugriff auf folgende Styles und Templates, die auch von anderen WMS-Aktivitäten genutzt werden.

    Name

    Beschreibung

    TargetType / DataType

    CollapsedTemplate

    DataTemplate, für das Aussehen einer Aktivität, wenn sie zusammengeklappt ist.

    -

    ActivityBodyStyle

    Style für Aktivitäten mit Body (wie z.B. If Aktivität) (Rahmen um die Unteraktivitäten)

    Border

    WorkflowItemPresenterStyle

    Style für Aktivitäten mit Body (wie z.B. If Aktivität) (WorkflowItemPresenter für die Unteraktivitäten)

    WorkflowItemPresenter

    ActivityDesignerStyle

    Style für alle WMS-Aktivitäten (WmsCodeActivity, WmsNativeActivity, WmsAsyncCodeActivity). Beinhaltet unter anderem den Style, wenn die Aktivität auskommentiert ist,

    ActivityDesigner

    Codeblocklanguagexml

    title


    ActivityDesigner mit Resourcen aus WmsActivityTheme
    linenumbers
    Codeblock
    language
    true Panel
    titleStyle für Workflow Item Presenter
    Image Removed
    xml
    <sap:ActivityDesigner x:Class="ActivitySample.Activities.DemoNative.DemoNativeDesigner"
                          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                          xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
                          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                          xmlns:sa="http://schemas.microsoft.com/netfx/2009/xaml/activities"
                          xmlns:demoNative="clr-namespace:ActivitySample.Activities.DemoNative"
                          xmlns:theme="clr-namespace:Accantum.Wms.ActivityContracts.Theme;assembly=WmsActivityContracts"
                          mc:Ignorable="d"
                          MaxWidth="500" d:DataContext="{d:DesignInstance demoNative:DemoNativeDesigner}"
                          Style="{x:Static theme:WmsActivityTheme.ActivityDesignerStyle}">
        <sap:ActivityDesigner.Resources>
    
            <DataTemplate x:Key="ExpandedTemplate">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
    
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="for" VerticalAlignment="Center" />
                        <TextBox Margin="7,0" MinWidth="70" Padding="0"
                                 Text="{Binding Path=ModelItem.Body.Argument.Name, Mode=TwoWay}" />
                        <TextBlock Text="= 0 to 4" VerticalAlignment="Center" />
                    </StackPanel>
    
    
                    <Border Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" Style="{x:Static theme:WmsActivityTheme.ActivityBodyStyle}">
                        <sap:WorkflowItemPresenter Style="{x:Static theme:WmsActivityTheme.WorkflowItemPresenterStyle}" 
                                                   AllowedItemType="{x:Type sa:Activity}"
                                                   Item="{Binding Path=ModelItem.Body.Handler, Mode=TwoWay}" />
                    </Border>
                </Grid>
            </DataTemplate>
    
            <!-- Mechanismus, um die Aktivität auf und zuzuklappen-->
            <Style x:Key="ExpandOrCollapsedStyle" TargetType="{x:Type ContentPresenter}">
                <Setter Property="ContentTemplate" Value="{x:Static theme:WmsActivityTheme.CollapsedTemplate}"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=ShowExpanded}" Value="true">
                        <Setter Property="ContentTemplate" Value="{StaticResource ExpandedTemplate}"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </sap:ActivityDesigner.Resources>
    
        <ContentPresenter Style="{StaticResource ExpandOrCollapsedStyle}" Content="{Binding}"/>
    </sap:ActivityDesigner>
    Panel
    titleAktivität mit Style aus dem WMS, um anzzeigen, dass Die Aktivität deaktiviert wurde.

    Image Removed



    Image Added

    Image Added