起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 237|回复: 9

【结帖】代码设置流程执行者范围问题 急!! 在线等**

[复制链接]
发表于 2008-1-11 11:36:14 | 显示全部楼层 |阅读模式
由于下一流程环节的执行者范围需要根据当前业务数据确定,故在CreateFlowOutFlowTasks事件中写了如下代码:
      lOrgURL := TOrgURL.Create(Mains.FieldByName('BUY_DEPT_COD').AsString, '', '');
      lFlowTask.Executors.Add(lOrgURL);
      sRange := 'OrgChildren(OrgKey('''+Mains.FieldByName('BUY_DEPT_COD').AsString+''', '''', ''''), '''', True, True)';
      lFlowTask.ExecutorKinds := [TTaskExecutorKind.ekPersonMember];
      lFlowTask.ExecutorAmount:=TTaskExecutorAmount.teaMulti;
      lFlowTask.ExecuteMode := TTaskExecuteMode.emExclusive;
      lFlowTask.ExecutorMustBeFuncOwner := True;
      lFlowTask.ExecutorRange := sRange;
      lFlowTask.AllowExecutorRange := sRange;
但是在功能流转过程中为何选不到执行者,如下图

1.jpg

46.69 KB, 下载次数: 162

回复

使用道具 举报

发表于 2008-1-11 13:51:56 | 显示全部楼层
你设置断点跟踪了,在弹出这个界面前或者弹出后执行到CreateFlowOutFlowTasks 这个事件了吗?没有吧,CreateFlowOutFlowTasks 这个事件是在点击流转对话框上点击确定按钮后才会去执行的
如果要在这个对话框中看到,那么写到BeforeFlowOut事件上。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-11 14:01:02 | 显示全部楼层
执行了,这个问题解决了,他们没有把下一环节的功能分配给相应的操作者。
还有一个问题,如果我想通过代码获取某一部门下的所有人员成员,添加到默认执行者中,应该怎么写?
回复 支持 反对

使用道具 举报

发表于 2008-1-11 14:18:10 | 显示全部楼层
执行了?不会吧,
在点击流转按钮后,弹出流程执行者的选中对话框时,执行到CreateFlowOutFlowTasks 事件了,不可能的,你再仔细跟踪一下。
回复 支持 反对

使用道具 举报

发表于 2008-1-11 14:50:25 | 显示全部楼层
1楼应该是对的。取某部门的子。

改到beforeflowout事件里面,并分配了功能权限就应该行了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-11 14:57:08 | 显示全部楼层
我在点击了流转按钮后,在弹出“流转”对话框前,执行了CreateFlowOutFlowTasks中的代码。
回复 支持 反对

使用道具 举报

发表于 2008-1-11 16:15:23 | 显示全部楼层
1楼代码后面添加2行代码
lFlowTask.ReLoadAllowExecutors;
      lFlowTask.ReLoadExecutors;
应该就能出现默认执行者了
回复 支持 反对

使用道具 举报

发表于 2008-1-11 16:26:37 | 显示全部楼层
知道了,抱歉,是我记差了,。
回复 支持 反对

使用道具 举报

发表于 2008-1-11 16:59:57 | 显示全部楼层
屏蔽 “业务模型\系统管理\简洁风格\界面库\窗体库\标准风格主窗体”这个窗体上的代码

//去掉记录默认执行者
{ TSystemCore.FlowManager.OnCreateFlowTasks := DoOnCreateFlowTasks;
  TSystemCore.FlowManager.AfterFlowCommand := DoAfterFlowCommand;
  }

清空 业务模型\系统空间\系统数据库\流程默认执行者表  的数据
procedure TMainForm.FlowBroker1CreateFlowOutFlowTasks(Sender: TObject; Command: TFlowOutCommand);
var
   i:integer;

  lFlowTask:TFlowTask;
  lOrgURL: TOrgURL;
  sRange:String;

begin
  
    lFlowTask := Command.FlowTasks[0];
  if  lFlowTask <> nil then
  begin

      sRange := 'OrgSelect(orgcondition('+''''+'*.psm'''+',ISPLAYNAME ='+''''+'jhm'+''''+','+''''+'''))';

      lFlowTask.ExecutorKinds := [TTaskExecutorKind.ekPersonMember];
      lFlowTask.ExecutorAmount:=TTaskExecutorAmount.teaMulti;
      lFlowTask.ExecuteMode := TTaskExecuteMode.emExclusive;
      lFlowTask.ExecutorMustBeFuncOwner := false;
      lFlowTask.ExecutorRange := sRange;   
      
      lFlowTask.AllowExecutorRange := sRange;
   

  end;

end;

这样写也可以
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-12 09:31:59 | 显示全部楼层
感谢atiger和lixy的帮助,问题解决了,请结贴!
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-5 06:50 , Processed in 0.042376 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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