其实我从来不关心前台用什么实现,不管理是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>
<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>
<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里的就可以运行了
-----------------------------------------------------------------------