您的位置:首页 > 编程语言 > ASP

WF (Windows Workflow Foundation) 工作流学习(二)一个Asp.Net 与 顺序工作流 结合的例子

2009-04-13 14:49 465 查看
程序下载地址: http://files.cnblogs.com/TerryFeng/WF2.rar

建立一个空的解决方案,向其中加入一个顺序工作流类库和一个Asp.Net Web 应用程序项目,结果如下图





向asp.Net 程序中,添加引用,“WF”是工作流项目,如图





向Web.Config 中加入WF的注册(细节下载代码看一下)。

<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
</sectionGroup>
</sectionGroup>
</sectionGroup>

<!--WF注册服务-->
<section name="WorkflowRuntime" type="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection, System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<!--技术WF注册服务-->

</configSections>

<!--WF注册服务-->

<WorkflowRuntime Name="WorkflowServiceContainer">
<Services>
<add type="System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add type="System.Workflow.Activities.ExternalDataExchangeService, System.Workflow.Activities, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

</Services>
</WorkflowRuntime>
<!--结束注册服务-->

<appSettings/>
<connectionStrings/>



添加一个全局Global.asax 文件,添加如下代码

protected void Application_Start(object sender, EventArgs e)
{

WorkflowRuntime workflowRuntime = new WorkflowRuntime("WorkflowRuntime");
workflowRuntime.StartRuntime();
Application["WorkflowRuntime"] = workflowRuntime;

}

protected void Session_Start(object sender, EventArgs e)
{
WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;
workflowRuntime.StopRuntime();

}

向Default.aspx中添加3个控件,Textbox,button,label ,双击Button为其添加单击事件,并在default.aspx.cs 中添加如下代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Workflow.Runtime;
using System.Workflow.Runtime.Hosting;
using System.Workflow.ComponentModel;
using System.Workflow.Activities;
namespace AspNet
{
public partial class _Default : System.Web.UI.Page
{
string Result = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{

}

protected void Button1_Click(object sender, EventArgs e)
{
StartWorkflow();
Label1.Text = Result;
}

private void StartWorkflow()
{
WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;

ManualWorkflowSchedulerService scheduler = workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService)) as ManualWorkflowSchedulerService;

workflowRuntime.WorkflowCompleted += new EventHandler<WorkflowCompletedEventArgs>(workflowRuntime_WorkflowCompleted);

Dictionary<String, Object> wfPara = new Dictionary<string, object>();

wfPara.Add("Name", TextBox1.Text);

WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(typeof(WF.Workflow1), wfPara);

workflowInstance.Start();

scheduler.RunWorkflow(workflowInstance.InstanceId);
}

void workflowRuntime_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e)
{
if (e.OutputParameters.ContainsKey("Result"))
{
Result = (string)e.OutputParameters["Result"];
}

}

}
}



好了,下面,在WF项目中的Workflow1,拖入一个Code控件,如下图





为CodeActivety1.添加事件代码,方法名字可以自己取,也可以用默认的,我这里用了一个Exefun的方法名,





代码如下

namespace WF
{
public sealed partial class Workflow1 : SequentialWorkflowActivity
{

public string Name { get; set; }

public string Result { get; set; }

public Workflow1()
{
InitializeComponent();
}

private void ExeFun(object sender, EventArgs e)
{
Result = "你好:" + Name;
}
}

}

好了,编译一下程序,在TextBox中输入字符串,点击按钮看一下。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