起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 538|回复: 11

[请求]代码控制流程流转**

[复制链接]
发表于 2009-5-22 16:46:04 | 显示全部楼层 |阅读模式
我现在想实现的功能是如果某一任务过期后还没有被处理,则它会自动流转到下一环节。请问如何在流程外部用代码控制这种流程的流转。也就是通过timer来检查控制流转。或者x3系统中是否已经实现了我想要的功能。谢谢。
回复

使用道具 举报

发表于 2009-5-22 16:56:27 | 显示全部楼层
平台里面没有这个功能。
你看看alang的分享帖子,怎么代码操作流程。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-25 10:43:59 | 显示全部楼层
我在用代码控制流程流转到下一个环节之后,可原来的环节并没有在工作台中消失,而是两个环节都出现在了工作台中,请问如何让原先的环节在工作台中消失。我的测试代码是:
var
  lid,ldept,lgw:string;
begin
  lid :=TSystemCore.Operator.ID;
  ldept := TSystemCore.Operator.Positions[0].DeptID;
  lgw := TSystemCore.Operator.Positions[0].Position.ID;
  //Biz:\ZSGL\ZSLR\ZSLRLC.PROC
  COMMONLIB.TCOMMONLIB.UserStartFlow(self.Context, 'Biz:\ZSGL\ZSLRLC.PROC', 'CLRXGGN', '6FBFE989C2274FCDAFEE5150C0D617DD', 'hello', 'sh', ldept, lgw, lid);
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-25 11:19:39 | 显示全部楼层
在线等...................................
回复 支持 反对

使用道具 举报

发表于 2009-5-25 13:17:17 | 显示全部楼层
参考一下:5楼,先找到要运行任务,然后把任务运行起来,在flowout
http://bbs.justep.com/forum.php? ... 4%B6%AF%C1%F7%D7%AA
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-25 15:12:49 | 显示全部楼层
DoGetFlowGUIDs()函数在哪里找?
回复 支持 反对

使用道具 举报

发表于 2009-5-25 15:56:59 | 显示全部楼层
在练接中的3楼,这个事自定义的函数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-26 13:05:47 | 显示全部楼层
现在可以用代码控制流程流转了。但是每次流转时都会显示一下运行窗体,我想不让运行窗体显示出来,该怎样解决呢?以下是我的测试代码:
procedure TMainForm.Button3Click(Sender: TObject);
var
  lTaskParam: TLoadTaskParam;
  lFlowParam: TLoadFlowParam;
  lTasks: TTasks;
  lDataSet: TDataSet;
  lFunc: TFunc;
  lFlowControl: TFlowControl;
begin
  zslr.DataSet.Open;
  lDataSet:= zslr.DataSet;
  if not lDataSet.Active or lDataSet.Eof then
    Exit;
  dialogs.ShowMessage(sysutils.inttostr(lDataSet.RecordCount));
  lFlowParam := TLoadFlowParam.Create;
  lTaskParam := TLoadTaskParam.Create;
  lTasks := TTasks.Create;
  try

    DoGetFlowGUIDs(lDataSet.FieldByName('SQBH').AsString,lFlowParam.GUIDs);
    lTaskParam.States := [TTaskState.tsStarted, TTaskState.tsProcessing, TTaskState.tsWaiting];
    //以给定的条件查询任务(这里给定的条件由lFlowParam给出,根据流程Guid值查询,lTaskParam条件是按照任务状态,只查询出需要处理的任务)
    Flow.FlowEngine.GetTasks(lFlowParam, lTaskParam, lTasks);
    lFunc := SystemCore.TSystemCore.FuncManager.RunTask(SystemCore.TSystemCore.Operator.Positions[0], lTasks[0]);
  //如果需要自动流转,则需要下面的代码vvvvvvvvvvvvvv
    lFlowControl := lFunc.Context.GetParentContext(BizSys.IL_FLOW).Owner as TFlowControl;
    lFlowControl.FlowOut(nil);
  finally
    lFlowParam.Free;
    lTaskParam.Free;
    lTasks.Free;
  end;

end;

//查询流程ID表,根据流程ID,查询出对应的FlowGuid值
procedure DoGetFlowGUIDs(const AFlowID: string; AFlowGUIDs: TStrings);
begin
  Query:= tquery.Create(nil);
  Query.ConnectionString:= 'DATABASEURL=Biz:\SYSTEM\SYSTEM.DATABASE';
  Query.CommandText := SysUtils.Format('SELECT FFLOWGUID FROM TFLOWID WHERE FID = ''%s''', [AFlowID]);
  Query.Open;
  while not Query.Eof do
  begin
    AFlowGUIDs.Add(Query.FieldByName('FFLOWGUID').AsString);
    dialogs.ShowMessage(Query.FieldByName('FFLOWGUID').AsString);
    Query.Next;
  end;
  Query.Close;
end;
回复 支持 反对

使用道具 举报

发表于 2009-5-26 15:24:18 | 显示全部楼层
现在可以用代码控制流程流转了。但是每次流转时都会显示一下运行窗体,我想不让运行窗体显示出来,该怎样解决呢?以下是我的测试代码:

这个窗体时那个窗体呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-26 15:57:47 | 显示全部楼层
就是用代码启动运行的那个窗体。例如:我通过查询要代码启动运行“申请功能”,使它流转到“审批功能”。这样,在流转过程中会显示一下“申请功能”的运行窗体,现在是想控制流转过程中不要显示出“申请功能”的运行时窗体,而流转到“审批功能”。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-20 18:34 , Processed in 0.037059 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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