起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: huangyue

【结贴】代码启动流程后执行者的问题??**

[复制链接]
 楼主| 发表于 2010-4-26 12:25:29 | 显示全部楼层
这个代码定义启动流程:


procedure TZJ.UserStartFlow(AFlowUrl,ADept,ARole,APerson,AStartProc,AFlowID,ASubject,ADescription:string);
var                        {流程URL,部门,岗位,人员               ,流程ID,流程主题     }
  lBizURL: TBizURL;
  lFlowValue: TFlowValue;
  lFlowControl: TFlowControl;
  lExecutor: TOrgURL;
  StrSubject:String;
  urls: TStrings;
begin
  lBizURL := TBizURL.Create;
  lFlowValue := TFlowValue.Create;    //流程实例
  lFlowControl := TFlowControl.Create(Self.Context);//流程控制组件
  lExecutor := TOrgURL.Create(cDeptID,cPositionMemberID,cOperatorNameID);  //执行者
  lBizURL.URL := AFlowUrl;
  try
    lFlowValue.IDs.Add(AFlowID);            //流程ID
    lFlowValue.Subject:= ASubject;     //流程主题
    lFlowValue.Description := ADescription;   //流程描述
        //启动流程实例
   // Business.Model.Org.OrgExpr.OrgKey(ADept, 'FZR', '')+'OR'+Business.Model.Org.OrgExpr.OrgKey(ADept, 'ZR', '');
    urls:=TStringList.Create();
    //只有主任(ZR) 副主任(FZR) 才有权限查看
    OrgSys.OrgSystem.GetBizURLsByOrgExpr('OrgChildren(OrgKey('+ADept+',''FZR'', '''') , OrgCondition(''*.psm'', '''', ''''), True, False) or OrgChildren(OrgKey('+ADept+',''ZR'', '''')  , OrgCondition(''*.psm'', '''', ''''), True, False)',urls);
   // OrgSys.OrgSystem.GetBizURLsByOrgExpr('OrgChildren(OrgKey('''',''FZR'', '''') , OrgCondition(''*.psm'', '''', ''''), True, False) or OrgChildren(OrgKey('''',''ZR'', '''')  , OrgCondition(''*.psm'', '''', ''''), True, False)',urls);
    //Memo1.Text:='OrgChildren(OrgKey('+ADept+',''FZR'', '''') , OrgCondition(''*.psm'', '''', ''''), True, False) or OrgChildren(OrgKey('+ADept+',''ZR'', '''')  , OrgCondition(''*.psm'', '''', ''''), True, False)';
   // Memo1.Lines.Add(urls.Text);
    urls.Free;

    lFlowControl.StartupFlow(lBizURL, AStartProc,lExecutor, lFlowValue);
    lFlowControl.FlowRunnerbyIndex[0].CurrentTask.PreemptMode := TTaskPreemptMode.omFirstProcess;
    StrSubject:=DataSetBroker1.DataSet.FieldByName('BZDH').AsString+' '+DataSetBroker1.DataSet.FieldByName('BZMC').AsString+'('+DataSetBroker4.DataSet.FieldByName('LQBM').AsString+')';
    lFlowControl.FlowRunnerByIndex[0].CurrentTask.subject:=StrSubject;//这是任务主题
    lFlowControl.FlowRunnerByIndex[0].CurrentTask.TaskMessages[0].ReceiverDeptID := ADept;//传入接收者的部门ID
    lFlowControl.FlowRunnerByIndex[0].CurrentTask.TaskMessages[0].ReceiverPositionID :=ARole;//  Business.Model.Org.OrgExpr.OrgKey(ADept, 'FZR', '')+'OR'+Business.Model.Org.OrgExpr.OrgKey(ADept, 'ZR', '');//岗位; //传入接收者的岗位ID
    lFlowControl.FlowRunnerByIndex[0].CurrentTask.TaskMessages[0].ReceiverID :=APerson; //传入接收者的人员ID

    //流程实例数据保存到数据库
    lFlowControl.FlowRunnerbyIndex[0].CurrentTask.SaveToDB;
  finally
    lFlowControl.Free;
    lFlowValue.Free;
    lBizURL.Free;
  end;
end;
回复 支持 反对

使用道具 举报

发表于 2010-4-26 13:12:12 | 显示全部楼层
从21楼看,你上面的urls是限定执行者范围的吧,但是后面的代码中又没有用到。
另外,你跟一下,后面代码中传入ADept,ARole,APerson是否ARole,APerson为空了。

要实现你业务上的需要,你必须把任务发给岗位或者人员方可控制主任或者副主任能看到,而不是部门。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-26 15:02:06 | 显示全部楼层
我跟踪了下了。。。只有APerson是空的。。其他2个都有值。。。是什么原因?
回复 支持 反对

使用道具 举报

发表于 2010-4-26 15:16:21 | 显示全部楼层
那这样的话,应该是发到岗位上了,但是从上面给的数据来看是发到部门了,所以导致部门内所有人都能看。
那你看看刚才跟踪走的这个数据的任务,是否部门内所有人都能看呢?可以先确认下数据库中任务消息表数据。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-26 15:24:09 | 显示全部楼层
我分别用部门不同的人员登录进去都可以在代办任务那里看到。。。
回复 支持 反对

使用道具 举报

发表于 2010-4-26 15:32:37 | 显示全部楼层
你把界面贴给我看看呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-26 15:44:07 | 显示全部楼层
是要那个的界面?
回复 支持 反对

使用道具 举报

发表于 2010-4-26 15:48:08 | 显示全部楼层
就是你说的部门下的所有人登陆都能看到的任务,在界面上标识出来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-26 15:53:37 | 显示全部楼层
最初由 atiger 发布
[B]就是你说的部门下的所有人登陆都能看到的任务,在界面上标识出来 [/B]


如图

xx.jpg

106.04 KB, 下载次数: 263

回复 支持 反对

使用道具 举报

发表于 2010-4-26 16:07:22 | 显示全部楼层
呵呵,这不是默认的代表任务,你们修改过了,你检查一下过滤条件吧,至于条件应该怎么加,需要结合你的业务需求了。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-9 13:22 , Processed in 0.041790 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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