起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 360|回复: 14

【结帖】代码创建非流程任务-不能处理

[复制链接]
发表于 2007-8-24 17:05:01 | 显示全部楼层 |阅读模式
上次我参照 http://bbs.justep.com/forum.php? ... E%CE%F1%B9%D8%C1%AA

代码可以创建的待办任务,但不能处理

而且还有一个问题, 这个任务的提交者和执行者都变成的我指定的的执行者, 比如用户A给用户B代码创建一个任务, 到创建的任务的提交者和执行者都是B
回复

使用道具 举报

 楼主| 发表于 2007-8-24 17:11:21 | 显示全部楼层
procedure TTaskPubFunc.UserStartTask(AFuncURL, ATaskTypeName, ATaskTypeID,
  ASubject, ABizField, ABizFieldValue, ADept, APosition, APerson : string);
VAR
  lOrgURL : TOrgURL;
  lTask   : TTask;
  lTaskBizData : TTaskBizData;
  lTaskBizDataRec : TTaskBizDataRec;
begin
  lTask := TTask.Create;

  {任务接受者}
  lOrgURl := TOrgURL.Create(ADept, APosition, APerson);

  {任务业务关联数据定义}
  lTaskBizData := TTaskBizData.Create;
  lTaskBizDataRec := TTaskBizDataRec.Create;
try
  lTaskBizDatarec.BizField := ABizField;       //业务数据的关键字段,用于检索业务数据
  lTaskBizDataRec.Value := ABizFieldValue;     //业务数据的关键字段值
  lTaskBizData.BizDataKeys.Add(lTaskBizDataRec);
  //lTaskBizData.BizDatas.Add(lTaskBizDataRec);

  {任务信息的定义}
  lTask.Subject := ASubject;
  lTask.Kind:= '';                             //无流程任务为空
  lTask.TaskType := ATaskTypeID;               //任务类型,如:工作任务:WORKTASKDEAL, WORKTASK
  lTask.TaskTypeName := ATaskTypeName;
  lTask.FuncURL := AFuncURL;                   //处理任务的功能
  lTask.SenderDeptID := ADept;
  lTask.SenderPositionID := APosition;
  lTask.SenderID := APerson;
  lTask.BizDatas.Add(lTaskBizData);            //设置业务数据与任务关联关系, 保存任务业务关联信息到‘系统空间\系统数据库\任务业务数据表’

  lTask.TaskMessages.AddTaskMessage(nil, lOrgURl, TTaskmessagestate.tmsSend, 0,
    False);                                    //添加到任务列表

  {保存任务}
  Flow.FlowEngine.SaveTask(lTask);             //保存任务信息到‘系统空间\系统数据库\任务表’,任务消息到‘任务消息表’
finally
  //lTaskBizDataRec.Free;
  //lTaskBizData.Free;
  lTask .Free;
  lOrgURL.Free;
end;





