起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 207|回复: 7

【搞定】如何终止分支流程中的某一分支任务**

[复制链接]
发表于 2007-3-26 11:36:07 | 显示全部楼层 |阅读模式
请看以下的那个流程,在这种情况下,审核A通过,审核B不通过,审核C通过,但是请问为什么最后能走到审批那一步?

{A50DC59C-9F2B-4070-8BEC-DA9FFDED99F8}.jpg

35 KB, 下载次数: 116

回复

使用道具 举报

发表于 2007-3-26 11:44:23 | 显示全部楼层
审核B不通过是怎么作的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-26 11:47:14 | 显示全部楼层
我说的通过是指流程走下一步,不通过是指流程回退。没有条件
回复 支持 反对

使用道具 举报

发表于 2007-3-27 11:10:54 | 显示全部楼层

如何终止分支流程中的某一分支任务

如何编写程序终止分支流程中的某一分支任务,如终止审核B;而不是终止整个流程;

a.jpg

34.98 KB, 下载次数: 114

回复 支持 反对

使用道具 举报

发表于 2007-3-27 14:48:05 | 显示全部楼层

回复 支持 反对

使用道具 举报

发表于 2007-3-27 15:36:16 | 显示全部楼层
楼主,请稍候,正在作demo
回复 支持 反对

使用道具 举报

发表于 2007-3-27 17:44:46 | 显示全部楼层
1、在需要多人审核的环节,设置执行规则为多人,任务分配方式为独立分配
    设置流转规则:选择“任务合并”,任务等待“当前环节尚未结束的任务”

2、在需要多人审核的环节,AfterFlowBack事件编写代码,中止当前环节的其他任务
function TAndFlow.GetTasksByCurrentUnit(AProcUrl, AProcUnitID, AFlowGuid: String;
  ACurrentTaskGUID: String): TTasks;
var
  lTasks: TTasks;
  lLoadTasksParam: TLoadTaskParam;
begin
  lTasks := TTasks.Create;
  lLoadTasksParam := TLoadTaskParam.Create;
  try
    lLoadTasksParam.ProcURLs.Add(AProcUrl);
    lLoadTasksParam.ProcUnitIDs.Add(AProcUnitID);
    lLoadTasksParam.FlowGUIDs.Add(AFlowGuid);
    lLoadTasksParam.States := [TTaskState.tsStarted, TTaskState.tsWaited,
      TTaskState.tsWaiting];
    lLoadTasksParam.IncludeTaskMessage := True;
    Flow.FlowEngine.GetTasks(lLoadTasksParam, lTasks);

    lTasks.Remove(lTasks.FindTaskByGUID(ACurrentTaskGUID));
  finally
    lLoadTasksParam.Free;
    Result := lTasks;
  end;
end;

procedure TAndFlow.TasksAbort(ATasks: TTasks);
var
  lResult: Boolean;
  lDoTask: TTask;
  lTaskMessage: TTaskMessage;
  i, j   : Integer;
begin
  if ATasks = nil then
    Exit;
  AbortCount := 0;
  for i := 0 to ATasks.Count-1 do
    begin
      lDoTask := ATasks;
      for j := 0 to lDoTask.TaskMessages.Count-1 do
        begin
          lTaskMessage := lDoTask.TaskMessages.Items[j];
          if lTaskMessage.State in [TTaskMessageState.tmsProcessing,
            TTaskMessageState.tmsSend, TTaskMessageState.tmsWaited,
            TTaskMessageState.tmsWaiting] then
            lTaskMessage.State := TTaskMessageState.tmsAborted;
        end;
      lDoTask.State := TTaskState.tsAborted;
      lDoTask.SaveToDB;
      Inc(AbortCount);
    end;
end;


{当前任务回退后,将其他处在同一个环节的任务全部中止}
procedure TAndFlow.ProcUnitMID1UNITAfterFlowBack(Sender: TObject; Command: TFlowBackCommand);
var
  lTasks: TTasks;
begin
  lTasks := GetTasksByCurrentUnit(Command.FlowControl.Flow.ProcURL,
    Command.FlowControl.CurrentTask.ProcUnitID, Command.FlowControl.Flow.GUID,
    Command.FlowControl.CurrentTask.GUID);
  TasksAbort(lTasks);// then //Command.FlowControl.TaskAbort(lTasks)
    jsDialogs.ShowMsg('共有 ' + SysUtils.IntToStr(lTasks.Count) +
      ' 个任务被中止。', '提示:');
end;

flow.rar

34.05 KB, 下载次数: 33

回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-28 13:30:25 | 显示全部楼层
谢谢,结贴吧
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-28 05:02 , Processed in 0.044188 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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