起步软件技术论坛-X3

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

[分享]流程与短信结合的方法**

[复制链接]
发表于 2007-11-6 10:45:47 | 显示全部楼层 |阅读模式
如果需要在流程流转时候,给收到任务的人发短信通知,可以采用以下方案:
当流程发生任何动作,流转、回退、转发、中止等,都会执行 TFlowManager 的 doAfterFlowCommand 方法,只要修改这个函数就可以实现了。
TFlowManager在系统空间\系统运行库\系统核心库

以下,我修改了这个函数,让每次流转以后,弹出对话框来显示执行者URL
procedure TFlowManager.doAfterFlowCommand(ACommand: TFlowCommand);
var
  i, j: Integer;
  s: TStrings;
  lFlowTasks: TFlowTasks;
begin
  doEvent(FAfterFlowCommand, ACommand);
  if ACommand.ID=Flow.FLC_FLOWOUT then
  begin
    lFlowTasks := (ACommand as TFlowOutCommand).FlowTasks;
    s := TStringList.Create;
    try
      for i:=0 to lFlowTasks.Count-1 do
        for j:=0 to lFlowTasks.Executors.Count-1 do
          s.Add(lFlowTasks.Executors[j].BizURL.URL);
      if s.Count>0 then
        Dialogs.ShowMessage(s.Text);
    finally
      s.Free;
    end;
  end;
end;
回复

使用道具 举报

 楼主| 发表于 2007-11-6 11:00:24 | 显示全部楼层
平台上如何实现短信功能,可以参考 http://bbs.justep.com/forum.php?mod=viewthread&tid=8486
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-7 13:54:36 | 显示全部楼层
当然除了直接修改 系统空间\系统运行库\系统核心库中的TFlowManager类的函数以外,也可以截获这个对象的一个事件 AfterFlowCommand

在 系统空间\简洁风格\界面库\窗体库\标准风格主窗体 中就定义了一个函数来截获这个事件,记录操作者,如果自己定义界面方案的话,可以学习这个主窗体中的方法来截获 AfterFlowCommand 事件来对流程成功执行以后进行处理,比如发短信。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-7 14:06:21 | 显示全部楼层
第三种方法,当流程流转时候,会发送一个 TFlowCommandMessage 消息,因此,只要在全局环境创建一个对象来处理这个消息,在消息处理对象中发短信就可以了

可以参考 系统空间\系统运行库\系统核心库\系统消息接收
1  定义消息处理类
  { TFlowAfterFlowCommandBizMessageHandler }

  TFlowAfterFlowCommandBizMessageHandler = class(TBizMessageHandler)
  protected
    procedure DoExecute(AMessage: TBizMessage; const AParam: THandleParam;
      var Handled: Boolean); override;
  end;

procedure TFlowAfterFlowCommandBizMessageHandler.DoExecute(AMessage: TBizMessage; const AParam: THandleParam;
      var Handled: Boolean);
var
  lCommand: TFlowCommand;
begin
  lCommand := (AMessage as TFlowCommandMessage).FlowCommand;
  //可以在这里发送短信
  TSystemCore.FlowManager.doAfterFlowCommand(lCommand);  
  Handled := True;
end;

2  创建消息处理对象,并注册到全局环境
  FFlowAfterFlowCommandBizMessageHandler := TFlowAfterFlowCommandBizMessageHandler.Create;
  BizSys.GlobalContext.AddMessageHandler(Flow.BM_AFTERFLOWCOMMAND, FFlowAfterFlowCommandBizMessageHandler);

3  最后取消这个消息处理对象,并且释放
  BizSys.GlobalContext.RemoveMessageHandler(Flow.BM_AFTERFLOWCOMMAND, FFlowAfterFlowCommandBizMessageHandler);
  FFlowAfterFlowCommandBizMessageHandler.Free;

有关平台上业务消息处理的更多信息,请参考 http://bbs.justep.com/forum.php?mod=viewthread&tid=18518
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-29 19:08 , Processed in 0.039225 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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