起步软件技术论坛-X3

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

【结】关于RunFunc函数的参数传递

[复制链接]
发表于 2009-8-4 11:00:45 | 显示全部楼层 |阅读模式
写了个公共函数根据不同条件判断是否能启动流程
函数中用到了 这个启动其它功能的函数
  SystemCore.TSystemCore.FuncManager.RunFunc(Context,'', sRKGNID,     SysUtils.Format('-vvmTaskDetail  -l%s',[sXMXH]) ,  False, nil, False);  但是编译的时候提示“没有匹配的方法”,是不是context这个参数没有传递的原因,如果是 context 参数 该怎么传递




procedure TAddMenuItems.StartUpFlow(sRKGNID,sLCURL,sXMXH,sSFCFQD: String);
Const sSQL = 'select Count(*) as cnt from TTASK,TFLOWID  '
           + 'where TTASK.FFLOWGUID = TFLOWID.FFLOWGUID  '
           + 'AND TTASK.FSTATE NOT IN (''tsFinished'',''tsAborted'',''tsCanceled'',''tsReturned'') '
           + 'AND TTASK.FPROCURL = ''%s'' '
           + 'AND TFLOWID.FID = ''%s'' ';
      sSQL1 = 'select Count(*) as cnt from TTASK,TFLOWID  '
           + 'where TTASK.FFLOWGUID = TFLOWID.FFLOWGUID  '
           + 'AND TTASK.FPROCURL = ''%s'' '
           + 'AND TFLOWID.FID = ''%s'' ';
Var
  Query :TQuery;
  exist: Boolean;
begin
  // sSFCFQD=(0,1,2);
  //  0 流程能重复启动但同时只存在一次流程
  //  1 流程能重复启动多次
  //  2 流程只能启动一次



  /// sSFCFQD=1 任何情况下都能启动流程
  if sSFCFQD <> '1' then
  begin
      Query := TQuery.Create(nil);
      try
        Query.ConnectionString := 'DatabaseURL=Biz:\SYSTEM\SYSTEM.DATABASE';
        if sSFCFQD='0' then
          Query.CommandText := SysUtils.Format(sSQL,[sLCURL,sXMXH]) ;
        if sSFCFQD='2' then
          Query.CommandText := SysUtils.Format(sSQL1,[sLCURL,sXMXH]) ;
        Query.Open;
        if Query.FieldbyName('cnt').AsInteger > 0 then
          exist := True
        else exist := False;
      finally
        Query.Free;
      end;

      //// sSFCFQD 判断是否可以重复启动 如果不能重复 则 需判断 流程中是否已存在
      if (sSFCFQD='0') and (exist = True) then
      begin
        jsDialogs.ShowMsg('该任务正在流程处理中。。。','提示');
        SysUtils.Abort;
      end else
      begin
        if (sSFCFQD='2') and (exist = True)  then
        begin
          jsDialogs.ShowMsg('该任务不能再次启动流程','提示');
          SysUtils.Abort;
        end;
      end;
  end;
    SystemCore.TSystemCore.FuncManager.RunFunc(FContext,'', sRKGNID,     SysUtils.Format('-vvmTaskDetail  -l%s',[sXMXH]) ,  False, nil, False);
end;
回复

使用道具 举报

发表于 2009-8-4 11:07:47 | 显示全部楼层
Context就是传入相应的环境。具体需要你根据实际来传入。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-4 11:16:02 | 显示全部楼层
我比如说 我的信息中调用这个公共函数启动其它的功能 这个参数要怎么传呢
回复 支持 反对

使用道具 举报

发表于 2009-8-4 11:47:52 | 显示全部楼层
context.parent试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-4 13:22:45 | 显示全部楼层
还是不行 说什么类型冲突

1.jpg

217.13 KB, 下载次数: 237

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-4 13:25:08 | 显示全部楼层
Create(AXMLX,AFunID,AXMXH,AZT: string; PopupMenu: TPopupMenu;AContext: TContext)


定义 AContext是 TContext  怎么会不匹配
回复 支持 反对

使用道具 举报

发表于 2009-8-4 13:56:03 | 显示全部楼层
具体你可以看看平台中的资源集相关用法
比如
业务模型\系统空间\系统运行库\系统核心库
RunFunc方法
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-4 14:12:38 | 显示全部楼层
我看过了
procedure RunFunc(AContext: TContext; const AUniqueID, AFuncURL, AParams: string; UseUI: Boolean; BeforeRunFunc: TFuncNotifyEvent; Modal: Boolean); overload;


但是我把context.parent 传个TAddMenuItems.create(AXMLX,AFunID,AXMXH,AZT: string; PopupMenu: TPopupMenu;AContext: TContext );//



HSZYJ.TAddMenuItems.Create(dsbXMB.DataSet.FieldByName('XMLX').asString,FuncBroker.Func.ID,dsbXMB.DataSet.FieldByName('XH').asString,dsbXMB.DataSet.FieldByName('XMZT').asString,
  PopupMenu,context.parent );//

就跳图片中的那个错误 这个参数到底要怎么才能传到我自己的函数库的函数中 要不你测试一个试一下怎么回事
回复 支持 反对

使用道具 举报

发表于 2009-8-4 14:44:01 | 显示全部楼层
我怎么测试呢,TAddMenuItems.create这个是什么东西我都不知道。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-4 14:51:30 | 显示全部楼层
你就在函数库里 写个函数A 这个A函数里包含RunFunc这个函数,而 RunFunc的参数是通过外部传入,最后外部调用函数A 测试
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-18 08:44 , Processed in 0.043415 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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