随笔 - 135  文章 - 1 评论 - 2078 trackbacks - 136
<2010年1月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

QuickFlow下载
SPCAMLEditor 下载
camlquery 类库下载
Book: 《亮剑.NET:SharePoint Server 2007开发实战》
昵称:jianyi
园龄:4年10个月
粉丝:72
关注:7

搜索

 
 

随笔分类(125)

My Friends

wss

积分与排名

  • 积分 - 258349
  • 排名 - 289

最新评论

阅读排行榜

评论排行榜

推荐排行榜

上一篇文章[QuickFlow教程(5): RuleDriven活动,角色提供程序自定义,邮件模板]介绍了QF中最复杂和最强大的一个活动:RuleDriven,RuleDriven可以给流程级别的角色分配任务,任务何时完成完全由规则来控制。

在写上一篇文章的时候,QF的流程角色定义只支持三种:

StaticUserRoleDefinition,静态用户角色,这种角色中的用户是固定的,直接将用户账号写到角色定义中

SPGroupRoleDefinition, 用户组角色,角色用户对应到SharePoint的用户组

CustomRoleDefinition,自定义用户角色,可以通过实现一个接口定义角色用户机制

 

而在实际的开发过程中,很多情况下需要用代码向工作流传递用户,这种情况下,就无法用相对“静态”的事先定义角色用户的方法了。

考虑到这个需求,QF最新版本(build100128)提供了动态角色的功能(DynamicRuleDefinition)。

动态角色可以绑定到一个Name类型的变量,然后,直接控制这个变量的值即可控制角色中的用户。

 

假设我们需要控制流程的第一步的操作用户,操作如下。

 

Step1)定义动态角色

首先定义一个Names类型的工作流变量FirstStepUsers。

image

然后点开角色定义编辑窗口,定义一个动态角色FirstStepUsersRole,选择绑定FirstStepUsers变量。

image

image

Step2)设计RuleDriven活动

添加一个RuleDriven活动,画线连接Start和RuleDriven活动,设置其RoleReference为FirstStepUsersRole,

设置其Actions和和OutingRules,如下图:

image

Step3)编写代码

在工作流启动前事件中,写代码:

void StartWorkflowButton1_Executing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        QuickFlow.NameCollection nextUsers = new QuickFlow.NameCollection();
        nextUsers.Add("codeartserver\\administrator");
        nextUsers.Add("codeartserver\\appservice");

        QuickFlow.Core.WorkflowContext.Current.UpdateWorkflowVariable("FirstStepUsers", nextUsers);
    }

posted on 2010-01-28 22:02 jianyi 阅读(1540) 评论(15) 编辑 收藏

FeedBack:
#1楼 2010-10-17 10:34 john.yu      
jianyi,你好. 最近一直在学习你的QuickFlow, 就"动态角色"这篇教程,有几个问题
1. 在第一步时候, Root->Workflow Variables -> value, 打开以后需要填写什么代码或者信息吗?
2.在Role Definition, 参照你的图示, 我没有看到user的选项?
这是为什么? 是我遗漏了什么动作没有作吗?

 回复 引用 查看   
#2楼 2010-10-17 10:50 john.yu      
截图太难贴了. 我贴在我帖子里了, 烦请点击下来
http://www.cnblogs.com/johnyu/articles/1853401.html



 回复 引用 查看   
#3楼[楼主2010-10-17 18:25 jianyi      
1)打开后不用填写任意信息,这儿只是定义了一个变量。当然,你可以在里面写上默认的用户账号
2)你没看到users,那是因为你用的是DynamicUserRole,这篇文章中用的是StaticUserRole,就是说用户是写死的.

 回复 引用 查看   
#4楼 2011-05-19 14:07 john.yu      
jianyi,你好.
能否提供一个关于"动态角色"的完整例子吗?

因为flow designer是无代码开发. 但是Step3中你说要编写代码, 这个如何实现的呢?

谢谢了

 回复 引用 查看   
#5楼[楼主2011-05-19 14:14 jianyi      
@john.yu
本文就是讲动态角色阿.那个代码文后不是有的吗?QF里自定义UI的代码你应该在其他文章中可以找到.
完整的看下所有的教程吧,应该就不会提这样的问题了.

 回复 引用 查看   
#6楼 2011-07-04 22:44 john.yu      
jianyi,老师你好

按照你介绍的方法,也使用了RuleDriven控件,在initial事件中添加以下代码.
private void ruleDriven_Init(object sender, EventArgs e)
{
QuickFlow.NameCollection nextUsers = new QuickFlow.NameCollection();
nextUsers.Add("sql500\\test1");
nextUsers.Add("sql500\\test2");
base.UpdateVariable("FirstStepUsers", nextUsers);
}

运行到最后一句, 出错误.这是为啥? 不能这么写吗?
WorkflowVariable [FirstStepUsers] doesn't exist.

 回复 引用 查看   
#7楼[楼主2011-07-05 09:09 jianyi      
@john.yu
关键是:FirstStepUsers这个变量或字段存在吗?

 回复 引用 查看   
#8楼 2011-07-05 10:41 john.yu      
存在啊. 就是按照图例Step1所示创建的啊.

我重新又做了一遍,还是存在相同的问题, 请指教.


 回复 引用 查看   
#9楼[楼主2011-07-05 10:46 jianyi      
@john.yu
1)你是用VS吧?
2)用VS的情况没必要用工作流变量,直接用公共字段即可

 回复 引用 查看   
#10楼 2011-07-05 10:56 john.yu      
jianyi老师,你好
我把我做的例程序上传, 如果你方便的话, 烦请能否帮我看一下. 关于ruleDriven的FirstStepusers小问题.
http://files.cnblogs.com/johnyu/SharePointWorkflow10.rar

 回复 引用 查看   
#11楼 2011-07-05 11:42 john.yu      
@jianyi
这个...如果不指定工作流变量, 那么在RoleDefinition中指定的FirstStepUsersRole如何定义呢?

 回复 引用 查看   
#12楼[楼主2011-07-05 14:23 jianyi      
@john.yu
我在10上也有同样的问题,会尽快解决的。

 回复 引用 查看   
#13楼[楼主2011-07-05 17:11 jianyi      
@john.yu
我发现,打开XXX.Designer.cs文件,里面的字段被声明为static了,
发布前把static去掉,就好了,至于为什么是static,尚在研究中...

 回复 引用 查看   
#14楼 2011-07-05 20:39 john.yu      
哈哈.果然很神奇. 不管怎样,问题解决. 谢谢jianyi老师
 回复 引用 查看   
#15楼[楼主] 2011-07-05 20:46 jianyi      
@john.yu
已经找到解决办法,发布了新版本,请重新下载。

 回复 引用 查看