起步软件技术论坛-X3

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

【结贴】关于批处理中遇到的问题**

[复制链接]
发表于 2008-5-27 19:07:46 | 显示全部楼层
procedure TMainForm.FlowBroker1CreateFlowOutFlowTasks(Sender: TObject; Command: TFlowOutCommand);
var lFlowTask :TFlowTask;
    lTask :TTask;
     j :integer;
     lDept,lPosition,lperson :string;
begin
  for j:=0 to command.FlowControl.Flow.Tasks.count -1 do
  begin
   lTask := Command.FlowControl.Flow.Tasks[j];
  if lTask.ProcUnitID = 'DDSQ' then
  begin
  lDept :=lTask.SenderDeptID;
  lPosition :=lTask.SenderPositionID;
  lPerson :=lTask.SenderID;
  end;
  end;

  lFlowTask :=Command.FlowTasks.FindFlowTask('YWGN1');
  if lFlowTask <> nil  then
  begin
   lFlowTask.Executors.Clear;
   //lFlowTask.ExecutorMustBeFuncOwner;
   lFlowTask.AllowExecutorRange := Org.OrgExpr.OrgKey(lDept, lPosition, lperson) ;
   lFlowTask.ExecutorRange:= Org.OrgExpr.OrgKey(lDept, lPosition, lperson) ;
   //lFlowTask.AllowExecutorRange :=  'GetProcUnitExecutor(''DDSQ'')' ;
   //lFlowTask.ExecutorRange:= 'GetProcUnitExecutor(''DDSQ'')' ;
   lFlowTask.ReLoadAllowExecutors;
   lFlowTask.ReLoadExecutors;
   end;
end;

楼主用上用类似于上面的代码测试一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-28 09:08:19 | 显示全部楼层
我把上面的“DDSQ”改为了‘BMCSGN’,即为批处理任务的那个功能,把下面的‘YWGN1’改为‘XMLXSQ’,即为提交给部门初审的项目立项申请功能,可是执行的结果和我把范围设置为多个,用系统默认流转按钮的执行结果一样啊!
回复 支持 反对

使用道具 举报

发表于 2008-5-28 09:18:20 | 显示全部楼层
先把系统数据库中的 业务模型\系统空间\系统数据库\流程默认执行者表 数据清空
你把DDSQ和YWGN1都设置成XMLXSQ看一下效果呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-28 16:11:32 | 显示全部楼层
把第一个DDSQ改为XMLXSQ的话会提示错误,而且我觉得也不合理,SenderDeptID指的是该环节的前驱环节的部门,xmlxsq是一个入口环节。
回复 支持 反对

使用道具 举报

发表于 2008-5-28 16:25:05 | 显示全部楼层
把楼上做法的错误贴出来吧,
因为你要流转到xmlxsq这个环节,所以用上面的方法是获取入口环节xmlxsq任务的提交者,然后把获取到的执行者在指定到要流转到的xmlxsq环节的流程任务的执行者。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-29 08:31:17 | 显示全部楼层
无法生成执行者表达式,如下图:

不能生成执行者表达式.jpg

254.23 KB, 下载次数: 127

回复 支持 反对

使用道具 举报

发表于 2008-5-29 08:50:14 | 显示全部楼层
设置断点看一下,代码走到这里来了么?
  if lTask.ProcUnitID = 'DDSQ' then
  begin
  lDept :=lTask.SenderDeptID;
  lPosition :=lTask.SenderPositionID;
  lPerson :=lTask.SenderID;
  end;

lDept 、lPosition、lPerson变量中有值么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-29 08:55:58 | 显示全部楼层
unit MainForm;

interface

uses
  Business.System, Business.Model, Business.Forms, Business.Data,
  Business.Model.Flow;


type
  TMainForm = class(TForm)
    InfoBroker1: TInfoBroker;
    FuncBroker1: TFuncBroker;
    GraphicPageControl1: TGraphicPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    DocView1: TDocView;
    DocView2: TDocView;
    DataNavigator1: TDataNavigator;
    DataSetBrokeryj: TDataSetBroker;
    DataSetBrokerbmxmhz: TDataSetBroker;
    DataNavigator2: TDataNavigator;
    Button1: TButton;
    FlowBroker1: TFlowBroker;
    procedure Action1Execute(Sender: TObject);
    procedure DataNavigator1BeforeAction(Sender: TObject; var Accept: Boolean);
    procedure BizFormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FlowBroker1BeforeFlowOut(Sender: TObject; Command: TFlowOutCommand);
    procedure FlowBroker1CreateFlowOutFlowTasks(Sender: TObject; Command: TFlowOutCommand);
  private
    {private declarations}
  public
    {public declarations}


  end;

implementation


procedure TMainForm.Action1Execute(Sender: TObject);
begin
   //DocView2.Doc.
   //BMCSYJBDWD.

end;


procedure TMainForm.DataNavigator1BeforeAction(Sender: TObject; var Accept: Boolean);
var
   count : Integer;
   tempstr : String;
   i : Integer;
