• WF的一个ASPNET例子


    很多朋友总是问我如何在ASPNET中使用WF
    其实我从来不关心前台用什么实现,不管理是B/S还是C/S
    手写了一个ASPNET页与WF工作流例子,
    这个例子很简单,例子本身并没有什么价值
    希望这个例子能给一些朋友代来其他方面的收获

    aspx页面代码
    <%@ Page Language="C#" %>
    <script runat="server">
      
    //工作流引擎,使用静态对象,使所有用户都可共享,并在application生命周期存活
    public static System.Workflow.Runtime.WorkflowRuntime runtime;

    //启动引擎按钮
    System.Web.UI.WebControls.Button btStartRuntime = new System.Web.UI.WebControls.Button();

    //得到实例列表按钮
    System.Web.UI.WebControls.Button btListInstanct = new System.Web.UI.WebControls.Button();
       
    //实例列表
    System.Web.UI.WebControls.RadioButtonList rlList = new System.Web.UI.WebControls.RadioButtonList();


    //创建实例按钮
    System.Web.UI.WebControls.Button btCreateInstance = new System.Web.UI.WebControls.Button();

    //下一步按钮
    System.Web.UI.WebControls.Button btNext = new System.Web.UI.WebControls.Button();

    protected void Page_Load(object sender, EventArgs e)
    {
    if (runtime == null)
    {
    System.Web.HttpContext.Current.Response.Write(
    "引擎没有启动<p>");
    }
    else
    {
    System.Web.HttpContext.Current.Response.Write(
    "引擎已启动<p>");
    }

    //
    btStartRuntime.Text = "启动/重新启动引擎";
    btStartRuntime.Click 
    += new EventHandler(btStartRuntime_Click);
    form1.Controls.Add(btStartRuntime);

    //
    btCreateInstance.Text = "创建实例";
    form1.Controls.Add(
    new System.Web.UI.LiteralControl("<p>"));
    btCreateInstance.Click 
    += new EventHandler(btCreateInstance_Click);
    form1.Controls.Add(btCreateInstance);
       
    //
    form1.Controls.Add(new System.Web.UI.LiteralControl("<p>"));
    btListInstanct.Text 
    = "得到实例列表";
    btListInstanct.Click 
    += new EventHandler(btListInstanct_Click);
    form1.Controls.Add(btListInstanct);

    //
    form1.Controls.Add(new System.Web.UI.LiteralControl("<p>"));
    form1.Controls.Add(rlList);

    //
    form1.Controls.Add(new System.Web.UI.LiteralControl("<p>"));
    btNext.Text 
    = "下一步";
    btNext.Click 
    += new EventHandler(btNext_Click);
    form1.Controls.Add(btNext);
    }

    void btNext_Click(object sender, EventArgs e)
    {
    if (rlList.SelectedItem != null)
    {
    System.Workflow.Runtime.WorkflowInstance temp 
    = runtime.GetWorkflow(new Guid(rlList.SelectedItem.Text));
    temp.Resume();
    System.Threading.Thread.Sleep(
    1000);
    }
    }

    void btCreateInstance_Click(object sender, EventArgs e)
    {
    runtime.CreateWorkflow(
    typeof(自定义工作流)).Start();
    }

    void btListInstanct_Click(object sender, EventArgs e)
    {
    rlList.Items.Clear();
    foreach (System.Workflow.Runtime.WorkflowInstance temp in runtime.GetLoadedWorkflows())
    {
    System.Web.UI.WebControls.ListItem li 
    = new ListItem(temp.InstanceId.ToString());
    rlList.Items.Add(li);
    }

    }

    void btStartRuntime_Click(object sender, EventArgs e)
    {
    runtime 
    = new System.Workflow.Runtime.WorkflowRuntime();
    runtime.Started 
    += new EventHandler<System.Workflow.Runtime.WorkflowRuntimeEventArgs>(runtime_Started);
    runtime.WorkflowCreated 
    += new EventHandler<System.Workflow.Runtime.WorkflowEventArgs>(runtime_WorkflowCreated);
    runtime.StartRuntime();
    }



    void runtime_WorkflowCreated(object sender, System.Workflow.Runtime.WorkflowEventArgs e)
    {
    System.Web.HttpContext.Current.Response.Write(e.WorkflowInstance.InstanceId.ToString() 
    + "实例建立<p>");
    }

    void runtime_Started(object sender, System.Workflow.Runtime.WorkflowRuntimeEventArgs e)
    {
    System.Web.HttpContext.Current.Response.Write(
    "引擎启动成功<p>");
    }


    class 自定义工作流:System.Workflow.Activities.SequentialWorkflowActivity 
    {
    /*
     
     [code1(CodeActivity)]
          ↓
     [su1(SuspendActivity)]
          ↓
     [code2(CodeActivity)]
          ↓
     [su1(SuspendActivity)]
          ↓ 
     [code3(CodeActivity)]
     
     
    */
    public 自定义工作流()
    {
    //
    System.Workflow.Activities.CodeActivity code1 = new System.Workflow.Activities.CodeActivity("code1");
    code1.ExecuteCode 
    += delegate(object s, EventArgs ee) {};

    //   
    System.Workflow.ComponentModel.SuspendActivity su1 = new System.Workflow.ComponentModel.SuspendActivity("su1");

    //
    System.Workflow.Activities.CodeActivity code2 = new System.Workflow.Activities.CodeActivity("code2");
    code2.ExecuteCode 
    += delegate(object s, EventArgs ee) { };

    //
    System.Workflow.ComponentModel.SuspendActivity su2 = new System.Workflow.ComponentModel.SuspendActivity("su2");

    //
    System.Workflow.Activities.CodeActivity code3 = new System.Workflow.Activities.CodeActivity("code3");
    code3.ExecuteCode 
    += delegate(object s, EventArgs ee) {};


    //
    this.CanModifyActivities = true;
    this.Activities.Add(code1);
    this.Activities.Add(su1);
    this.Activities.Add(code2);
    this.Activities.Add(su2);
    this.Activities.Add(code3);
    this.CanModifyActivities = false
    }
    }
    </script>

    <html >
    <body>
    <form id="form1" runat="server">
    </form>
    </body>
    </html>

    Web.Config文件

    <?xml version="1.0"?>
    <configuration>
    <system.web>
    <compilation>
    <assemblies>
    <add assembly="System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </assemblies>
    </compilation>
    </system.web>
    </configuration>

    保存一下,注意编辑格式,放到IIS里的就可以运行了
    -----------------------------------------------------------------------

  • 相关阅读:
    JQuery FlexiGrid的asp.net完美解决方案:dotNetFlexGrid.Net原生的异步表格控件 简介和应用效果截图
    利用View静态画图
    Context部分译(http://developer.android.com/reference/android/content/Context.html))
    java 利用Scanner解析逗号字符串
    Canvas
    SurfaceView部分译
    handler
    Centos7上安装jdk8
    Opera 使用迅雷下载
    fopen()
  • 原文地址:https://www.cnblogs.com/foundation/p/871902.html
Copyright © 2020-2023  润新知