最近在做一个工作流的东西,要用到有关动态角色 .留下备忘!
胡长城的原话:
动态角色,一般表示的是在任务实例运行过程中,才能够根据一些条件,计算出执行人的角色。
在工作流运转中,未必所有的静态角色都可以很良好的解决所有问题,注意我用的是“良
好”一词。既然工作流中已经存在一些预定的角色,应该可以满足大部分的权限控制之类的
问题。但是,预定的所有静态角色都是很不灵活的。
工作流本身是一个动态的产物,为因为其动态的运转而产生一些动态的需求。动态角色
的也就是为了在角色这一层,尽量解决好一些动态用户问题。
解决动态的问题,一般都需要一些“适当规则”来约束,从而使动态问题可以按照一定
原则抽象解决。
有必要提一下,动态角色,一般仅用来解决动态用户集问题,而不会为动态用户专门分
配权限。流程运转中,属于动态角色中的用户,会依据其所属的静态角色,而获取相应的权
限。
我要做的一个应用大概是这样的:比如一个请假条,首先是请假人填写请假条,然后给他的上级领导审核,对不同的人请假其上级是不同的.这就涉及到动态角色的问题.还有请假人销假(这个节点任务),它的执行人也是动态的.因为我们无法预知是谁请假.
根据以上的理解:
以下是我做的部分代码:
function wf_task_rowcheck($taskid,$isdept,$userdata)
{
global $db_link;
$ret=array();
$tmp_taskarr=task_getarray_onlyid($taskid);
$tmp_task_name=$tmp_taskarr[4];
if($tmp_task_name=="某任务"){
$sql="select xx from table where ...";
$dbresult=dbx_query($db_link,$sql);
if(!is_object($dbresult) || $dbresult->rows<1){
return $ret;
}
else{
$ret[]=$dbresult->data[0]['xx'];
return $ret;
}
}
else{
return wf_task_rowcheck_base($taskid,$isdept,$userdata);
}
}
思路:
如果是一般的非动态角色的处理,就直接调用函数,对于动态的加上条件.