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.

  • 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-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 => In/Out-Argumente => Out-Argumente
  • 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 Removed
(ActivityDesigner in VisualStudio anlegen)

Codeblock
languagexml
titleBeispiel für einen ActivityDesigner C#
linenumberstrue
collapsetrue
<sap:ActivityDesigner x:Class="Designer.HelloWorld.V01.HelloWorldDesigner"

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 Anwender sollte alle Argumente eingeben können, ohne dabei auf das Eigenschaften-Fenster zurückgreifen zu müssen.

  • Die Reihenfolge der Argumente sollte deutlich sein : InArgumente => In/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 Added
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.
microsoft
openxmlformats.
com
org/
winfx
markup-compatibility/2006
/xaml/presentation
" 
             xmlns:
x
d="http://schemas.microsoft.com/
winfx
expression/
2006
blend/
xaml
2008" 
             xmlns:
mc
local="
http://schemas.openxmlformats.org/markup-compatibility/2006"
clr-namespace:Designer.HelloWorld.V01"
             xmlns:
d
sap="http://schemas.microsoft.com/netfx/2009/
expression
xaml/
blend
activities/
2008
presentation"

             xmlns:
local
converters="clr-namespace:
Designer.HelloWorld.V01
System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"
             xmlns:
sap
system="
http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation
clr-namespace:System;assembly=mscorlib"
             
xmlns
mc:
converters
Ignorable="
clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation
d" 
            
xmlns
 d:
system
DesignHeight=
"clr-namespace:System;assembly=mscorlib"
"450" d:DesignWidth="800">
    <sap:ActivityDesigner.Resources>
        
mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800">
<ResourceDictionary>
     
<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"
                                           
Expression="
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 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 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

.Triggers> </Style> </ResourceDictionary> </sap:ActivityDesigner.Resources> <ContentPresenter Style="{StaticResource ExpandOrCollapsedStyle}" Content="{Binding}"/> </sap:ActivityDesigner> Codeblock
languagec#
titleCode Behind C#
linenumberstrue
collapsetrue
namespace Designer.HelloWorld.V01 { /// <summary> /// Interaction logic for HelloWorld.xaml /// </summary> public partial class HelloWorldDesigner {

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"
                     
public HelloWorldDesigner()
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  
{
             
InitializeComponent();
       
}
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    
} } Codeblock
languagexml
titleBeispiel für einen ActivityDesigner VB
linenumberstrue
collapsetrue
<sap:ActivityDesigner x:Class="HelloWorldDesignerV01"
                  xmlns:sap="
http://schemas.microsoft.com/winfx/2006/xaml/presentation
clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
                      xmlns:
x
mc="http://schemas.
microsoft
openxmlformats.
com
org/
winfx
markup-compatibility/2006
/xaml"
"
                      xmlns:
mc
d="http://schemas.
openxmlformats
microsoft.
org/markup-compatibility/2006"
com/expression/blend/2008"
                      xmlns:
d
sa="http://schemas.microsoft.com/netfx/
expression
2009/
blend
xaml/
2008
activities"
                      xmlns:
local
demoNative="clr-namespace:
Designer
ActivitySample.
HelloWorld
Activities.
V01
DemoNative"

            
xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"
          xmlns:
sapv
theme="clr-namespace:
System
Accantum.
Activities
Wms.
Presentation
ActivityContracts.
View
Theme;assembly=
System.Activities.Presentation
WmsActivityContracts"
             
xmlns:converters="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation
         mc:Ignorable="d"
             
xmlns:system="clr-namespace:System;assembly=mscorlib"
         
mc:Ignorable="d
MaxWidth="500" d:DataContext="{d:DesignInstance demoNative:DemoNativeDesigner}"
              
d:DesignHeight="450" d:DesignWidth="800" Loaded="ActivityDesigner_Loaded"
        Style="{x:Static theme:WmsActivityTheme.ActivityDesignerStyle}">
    <sap:ActivityDesigner.Resources>


      
<ResourceDictionary>
  
<converters:ArgumentToExpressionConverter
<DataTemplate x:Key="
ArgumentToExpressionConverter
ExpandedTemplate">
/>
            <Grid>
 
