起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1089|回复: 3

如何自定义特殊类型的任务,并且启动运行功能

[复制链接]
发表于 2004-12-15 17:03:14 | 显示全部楼层 |阅读模式
客户如果需要用无流程的任务来启动一个功能,进行相应的操作,就需要自己定义一种特殊类型的消息,并且自己来维护它。

实现分为三大步骤,具体参考如下说明
回复

使用道具 举报

 楼主| 发表于 2004-12-15 17:04:47 | 显示全部楼层

1、生成一种自定义的特殊类型的任务;

步骤:
1、生成一种特殊类型的任务并且加入到任务列表中;

procedure TMainForm.AddNewMessage(MessageKind :String);
var
  lOrgURL: TOrgURL;
  lTask: TTask;
begin
  lTask := TTask.Create;
  lOrgURl := TOrgURL.Create('XSB','LCCS','LJQ');
  lTask.Subject:='自定义类型消息' ;
  lTask.Kind:=MessageKind;   //自定义的任务类型参数
  lTask.SenderDeptID := 'XSB';
  lTask.SenderPositionID := 'LCCS';
  lTask.SenderID := 'LJQ';
  try
    lTask.TaskMessages.AddTaskMessage(nil, lOrgURl,
    TTaskmessagestate.tmsSend, 0, False);   //添加到任务列表
    Flow.FlowEngine.SaveTask(lTask);      //保存任务
  finally
   lTask .Free;
  end;

2、生成一个功能,这个功能是从 “业务模型\系统空间\系统功能\业务流程\工作任务”功能继承下来;

3、在继承的子类的“任务处理”按钮中添加自己的调用函数,来处理自定义类型的任务消息;

procedure TMainForm.actProcTaskExecute(Sender: TObject);
begin
  if actProcTask.Enabled then
    if SelectedTask.Kind= 'aaaa' then
    begin
      //调用启动窗体
      TaskRunFunc(); //自己调用的功能
    end
  else
  begin
      OpenTask(SelectedTask); //启动其他类型的任务
  end;
end;

procedure TMainForm.TaskRunFunc();
var
  lFuncItem: TOperatorFuncItem;
begin
  lFuncItem:=CommonComponentLibrary.TCommonComponentLibrary.
  UserSystem.FindFuncItem('Biz…');  //参数是调用功能的BIZURL
  if lFuncItem <> nil then
    Systemcore.TSystemCore.FuncManager.RunFunc(lFuncItem, ''); //启动功能
  else
    Dialogs.ShowMessage('找不到功能');
end;

4、修改子类中“处理任务”的Enabled属性,使自己的特殊类型消息可以执行。

function TMainForm.TaskCanExecute(ATask: TTask): Boolean;
begin
  if ATask.Kind = 'aaaa' then
  begin
    Result := True;
  end
  else
  begin
    Result := (ATask.ProcURL <> '') and
      (GetTaskKind(ATask) in Flow.SFlowCanExecuteTaskKinds);
  end;
end;


提示:  在继承的功能中引用 “业务模型\系统空间\用户界面基础\库\公共组件库”
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-15 17:05:45 | 显示全部楼层

2、如果在任务中运行这个功能需要定位到某一条特定的数据记录上需要以下操作;

步骤:

1、定义“业务参数组1”并且隔离级设置为全局,定义“业务参数1”;

2、在数据集中添加数据条件,数据表1.字段1 = &[业务参数1];

3、给任务描述值赋,这个值就是你想定位到某条记录的值,并且通过任务描述的值去对业务参数赋值例如:Task.Description:= '1111';

4、修改子类中任务执行函数,通过业务参数进行过滤定位到所需要的数据。

procedure TMainForm.actProcTaskExecute(Sender: TObject);
var
  lParam: Business.Model.TBizParam;
begin
  if actProcTask.Enabled then
    if SelectedTask.Kind= 'aaaa' then
    begin
      //调用启动窗体、
      lParam := JUSTEPCOMMONUNIT.TJUSTEPCOMMONUNIT.GetParam
      (Self.Context,'Biz:\CSMX\DICT\YWCSZ1.ParamGroup', 'YWCS1');
      lParam.Value := SelectedTask.Description;
      TaskRunFunc();
    end
  else
  begin
    OpenTask(SelectedTask);
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-15 17:06:20 | 显示全部楼层

3、在被调用的功能中重新打开数据集,使参数条件起作用,进行过滤得到所需要的数据。

参考如下:

procedure TMainForm.BizFormShow(Sender: TObject);
begin
  if DataSetBroker1.DataSet.Active=true then
  begin
    DataSetBroker1.DataSet.Active:=false;
    DataSetBroker1.DataSet.Open;
  end;
end;
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 05:16 , Processed in 0.038081 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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