VS2005开发SHAREPOINT SERVER 2007工作流入门实例(一个由两人审批的工作流)

  VS2005开发SHAREPOINT SERVER 2007工作流入门实例
环境:
虚拟机Windows 2003 ,Vs2005中文版, Moss2007中文版、Office 2007中文
另外还要安装ECM Starter Kit for Visual Studio 2005。
我最初安装的是只有6M左右的下面的SDK:MOSS2007ECMSampleStarterKit.msi
,安装完就没有,没有办法,只好下载一个OfficeServerSDK.exe(197M)。安装完就有了。
该OfficeServerSDK中含有ECM Starter Kit for Visual Studio 2005。
安装完毕后,在VS2005的开发环境中,应该有SharePoint的项:
 
如果没有的话,可以运行一下下面的DOS命令试试:
devenv.exe /installvstemplates。
 
一、创建项目:
Visual Studio 2005 中创建基亍 SharePoint Sequential Workflow 模版的项目 ApprovalSequentialEdition
项目名为:SPWFTest1
默认创建的项目文档如下:
 
在项目的属性中将生成的DLL文件改为WF_Demo1。
说明:所有SharePoint工作流都必须从onWorkflowActivated这个活动开始,且一个工作流中只能有一个onWorkflowActivated活动。
二、添加控件,以适应流程的需要。
1、添加一个While控件。添加后的效果如下:
添加控件后直接编译的话,会出现4个错误:

错误 1 Activity 'whileActivity1' validation failed: Property 'Condition' is not set. f:/WF/多人审批工作流/多人审批工作流/Workflow1.cs 1 1 
错误 2 Activity 'whileActivity1' validation failed: WhileActivity should have one child activity. f:/WF/多人审批工作流/多人审批工作流/Workflow1.cs 1 1 
错误 3 Property 'Condition' is not set.  0 0 
错误 4 WhileActivity should have one child activity.  0 0
是因为没有为该While控件设置条件造成的。没关系,下面就开始设置。
(1)在后台代码中添加一个方法,用于判断工作流是否结束。
  private string assignto = default(System.String);
        private int currentreviewer = 0;
        //判断审批流程是否结束
        private void workflownotFinished(object sender, ConditionalEventArgs e)
        {
           
            if (this.assignto.Split(Convert.ToChar(";")).Length < currentreviewer + 1)
            {
                e.Result = false;
            }
            else
            {
                e.Result = true;
            }
        }
然后顺界面设计器上选择WhileActice1。默认生成的控件名为:WhileActivity1。
在属性窗口中设置Condition属性为:Code Condition。
在其子属性Condition中选择workflownotFinished。
重新编译,会出现如下的错误:
错误 1 Activity 'whileActivity1' validation failed: WhileActivity should have one child activity. f:/WF/多人审批工作流/多人审批工作流/Workflow1.cs 1 1 
(2)、在WhileActive1控件的下面增加一个sequence控件,默认的控件名为:sequenceActivity1。
再进行编译时,编译成功。

2、在sequenceActivity1下添加一个CreatTask控件,默认名为:createTask1:
在属性窗口上,添加createTask1的MethodInvoking事件代码。如下:
 public Guid TaskId = default(System.Guid);
        private bool isFinished = false;
        public SPWorkflowTaskProperties TaskProps = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
        private string itemtitle = default(System.String);
        private string instructions = default(System.String);
        private void createTask1_MethodInvoking(object sender, EventArgs e)
        {
            TaskId = Guid.NewGuid();
            isFinished = false;//task finished flag
            TaskProps.Title = "Please review:" + itemtitle;
            TaskProps.AssignedTo = this.assignto.Split(Convert.ToChar(";"))[this.currentreviewer].ToString();
            TaskProps.Description = this.instructions;
            TaskProps.ExtendedProperties["instructions"] = instructions;
        }
3、设置createTask1的correlationtoken属性为taskToken。
ownerActiveName为:sequenceActivity1。
添加控件后有设计界面如下:
编译成功。
三。添加第二个While控件。
再添加一个While控件到CreatTask下面,默认名字为whileActivity2。
在后面代码中添加如下的方法:
 private void taskNotFinished(object sender, ConditionalEventArgs e)
        {
            e.Result = !isFinished;
 
        }
在属性窗口中设置whileActivity2的Condition属性为:Code Condition。
在其子属性Condition中选择taskNotFinished
在whileActivity2中添加一个OnTaskChanged控件,默认名字为:onTaskChanged1。
添加代码:
             public SPWorkflowTaskProperties AfterProps = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
        public SPWorkflowTaskProperties BeforeProps = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
设置OnTaskChanged的BeforeProperties属性和AfterProperties分别为:
Activity=Workflow1, Path=AfterProps
Activity=Workflow1, Path=BeforeProps
四。添加ComplateTask控件,添加代码:
 private void completeTask1_MethodInvoking(object sender, EventArgs e)
        {
            this.currentreviewer++;//流程转入下一个审批者
        }
编译成功。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xjzdr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值