<DataTemplate
 
x:Key="CollapsedTemplate">
              <Grid.RowDefinitions>
  
<Label
 
Padding="0"
 
Foreground="#FF6D6D6D"
 
FontStyle="Italic"
               <RowDefinition />
   
HorizontalAlignment="Center"
 
VerticalAlignment="Center"
                <RowDefinition />
  
Content="Zum
 
Anzeigen doppelklicken."/>
             </
DataTemplate>
Grid.RowDefinitions>
              
<DataTemplate
 
x:Key="ExpandTemplate" DataType="HelloWorldActivity:HelloWorldDesignerV01">
 <Grid.ColumnDefinitions>
                
<Grid>
    <ColumnDefinition Width="Auto" />
               
<Grid.ColumnDefinitions>
     <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
<ColumnDefinition

Width="Auto"/>
                <StackPanel Orientation="Horizontal">
       
<ColumnDefinition
 
Width="*"/>
            <TextBlock Text="for" VerticalAlignment="Center" />
     
</Grid.ColumnDefinitions>
               <TextBox Margin="7,0" MinWidth="70" Padding="0"
   
<!--
 
InArgumente
 
und
 
Eigenschaften
 
...
 
-->
                     
<!-- Text --
Text="{Binding Path=ModelItem.Body.Argument.Name, Mode=TwoWay}" />
                    <TextBlock 
Grid.Row
Text="= 0 to 4" 
Grid.Column
VerticalAlignment="
0" Margin="0 10 0 0" Text="Text" ToolTip="Geben sie einen Text ein"/>
Center" />
                </StackPanel>


                
<sapv:ExpressionTextBox Margin
<Border Grid.Column="
4
0" Grid.Row="
0
1" Grid.
Column="1" OwnerActivity="{Binding ModelItem}"
ColumnSpan="2" Style="{x:Static theme:WmsActivityTheme.ActivityBodyStyle}">
                    <sap:WorkflowItemPresenter Style="{x:Static theme:WmsActivityTheme.WorkflowItemPresenterStyle}" 
                         
ExpressionType="system:String"
                      AllowedItemType="{x:Type sa:Activity}"
                 
Expression="{Binding
 
ModelItem.Text,
 
Mode=TwoWay,
 
Converter={StaticResource
 
ArgumentToExpressionConverter},
 
ConverterParameter=In}"/>
                      
<!--
 
OutArgumente
 
und
 
Eigenschaften ... --
Item="{Binding Path=ModelItem.Body.Handler, Mode=TwoWay}" />
                </
Grid>
Border>
            </
DataTemplate>
Grid>
        </DataTemplate>

        <!-- Mechanismus, um die Aktivität auf und zuzuklappen-->

        
<Style x:Key="ExpandOrCollapsedStyle" TargetType="{x:Type ContentPresenter}">

            <Setter Property="ContentTemplate" Value="{
StaticResource
x:Static theme:WmsActivityTheme.CollapsedTemplate}"/>

            <Style.Triggers>
                
<DataTrigger Binding="{Binding Path=ShowExpanded}" Value="true">
                    
<Setter Property="ContentTemplate" Value="{StaticResource 
ExpandTemplate
ExpandedTemplate}"
/> </DataTrigger> </Style.Triggers>
/>
    
</Style>
         
</ResourceDictionary>
   
</
sap:ActivityDesigner.Resources>
DataTrigger>
  
<ContentPresenter Style="{StaticResource ExpandOrCollapsedStyle}" Content="{Binding}"/>
 
</sap:ActivityDesigner> Codeblock
languagevb
titleCode Behind VB
linenumberstrue
collapsetrue
Imports
 
System.Activities.Presentation
  
Class
 
HelloWorldDesigner01
     
Inherits
</Style.Triggers>
ActivityDesigner
     
Private
 
Sub
 
ActivityDesigner_Loaded(sender As Object, e As RoutedEventArgs)
 </Style>
    </sap:ActivityDesigner.Resources>

   
End
 
Sub
<ContentPresenter 
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.
Style="{StaticResource ExpandOrCollapsedStyle}" Content="{Binding}"/>
</sap:ActivityDesigner>



Image Added

Image Added