起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 248|回复: 8

【搞定】关于流程事件的问题**

[复制链接]
发表于 2006-9-28 15:49:22 | 显示全部楼层 |阅读模式
我想限制执行人的范围, 根据人员的部门和岗位来限定,但是发现如果用FlowBroker1BeforeFlowOut, 就是找不到指定的环节,而如果用FlowBroker1CreateFlowOutFlowTasks事件,就能找到, 我觉得很奇怪,是不是与环境有关呢?
代码如下
procedure TQB_ZPZX.FlowBroker1CreateFlowOutFlowTasks(Sender: TObject; Command: TFlowOutCommand);
var //lDeptID: string;
     lFlowTask:TFlowTask;
     lexecrange:string;
     lperson: string;
begin
    lFlowTask:=command.FlowTasks.FindFlowTask('QB_ZX') ;
    // lexecrange:='';
    // ldeptID:='';
    if lflowTask<>nil then  //这个事件下,lflowtask是找到了.
      begin
         //  ldeptID:=datasetbroker1.dataset.fieldbyname('ZXBM').asstring; //取得字段内容,为执行部门id串
          lflowtask.ProcUnit.ID :='QB_ZX';
          lFlowTask.Executors.Clear;
            //OrgChildren(OrgKey('lDept', 'JL', '') , '', False, False)
          lperson:=
          lexecrange:='OrgChildren(OrgKey('''+datasetbroker1.dataset.fieldbyname('ZXBM').asstring+''',''YHBMZH'',''''),'''',false,false)';
         lFlowTask.AllowExecutorRange:=lexecrange;
         lFlowTask.ExecutorRange:=lexecrange;

      end;
end;

procedure TQB_ZPZX.FlowBroker1BeforeFlowOut(Sender: TObject; Command: TFlowOutCommand);

var
     lFlowTask:TFlowTask;
     lexecrange:string;
begin
     lFlowTask:=command.AllowFlowTasks.FindFlowTask('QB_ZX'); //FindFlowTask('QB_ZX') ;
     if lflowTask<>nil then    //在这个事件下,lflowtask是空的
      begin
         //  ldeptID:=datasetbroker1.dataset.fieldbyname('ZXBM').asstring; //取得字段内容,为执行部门id串
          lflowtask.ProcUnit.ID :='QB_ZX';
          lFlowTask.Executors.Clear;
            //OrgChildren(OrgKey('lDept', 'JL', '') , '', False, False)
          lexecrange:='OrgChildren(OrgKey('''+datasetbroker1.dataset.fieldbyname('ZXBM').asstring+''',''YHBMZH'',''''),'''',false,false)';
         lFlowTask.AllowExecutorRange:=lexecrange;
         lFlowTask.ExecutorRange:=lexecrange;

      end;
end;
回复

使用道具 举报

 楼主| 发表于 2006-9-28 15:52:37 | 显示全部楼层
再补充一下, 其中datasetbroker1.dataset.fieldbyname('ZXBM').asstring 中的ZXBM是临时字段
回复 支持 反对

使用道具 举报

发表于 2006-9-28 15:59:10 | 显示全部楼层
请看
http://bbs.justep.com/forum.php?mod=viewthread&tid=730

  • 根据流转规则,判断是否可以流转
  • 触发BeforeFlowOut事件
  • 根据流程定义查找允许的下一个环节,如果有条件环节、条件分支环节,触发OnCalcProcCondition事件
  • 根据流程下一个环节的执行规则,创建流程任务FlowTask
  • 触发OnCreateFlowOutFlowTasks事件
  • 如果没有屏蔽流转对话框,弹出流转对话框,用户选择任务和执行者等,点击确定;如果取消,则退出执行下面的过程
  • 触发AfterFlowOut事件
    [/list=1]


    在BeforeFlwoOut事件中,还计算下一个环节是谁,当然就找不到了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-28 16:05:39 | 显示全部楼层
我可是按照http://bbs.justep.com/forum.php?mod=viewthread&tid=4085 这个帖子的内容做的啊
回复 支持 反对

使用道具 举报

发表于 2006-9-28 16:38:41 | 显示全部楼层
不好意思,那个帖子有问题,已经修改了,多谢bearnet
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-28 16:44:39 | 显示全部楼层
procedure TQB_ZPZX.FlowBroker1CreateFlowOutFlowTasks(Sender: TObject; Command: TFlowOutCommand);
var //lDeptID: string;
     lFlowTask:TFlowTask;
     lexecrange:string;
     lperson: string;
begin
    lFlowTask:=command.FlowTasks.FindFlowTask('QB_ZX') ;
    // lexecrange:='';
    // ldeptID:='';
    if lflowTask<>nil then
      begin
         //  ldeptID:=datasetbroker1.dataset.fieldbyname('ZXBM').asstring; //取得字段内容,为执行部门id串
          lflowtask.ProcUnit.ID :='QB_ZX';
          lFlowTask.Executors.Clear;
            //OrgChildren(OrgKey('lDept', 'JL', '') , '', False, False)
         // lperson:=
          lexecrange:='OrgChildren(OrgKey('''+datasetbroker1.dataset.fieldbyname('ZXBM').asstring+''',''YHBMZH'',''''),'''',True,false)';
         lFlowTask.AllowExecutorRange:=lexecrange;
      //   lflowtask.ExecutorKinds :=[TTaskExecutorKind.ekPersonMember];
         lFlowTask.ExecutorRange:=lexecrange;


      end;
end;
回复 支持 反对

使用道具 举报

发表于 2006-9-29 10:06:57 | 显示全部楼层
就差一句话,把
lFlowTask.Executors.Clear; 注释掉
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-29 10:37:12 | 显示全部楼层
的确好了,谢谢alang的鼎力相助,结贴吧.
回复 支持 反对

使用道具 举报

发表于 2007-5-28 11:22:25 | 显示全部楼层
发错了 不好意思
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-10 23:59 , Processed in 0.037957 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表