起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1385|回复: 1

如何实现逐个记录流转

[复制链接]
发表于 2004-7-7 17:05:32 | 显示全部楼层 |阅读模式
由于一些业务的需求,录入时是一批数据,但实际上流转的时候是有选择的流转,例如:每次只流转光标所停在的那个记录。对于这样的需求,首先,流程入口的功能需要显示没有流转的记录。怎么知道哪些记录已经做了流转,哪些没有流转呢?这就需要用户在每次流转的时候,给当前这条记录做一个标识,表示这条记录已经流转了;并且需要控制窗体不要关闭,继续流转其他的记录。

具体实现步骤如下:
1、增加一个标识字段;
在数据表中增加一个字段,目的是用来标识哪些记录已经做了流转,哪些没有流转,并在该字段中引用一个业务元素:标识。

2、在入口功能上增加信息策略和业务语义策略;
2.1、在入口功能中增加“业务信息策略”,取消“数据集”的“禁止流程过滤”选项;
2.2、在入口功能中增加“业务语义策略”,并定义“业务数据范围”&[标识] is null or &[标识] =''。

3、定义流程的启动规则,使流程入口环节只过滤出没有做过流转的记录;
3.1、流程的启动规则为:流转时;
3.2、定义“重复处理数据范围”的“模式”为:自定义;
3.3、定义“重复处理数据范围”的“数据范围”为:&[标识] is null or &[标识] ='';
3.4、选中“能否多次启动”属性

4、在入口功能窗体上,实现流转后修改标志和不关闭窗体。
在入口功能的流程代理(FlowBroker)的 AfterFlowOut  事件中,修改标识字段的值,并且执行RegisterANewFlow实现不关闭入口功能。

Procedure TMainForm.FlowDDLRAfterFlowOut(…);
begin
  DSBrokerDDLR.DataSet.Edit;
  DSBrokerDDLR.DataSet.FieldByName('bz').AsString:='1';
  DSBrokerDDLR.DataSet.Post;
  DSBrokerDDLR.DataSet.ApplyUpdates(False);
  Command.FuncTerminate := False; //窗体不关闭
  if Command.FlowControl.FlowStartuped then
    Command.FlowControl.RegisterANewFlow;
   DSBrokerDDLR.DataSet.Filter:='bz is null or bz=''''';
  DSBrokerDDLR.DataSet.Filtered:=true;
end;
回复

使用道具 举报

发表于 2005-4-13 15:03:18 | 显示全部楼层

注意事项:

按照楼上的方法,在已完成任务列表内双击打开的功能中看不到相关的数据

解决办法:第一:删除语义策略
2.2、在入口功能中增加“业务语义策略”,并定义“业务数据范围”&[标识] is null or &[标识] =''。

第二:代码修改
Procedure TMainForm.FlowDDLRAfterFlowOut(…);
begin
  DSBrokerDDLR.DataSet.Edit;
  DSBrokerDDLR.DataSet.FieldByName('bz').AsString:='1';
    DSBrokerDDLR.DataSet.ApplyUpdates(False);
  DSBrokerDDLR.DataSet.Filter:='bz is null or bz=''''';
  DSBrokerDDLR.DataSet.Filtered:=true;
  Command.FuncTerminate := False; //窗体不关闭
  if Command.FlowControl.FlowStartuped then
    Command.FlowControl.RegisterANewFlow;
end;
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

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

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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