zoukankan      html  css  js  c++  java
  • WF4.0 Beta1 流程设计器与Activity Designer

    WF4.0 Beta1 流程设计器与Activity Designer

    数据类

    public class myData

    {

    public string 结果

    { set; get; }

     

    public string 说明

    { set; get; }

    }

     

     

    自定义Activity

    public sealed class 节点<T> : NativeActivity<myData>

    {

    public 节点()

    : base()

    {

    this.DisplayName = "";

     

    }

     

    string _n = "mywait";

    public string 节点名

    {

    get { return _n; }

    set { _n = value; }

    }

     

    string _s = "请输入内容";

    public string 内容

    {

    get { return _s; }

    set { _s = value; }

    }

     

    protected override void Execute(ActivityExecutionContext context)

    {

    System.Console.WriteLine("内容:{0}", 内容);

    context.CreateNamedBookmark(节点名, new BookmarkCallback(bookmarkCallback));

    }

     

    void bookmarkCallback(ActivityExecutionContext context, Bookmark bookmark, object obj)

    {

    myData r = obj as myData;

     

    if (r.结果 == "a")

    {

    System.Console.WriteLine("{0},请处理以下问题:", r.说明);

    }

    this.Result.Set(context, r);

    }

    }

     

    自定义Designer

    <sad:WorkflowElementDesigner x:Class="WpfApplication1.myDesigner"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:sad="clr-namespace:System.Activities.Design;assembly=System.Activities.Design"

    xmlns:sadv="clr-namespace:System.Activities.Design.View;assembly=System.Activities.Design">

     

    <sad:WorkflowElementDesigner.Resources>

     

    <DataTemplate x:Key="d1">

    <StackPanel>

    <TextBlock Margin="0,5,0,0" Text="内容:" />

    <TextBox Height="50" AcceptsReturn="True" Text="{Binding Path=ModelItem.内容}" />

    </StackPanel>

     

    </DataTemplate>

     

    </sad:WorkflowElementDesigner.Resources>

     

    <Grid >

    <ContentPresenter ContentTemplate="{DynamicResource d1}" Content="{Binding}"/>

    </Grid>

    </sad:WorkflowElementDesigner>

     

    流程设计器

    <Window x:Class="WpfApplication1.Window1"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="Window1" >

    <StackPanel>

    <StackPanel Orientation="Horizontal" >

    <Button Content="启动流程" Width="80" Height="30" Click="Button_Click" />

    <TextBlock Margin="20,0,0,0" Text="办理" />

     

    <Button Name="yes" Content="同意" Width="80" Height="30" Click="yes_Click" />

    <Button Name="nextUser" Content="交指定人再议" Width="80" Height="30" Click="nextUser_Click" />

    <TextBox Name="tb" Width="200" />

    </StackPanel>

     

    <StackPanel Orientation="Horizontal" Loaded="StackPanel_Loaded">

     

    <StackPanel xmlns:sad="clr-namespace:System.Activities.Design;assembly=System.Activities.Design">

    <StackPanel Name="propertyPanel" />

    <sad:ToolboxControl Width="250" Height="400" Name="toolbox" />

    </StackPanel>

    <ContentControl Height="800" Width="800" Name="desienerPanel" />

    </StackPanel>

    </StackPanel>

    </Window>

    public partial class Window1 : Window

    {

    public Window1()

    {

    InitializeComponent();

    }

    WorkflowDesigner designer;

    private void StackPanel_Loaded(object sender, RoutedEventArgs e)

    {

    ToolboxCategoryItemsCollection toolList=new ToolboxCategoryItemsCollection("基本工具");

    toolbox.Categories.Add(toolList);

    toolList.Add(new ToolboxItemWrapper(typeof(节点<myData>), "节点"));

    toolList.Add(new ToolboxItemWrapper(typeof(System.Activities.Statements.FlowSwitch), "分支"));

    toolList.Add(new ToolboxItemWrapper(typeof(System.Activities.Statements.WriteLine), "输出"));

    //======

     

    DesignerMetadata dm = new DesignerMetadata();

    dm.Register();

    //-

     

    AttributeTableBuilder builder = new AttributeTableBuilder();

    builder.AddCustomAttributes(typeof(节点<myData>), new DesignerAttribute(typeof(myDesigner)));

    MetadataStore.AddAttributeTable(builder.CreateTable());

     

    //==========

     

    designer = new WorkflowDesigner();

     

    var root = new System.Activities.Statements.Flowchart();

     

    var v = new System.Activities.Variable<myData>();

    v.Name = "content";

    v.Default = new myData();

    root.Variables.Add(v);

    designer.Load(root);

     

    desienerPanel.Content=designer.View;

    propertyPanel.Children.Add(designer.PropertyInspectorView);

    }

     

    WorkflowInstance myInstance;

    public WorkflowInstance createInstanceFromXamlString(string xaml)

    {

    System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding();

    byte[] bs = utf8.GetBytes(xaml);

    System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(bs);

    WorkflowElement activity = WorkflowXamlServices.Load(memoryStream);

    WorkflowInstance myInstance = new WorkflowInstance(activity);

    return myInstance;

    }

     

     

     

    private void Button_Click(object sender, RoutedEventArgs e)

    {

    System.Console.Clear();

    myInstance = createInstanceFromXamlString(designer.Text);

    myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs ee) { System.Console.WriteLine("end"); };

    myInstance.Run();

    }

     

     

    private void yes_Click(object sender, RoutedEventArgs e)

    {

    myData date = new myData();

    date.结果 = "a";

    date.说明 = tb.Text;

     

    myInstance.ResumeBookmark("mywait", date);

    }

     

    private void nextUser_Click(object sender, RoutedEventArgs e)

    {

    myData date = new myData();

    date.结果 = "b";

    date.说明 = tb.Text;

    myInstance.ResumeBookmark("mywait", date);

    }

    }

     

     

    设计流程

    设计如下流程

     

     

     

     

     

     

     

     

     

    运行说明

     

     

  • 相关阅读:
    数据库作业
    5-5 数据库笔记整理
    5月4日数据库笔记整理
    数据库
    4.27内容整理
    python基础4
    python基础4
    python基础 3
    完善版二级联动(可作为函数)需要导入jquery
    jquery $this 指向子元素
  • 原文地址:https://www.cnblogs.com/foundation/p/1499363.html
Copyright © 2011-2022 走看看