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++;//流程转入下一个审批者
        }
编译成功。
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