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:

Ermöglicht
  • 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

    Beispiel für einen ActivityDesigner C#
    Codeblock
    languagexml
    <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"/>
                        <sap:ExpressionTextBox Margin="4" Grid.Row="0" Grid.Column="1" OwnerActivity="{Binding ModelItem}
    "
    "
                                               ExpressionType="system:String"
                                               
    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>


    Code Behind C#
    Codeblock
    languagec#
    namespace Designer.HelloWorld.V01
    {
        /// <summary>
        /// Interaction logic for HelloWorld.xaml
        /// </summary>
        public partial class HelloWorldDesigner
        {
            public HelloWorldDesigner()
            {
                InitializeComponent();
            }
        }
    }


    Beispiel für einen ActivityDesigner VB
    Codeblock
    languagexml
    <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>


    Code Behind VB
    Codeblock
    languagevb
    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 Modified

    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


    ActivityDesigner mit Resourcen aus WmsActivityTheme
    Codeblock
    languagexml
    <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>



    Image Added

    Image Removed

    Image Modified