任务中是不是通过 lTask.SenderID 和lTask.TaskMessages.AddTaskMessage(nil, lOrgURl, 中的 lOrgURl 来区分任务创建者和执行者的吗?
回复 支持 反对

使用道具 举报

发表于 2007-8-24 17:46:10 | 显示全部楼层
是的,但是2楼的这个函数可以看出任务的提交者和接收者就是一样的了.需要自己改一下这个函数把提交者和接收者分开.
处理问题正在看.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-24 17:47:38 | 显示全部楼层
我的需求是这样

有多个业务需要用到相同格式的未流程的通知提醒任务, 我想通过一个统一的入口代码生成待办任务(我现在的放在一个资源集里),  待办任务的处理功能我在任务关联里面做的定义的


能不能给我做一个完整的例子呢
回复 支持 反对

使用道具 举报

发表于 2007-8-25 10:19:30 | 显示全部楼层
现在的处理任务机制有变化。

你自己代码创建的任务如果需要在任务中心新建,必须要用任务关联定义功能定义一个任务类型
回复 支持 反对

使用道具 举报

发表于 2007-8-27 09:57:51 | 显示全部楼层
楼主,这个问题怎样了?
按照5楼说的,在任务关联定义功能中定义一个任务类型,就是你代码生成的任务的类型.定义好后就可以处理了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-27 22:31:10 | 显示全部楼层
不能处理, 处理的时候报数据错误 data error, 我是用上面2楼这段代码新建一个非流传的代办任务, 处理人在处理中心处理时出错的,处理的功能我是在任务关联里面定义了的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-27 22:41:21 | 显示全部楼层
我处理功能在任务关联里面的定义也应该是正确的,
我模仿系统协同里面自带的工作提醒功能,一个启动任务的功能A,一个处理任务的功能B,然后在按照任务关联里面作相应的配置,通过功能A产生的任务,在功能B是可以处理的
但当我通过2楼那段代码生成任务时,功能B处理时会报数据错误的错误
回复 支持 反对

使用道具 举报

发表于 2007-8-28 09:00:19 | 显示全部楼层
应该是你的任务关联定义有问题,你调用2楼的代码的函数是怎么写的,这个要和任务关联定义里的定义保持一致.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-28 10:13:27 | 显示全部楼层
下面是我生成流程的代码
---------------------------------------------------------------------------------------------------------
static procedure TTZTX.saveGZTX(Context :TContext; Const dw,zt,nr,cbnbid,cmnbid :String);
var
  FQuery: Business.Data.TQuery;

  busiDataID, displayNUM :String;

  tpf : TTaskPubFunc;
  AFuncURL, ATaskTypeName, ATaskTypeID, ASubject, ABizField, ABizFieldValue,
  ADept, APosition, APerson : string;

  j :Integer;
  lBizUrl: TBizUrl;
  tjr,tjjs : string;
  olist:Business.Model.Org.TOrgURLs;

begin

  if (length(dw) = 0) OR (length(zt) = 0) OR (length(nr) = 0)  then
  begin
    exit;
  end;


  FQuery := Business.Data.TQuery.Create(nil);
  FQuery.ConnectionString := Format('DataBaseURL=%s', ['Biz:\CBCM\CBCMSJK.Database']);

  tpf := TTaskPubFunc.Create(Context);

  olist:= Business.Model.Org.TOrgURLs.Create;
  orgSys.OrgSystem.GetOrgURLsByOrgExpr('OrgChildren(OrgKey(''' + dw + ''', ''YWY'', ''''), '''', True, False)',olist);

  try

    for j := 0 to olist.Count - 1 do
    begin

      lBizURL := olist[j].BizURL;
      tjr := TPerson(OrgSys.OrgSystem.FindUnit(lBizURL)).ID;
      tjjs := TPerson(OrgSys.OrgSystem.FindUnit(lBizURL)).Parent.ID;

      with FQuery do
      begin
        Close;
        CommandText := 'INSERT INTO TBUSINESSDATA (FID,FHURRY,FIMPORTANCE,FTOPIC,FPOSTDETAIL,FPOSTDEPT,FPOSTPTM,FPOSTER,FPOSTDEPTNAME,FPOSTPTMNAME,FPOSTERNAME,FDEALDEPT,FDEALPTM,FDEALMAN,FDEALDEPTNAME,FDEALPTMNAME,FDEALMANNAME,FPOSTDATE,FDEALSTATE,FRELATIONNUM,FDISPLAYNUM,CBNBID,CMNBID) VALUES (:FID,:FHURRY,:FIMPORTANCE,:FTOPIC,:FPOSTDETAIL,:FPOSTDEPT,:FPOSTPTM,:FPOSTER,:FPOSTDEPTNAME,:FPOSTPTMNAME,:FPOSTERNAME,:FDEALDEPT,:FDEALPTM,:FDEALMAN,:FDEALDEPTNAME,:FDEALPTMNAME,:FDEALMANNAME,:FPOSTDATE,:FDEALSTATE,:FRELATIONNUM,:FDISPLAYNUM,:CBNBID,:CMNBID)';

        busiDataID := TCommonEnv.getGUID;




        Params.ParamByName('FID').AsString := busiDataID ;
        Params.ParamByName('FHURRY').AsString := '01' ;
        Params.ParamByName('FIMPORTANCE').AsString := '02';


        Params.ParamByName('FTOPIC').AsString := zt;
        Params.ParamByName('FPOSTDETAIL').AsBlob := nr;


        Params.ParamByName('FPOSTDEPT').AsString := TCommonEnv.getYHSSDW;
        Params.ParamByName('FPOSTPTM').AsString := TCommonEnv.getYHJSID;
        Params.ParamByName('FPOSTER').AsString := TCommonEnv.getYHID;
        Params.ParamByName('FPOSTDEPTNAME').AsString := TCommonEnv.getYHSSDWMC;
        Params.ParamByName('FPOSTPTMNAME').AsString := TCommonEnv.getYHJSMC;
        Params.ParamByName('FPOSTERNAME').AsString := TCommonEnv.getYHXM;

        Params.ParamByName('FDealDept').AsString := dw;
        Params.ParamByName('FDealPtm').AsString := tjjs;
        Params.ParamByName('FDealMan').AsString := tjr;
        Params.ParamByName('FDealDEPTNAME').AsString := TCommonEnv.getDeptName(dw);
        Params.ParamByName('FDealPTMNAME').AsString := TCommonEnv.getPositionName(tjjs);
        Params.ParamByName('FDealManNAME').AsString := TCommonEnv.getPersonName(tjr);

        Params.ParamByName('FPOSTDATE').AsDateTime := SysSrv.SysService.Time;
        Params.ParamByName('FDEALSTATE').AsString := '01';
        Params.ParamByName('FRELATIONNUM').AsString := '-1';

        displayNUM := TCommonUtils.GetAutoIncreaseID(Context,'Code', '编号');
        displayNUM := TCommonUtils.StrToRightLenStr(Variants.VarToStr(displayNUM), '0', 10);
        Params.ParamByName('FDISPLAYNUM').AsString := displayNUM;

        Params.ParamByName('CBNBID').AsString := cbnbid;
        Params.ParamByName('CMNBID').AsString := cmnbid;

        Execute;
      end;

      AFuncURL := 'Biz:\CBCM\CBCMGZTXCL.FUNC';                     // 自定义任务关联功能
      ATaskTypeName := '船舶船民工作提醒';                         // 自定义任务关联的任务名称
      ATaskTypeID := 'CBCMTX';                                     // 自定义任务关联的任务ID
      ABizField := 'Biz:\CBCM\CBCMSJK.DATABASE\TBUSINESSDATA.TABLE\FID.Field';  // 关联字段
      ASubject := zt;                      // 主题
      ABizFieldValue := busiDataID ;       // 关联字段主键
      ADept := dw;                         // 接收部门
      APosition := tjjs;                   // 接收岗位
      APerson := tjr;                      // 接收人

      tpf.UserStartTask(AFuncURL, ATaskTypeName, ATaskTypeID, ASubject, ABizField,
        ABizFieldValue, ADept, APosition, APerson);

      jsDialogs.ShowMsg('启动 ' + ASubject + ' 成功', '启动无流程任务');

    end;


  finally
    tpf.Free;
    FQuery.Free;
  end;


end;
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-16 05:05 , Processed in 0.039539 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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