begin
   if TBizDataSetAction(Sender).ID = BizActnConsts.ActionDataSetSave then
   begin
      DataSetBrokeryj.DataSet.Open;

      DataSetBrokerbmxmhz.DataSet.Open;
      DataSetBrokerbmxmhz.DataSet.First;
      count := DataSetBrokerbmxmhz.DataSet.RecordCount;
      for i:=0 to count-1 do
      begin
        DataSetBrokeryj.DataSet.Edit;
        DataSetBrokeryj.DataSet.FieldByName('XMBS').Value := DataSetBrokerbmxmhz.DataSet.FieldByName('XMBS').Value;
        DataSetBrokeryj.DataSet.FieldByName('BDMC').Value := '建议书';
        DataSetBrokeryj.DataSet.FieldByName('YJMC').Value := '部门初审意见';
        //Dialogs.ShowMessage(DataSetBrokeryj.DataSet.FieldByName('XMBS').Value.ToString+DataSetBrokeryj.DataSet.FieldByName('BDMC').Value.ToString+DataSetBrokeryj.DataSet.FieldByName('YJMC').Value.ToString);

        if JYSYWXX.TBMCSYJBDWD(DocView2.Doc).RadioButtontongguo.Checked then
        begin

           DataSetBrokeryj.DataSet.FieldByName('LXYJ').Value :='同意';
        end;
        if JYSYWXX.TBMCSYJBDWD(DocView2.Doc).RadioButtontaotai.Checked then
        begin
           //DataSetBrokeryj.DataSet.Edit;
           DataSetBrokeryj.DataSet.FieldByName('LXYJ').Value :='不同意';
        end;
        if JYSYWXX.TBMCSYJBDWD(DocView2.Doc).RadioButtonxiugai.Checked then
        begin
           //DataSetBrokeryj.DataSet.Edit;
           DataSetBrokeryj.DataSet.FieldByName('LXYJ').Value :='返回修改';
        end;
        DataSetBrokerbmxmhz.DataSet.Next;
      end;
   end;

end;

procedure TMainForm.BizFormCreate(Sender: TObject);
var tempstr : String;
begin
   if DataSetBrokeryj.DataSet.FieldByName('LXYJ').Value <> nil then
   begin
     tempstr :=  DataSetBrokeryj.DataSet.FieldByName('LXYJ').Value.ToString;
     if tempstr = '同意' then
     begin
        JYSYWXX.TBMCSYJBDWD(DocView2.Doc).RadioButtontongguo.Checked := True;
        JYSYWXX.TBMCSYJBDWD(DocView2.Doc).RadioButtontaotai.Checked := False;
        JYSYWXX.TBMCSYJBDWD(DocView2.Doc).RadioButtonxiugai.Checked := False;
     end;
     if tempstr = '不同意' then
     begin
        JYSYWXX.TBMCSYJBDWD(DocView2.Doc).RadioButtontaotai.Checked := True;
        JYSYWXX.TBMCSYJBDWD(DocView2.Doc).RadioButtontongguo.Checked := False;
        JYSYWXX.TBMCSYJBDWD(DocView2.Doc).RadioButtonxiugai.Checked := False;
     end;
     if tempstr = '返回修改' then
     begin
        JYSYWXX.TBMCSYJBDWD(DocView2.Doc).RadioButtonxiugai.Checked := True;
        JYSYWXX.TBMCSYJBDWD(DocView2.Doc).RadioButtontaotai.Checked := False;
        JYSYWXX.TBMCSYJBDWD(DocView2.Doc).RadioButtontongguo.Checked := False;
     end;
   end;

end;

procedure TMainForm.Button1Click(Sender: TObject);
var
  i: Integer;
  lTask: TTask;
  lTasks: TList;
begin
  //流转的任务列表
  lTasks := TList.Create;
  try
    for i:= FlowBroker1.FlowControl.TaskCount-1 downto 0 do
    begin
      lTask := FlowBroker1.FlowControl.TaskByIndex;
      lTasks.Clear;
      lTasks.Add(lTask);
      FlowBroker1.FlowControl.FlowOut(lTasks);
    end;
  finally
    lTasks.Free;
  end;
end;





var
  //true  表示正在流转任务
  //False 表示从主界面上点流转按钮进入的
  taskrunning: Boolean;

procedure TMainForm.FlowBroker1BeforeFlowOut(Sender: TObject; Command: TFlowOutCommand);
begin
  if not taskrunning then
  begin
    //从主界面上点流转按钮进入的
    //保证下面流转时候是被接收的流转
    taskrunning := True;

    Button1.Click;
    //放弃从主界面上点流转按钮的动作
    taskrunning := False;
    Command.Accept := False;
  end;
end;



procedure TMainForm.FlowBroker1CreateFlowOutFlowTasks(Sender: TObject; Command: TFlowOutCommand);
var lFlowTask :TFlowTask;
    lTask :TTask;
     j :integer;
     lDept,lPosition,lperson :string;
begin
  for j:=0 to command.FlowControl.Flow.Tasks.count -1 do
  begin
   lTask := Command.FlowControl.Flow.Tasks[j];
  if lTask.ProcUnitID = 'XMLXSQ' then
  begin
  lDept :=lTask.SenderDeptID;
  lPosition :=lTask.SenderPositionID;
  lPerson :=lTask.SenderID;

  end;
  end;

  lFlowTask :=Command.FlowTasks.FindFlowTask('XMLXSQ');
  if lFlowTask <> nil  then
  begin
   lFlowTask.Executors.Clear;
   lFlowTask.AllowExecutorRange := Org.OrgExpr.OrgKey(lDept, lPosition, lperson) ;
   lFlowTask.ExecutorRange:= Org.OrgExpr.OrgKey(lDept, lPosition, lperson) ;
   lFlowTask.ReLoadAllowExecutors;
   lFlowTask.ReLoadExecutors;

   end;
   Command.UserConfirm :=False;
end;
end.
回复 支持 反对

使用道具 举报

发表于 2008-5-29 09:03:46 | 显示全部楼层
出现上面错误的时候错误定位到哪里了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-29 09:21:45 | 显示全部楼层
第二次走到button1click事件的 FlowBroker1.FlowControl.FlowOut(lTasks);
这一句,不行你远程协助看一下。你在自己的环境里搭建这样的环境试一下,可以的话我应该可以,我的是3012版本
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-14 14:01 , Processed in 0.047792 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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