起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 788|回复: 0

如何控制某个流程某个用户只能启动一次

[复制链接]
发表于 2004-4-2 14:59:10 | 显示全部楼层 |阅读模式
如果需要人员只能启动一次某个流程,当执行完上一次启动的流程实例以后,才可以再次启动流程实例。查找在这个流程的流程实例中是否有当前人员启动的,并且流程实例处于处理中和等待中状态中的任务,如果任务数大于0表示这个人已经启动了流程实例,就不让他再启动了,从而达到某个流程只能让某个人员启动一次的目的。

实现步骤:

1、你需要设置流程的“启动模式”为“处理时”;

2、在入口功能的  BeforFlowOut 的事件上写:

procedure TMainForm.FlowDDLRBeforeFlowOut(…);
var
  lOrgURL: TOrgURL;
  lTaskList: TObjectList;
  lFlowList: TObjectList;
  lLoadTaskParam: TLoadTaskParam; //任务参数列表
  lLoadFlowParam: TLoadFlowParam; //流程参数列表
  I: Integer;
  lTask: TTask;
  lUnFinishedCount: Integer;
begin
  lOrgURL := TOrgURL.Create('XSB', 'XSY', 'ZXX'); //创建组织单元
  lTaskList := TObjectList.Create;
  lFlowList := TObjectList.Create;
  lLoadTaskParam := TLoadTaskParam.Create;
  lLoadFlowParam := TLoadFlowParam.Create;
  try
    lLoadTaskParam.Senders.Add(lOrgURL); //当前操作者
    //流程的BizURL
    lLoadTaskParam.ProcURLs.Add(Command.FlowControl.Proc.BizClassURL.BizURL.URL);
    //流程入口功能的    ID
   lLoadTaskParam.ProcUnitIDs.Add('DDLR');
    //得到当前操作者所有的该流程的任务列表
    Business.Model.Flow.Task.TaskManager.GetTasks(lLoadTaskParam, lTaskList);   
    for I := 0 to lTaskList.Count - 1 do
    begin
      lTask := TTask(lTaskList.Items[I]);
      lLoadFlowParam.GUIDs.Add(lTask.FlowGUID);
    end;
    //流程实例状态处于处理中或者等待中
    lLoadFlowParam.States := [TFlowState.fsProcessing, TFlowState.fsWaiting];
    if lLoadFlowParam.GUIDs.Count > 0 then
    begin
      Flow.FlowEngine.GetFlows(lLoadFlowParam,lFlowList);
      Command.Accept := lFlowList.Count <= 1;
      if not Command.Accept then   //如果有其他流程启动就不允许流转
        Dialogs.ShowMessage('你要启动的流程还没有结束,稍后再启动... ');
    end
    finally
    lFlowList.Free;
    lTaskList.Free;
    lLoadTaskParam.Free;
    lLoadFlowParam.Free;
  end;
end;
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 00:06 , Processed in 0.035938 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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