起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 357|回复: 10

【结贴】如何用代码取得流程回退的默认执行者**

[复制链接]
发表于 2009-2-25 15:00:28 | 显示全部楼层 |阅读模式
如何用代码取流程回退时的默认执行者呢?
也就是现在系统默认,会自动产生的执行者,用代码怎么取?
谢谢
回复

使用道具 举报

发表于 2009-2-25 15:23:12 | 显示全部楼层
楼主,请稍等。
回复 支持 反对

使用道具 举报

发表于 2009-2-25 15:34:02 | 显示全部楼层
我简单试了一下,用下面的方式可以获取到。
procedure TMAINFORM.FlowBroker1CreateFlowBackFlowTasks(Sender: TObject; Command: TFlowBackCommand);
var
  lFlowTask:TFlowTask;
begin
  lFlowTask := Command.FlowTasks.FindFlowTask('JDLCZRKGN');
  if lFlowTask <> nil then
  begin
    Dialogs.ShowMessage(lFlowTask.Executors[0].BizURL.URL);
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-25 15:46:55 | 显示全部楼层
能不能按环节的名字,来取默认的回退执行者?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-25 15:49:16 | 显示全部楼层
比如:A流转给B,B转给C,C再转给D
那么,在D回退给C时,我想同时取到,A的执行者,怎么取呢?
回复 支持 反对

使用道具 举报

发表于 2009-2-25 16:00:30 | 显示全部楼层
那请楼主试试下面的方法
procedure TMAINFORM.FlowBroker1CreateFlowBackFlowTasks(Sender: TObject; Command: TFlowBackCommand);
var
  lTask : TTask;
  lTaskMessage : TTaskMessage;
  i,j : Integer;
  lOrgUrl : TOrgUrl;
begin
  for i := 0 to Command.FlowControl.Flow.Tasks.Count - 1 do
  begin
    lTask := Command.FlowControl.Flow.Tasks;
    if lTask <> nil then
    begin
      if SysUtils.SameText(lTask.ProcUnitID,'JDLCZRKGN' ) then //是否是你要的主流程的环节任务
      begin
        for j := 0 to lTask.TaskMessages.Count - 1 do
        begin
          lTaskMessage := lTask.TaskMessages[j];
          lOrgUrl := Org.TOrgURL.Create(lTaskMessage.ReceiverDeptID,
                           lTaskMessage.ReceiverPositionID,lTaskMessage.ReceiverID);
          Dialogs.ShowMessage(lOrgUrl.BizURL.URL);
        end;
      end;
    end;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-25 16:12:36 | 显示全部楼层
试一下先~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-25 16:37:07 | 显示全部楼层
这个不行,A发任务给B时,进行了拆分,同时发给B1、B2分别处理,分别成为两条任务(独立分配、独立执行),给C。C再给D
我想在D退回C以后,C打开单据,只看到,B1发给他的相关内容,不会看到B2发的
所以我想知道这个被退回的单子是B1发给他的,还是B2
我只能现在数据集的Open事件里进行过滤,那里面还没有Command.FlowControl的。
回复 支持 反对

使用道具 举报

发表于 2009-2-25 17:58:26 | 显示全部楼层
不知道我理解的对不对,你这个b环节是设置的任务协作多处理人独立分配的,流程图是仅仅一个b环节,对吗?

我按下面的测试了一下,看是否能满足你的要求。
procedure TMAINFORM.Button1Click(Sender: TObject);
var
  lPrevGUID : String;
  lTask : TTask;
  lTaskMessage : TTaskMessage;
  i,j : Integer;
  //lOrgUrl : TOrgUrl;
begin      //
  //lPrevGUID := TFlowBroker(FlowBroker1).FlowControl.CurrentTask.PrevGUID;
  lTask := TFlowBroker(FlowBroker1).FlowControl.CurrentTask;//TFlowBroker(FlowBroker1).FlowControl.FindTaskByGUID(lPrevGUID);
  while lTask <> nil do
    if not SysUtils.SameText(lTask.ProcUnitID,'JDLCZZJHJ') then
    begin
      lPrevGUID := lTask.PrevGUID;
      lTask := TFlowBroker(FlowBroker1).FlowControl.Flow.Tasks.FindTaskByGUID(lPrevGUID);
    end else break;
  if lTask <> nil then
    dialogs.ShowMessage(lTask.TaskMessages[0].ReceiverName);
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-26 09:41:21 | 显示全部楼层
非常感谢zfang,已经解决问题了,回帖也很及时,谢谢!
结贴~
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-27 12:20 , Processed in 0.044312 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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