VS2005开发SHAREPOINT SERVER 2007工作流入门实例(一个由两人审批的工作流)
VS2005开发SHAREPOINT SERVER 2007工作流入门实例环境:虚拟机Windows 2003 ,Vs2005中文版, Moss2007中文版、Office 2007中文另外还要安装ECM Starter Kit for Visual Studio 2005。我最初安装的是只有6M左右的下面的SDK:MOSS2007ECMSampleStarterKit
·
VS2005开发SHAREPOINT SERVER 2007工作流入门实例
错误 1 Activity 'whileActivity1' validation failed: Property 'Condition' is not set. f:/WF/多人审批工作流/多人审批工作流/Workflow1.cs 1 1
环境:
虚拟机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
错误 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 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;
}
}
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)、在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
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.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;
}
{
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();
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++;//流程转入下一个审批者
}
{
this.currentreviewer++;//流程转入下一个审批者
}
编译成功。
更多推荐
已为社区贡献4条内容
所有评论(0)