起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 3094|回复: 3

如何代码启动流程

 关闭 [复制链接]
发表于 2004-5-24 09:40:20 | 显示全部楼层 |阅读模式
在代码中创建流程控制组件(TFlowControl),对流程参数进行赋值,用这个组件来启动流程实例,并且把这个流程实例保存到系统数据库中。

procedure TMainForm.UserStartFlow
(AFlowUrl,ADept,ARole,APerson,AStartProc,AFlowID,ASubject,ADescription:string);
var
  lBizURL: TBizURL;
  lFlowValue: TFlowValue;
  lFlowControl: TFlowControl;
  lExecutor: TOrgURL;
begin
  lBizURL := TBizURL.Create;
  lFlowValue := TFlowValue.Create;
  lFlowControl := TFlowControl.Create(Self.Context);
  lExecutor := TOrgURL.Create(ADept, ARole, APerson);
  lBizURL.URL := AFlowUrl;
  try
    lFlowValue.IDs.Add(AFlowID);            //流程ID
    lFlowValue.Subject := ASubject;          //流程主题
    lFlowValue.Description := ADescription;   //流程描述
    //启动流程实例
    lFlowControl.StartupFlow(lBizURL, AStartProc, lExecutor, lFlowValue);
    //流程实例数据保存到数据库
    lFlowControl.FlowRunnerbyIndex[0].CurrentTask.SaveToDB;
  finally       
    lFlowControl.Free;
    lFlowValue.Free;
    lBizURL.Free;
  end;
end;
回复

使用道具 举报

发表于 2005-6-10 09:46:43 | 显示全部楼层

补充

关于流程实例的:“开始时间”和“结束时间”是不能维护的,在流程启动时,平台自动维护,结束时间也是如此。

lFlowControl.StartupFlow(lBizURL,AStartProc,lExecutor,lFlowValue);   //启动流程
此时,发送者和接受者都是lExecutor,如果要修改,可以在Save前赋值
...
  begin
...
    lExecutor := TOrgURL.Create('BM1','GW1','RY1'); //传入发起者的部门、岗位、人员
    lFlowControl.StartupFlow(lBizUrl,'BMSP',lExecutor,lFlowValue);
    lFlowControl.FlowRunnerbyIndex[0].CurrentTask.PreemptMode := TTaskPreemptMode.omFirstProcess;
    lFlowControl.FlowRunnerByIndex[0].CurrentTask.TaskMessages[0].ReceiverDeptID := GGHS.TGGHS.GetDeptName(BizUrlValue.ID);//传入接收者的部门ID
    lFlowControl.FlowRunnerByIndex[0].CurrentTask.TaskMessages[0].ReceiverPositionID := GGHS.TGGHS.GetPositionName(BizUrlValue.ID); //传入接收者的岗位ID
    lFlowControl.FlowRunnerByIndex[0].CurrentTask.TaskMessages[0].ReceiverID := BizUrlValue.ID; //传入接收者的人员ID
    lFlowControl.FlowRunnerByIndex[0].CurrentTask.SaveToDB;
  end;
回复 支持 反对

使用道具 举报

发表于 2005-9-24 14:29:37 | 显示全部楼层

代码启动流程实例后,实现任务强占方式为第一个打开

实现代码参考如下:

在lFlowControl.FlowRunnerbyIndex[0].CurrentTask.SaveToDB;
之前加一句
lFlowControl.FlowRunnerbyIndex[0].CurrentTask.PreemptMode := 1;


注:这个方法仅仅适用于1554以前的版本(包括1554)
回复 支持 反对

使用道具 举报

发表于 2007-11-1 15:06:50 | 显示全部楼层
代码启动流程其实是创建一个流程实例,然后为某个用户产生一个这个流程实例上某个环节上的任务。
有时需要在创建了任务以后,马上运行起来这个任务,就可以参考 http://bbs.justep.com/forum.php?mod=viewthread&tid=18984
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-22 19:43 , Processed in 0.039429 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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