文本介绍了两种在业务流程管理系统中建立单据间关联关系的方法。方法一是直接在流程实例和流程节点表中增加关联数据,实现全流程跟踪但单据删除不会自动删除关联数据。方法二是通过操作单据并增加关联表数据来建立关联关系,需要单据反写。文中还详细说明了如何确定相关信息、检查表定义、新增流程实例、增加流程节点及关联表数据的步骤,并给出了具体脚本示例,展示了如何建立销售订单与销售出库单之间的单据头关联。
有两种方式:
方式一:直接只给流程实例和流程节点表增加关联数据,特点是直接有关联关系,可以上下查和全流程跟踪,但操作单据不会走反写,也不会重新创建关联,单据删除了此数据也不会自动删除。
首先需要确定本单创建关联的实体(一般为单据关联配置中的单据体实体),并找其对应的实体key,表名,内码和表单formId。
再确定上游单据需要关联的实体,并找到其对应的实体key,表名,内码,单据内码,编码和表单formId。
检查业务流程表定义中是否存在表名,如下脚本:
select FTableNumber from t_bf_tableDefine where FFormId='表单formId' and FEntityKey='关联的实体Key'
如果存在则需要使用表定义中的表名(包括大小写一致和实际表名不一样);
如果不存在,则需要给表定义增加一条定义,如下脚本:
insert into t_bf_tableDefine (FTABLEID,FTABLENUMBER,FFORMID,FENTITYKEY,FSEQ)
values(NewID(),'关联实体对应的表名','表单Id','关联的实体Key',0)
如果上游单据已经存在业务流程数据,则只需要在流程节点表中增加对应节点接口
如果上游单据不存在,则需要根据上游单据信息给业务流程实例表t_bf_instance增加数据,再给业务流程实例节点表t_bf_instanceEntry增加跟节点数据和关联节点数据。
方式二:直接只给关联表(单据关联配置中的关联表)增加数据,特定是需要操作单据来走反写,才能产生关联关系。
1. 通过方式一中的1,2,3步确定相关的信息
2. 再确定需要携带的数量, 转换规则内码等信息。
相关脚本:
1. 新增流程实例:FInstanceid和FMasterid一定要相同。
新增语句: insert into t_bf_instance(FINSTANCEID,FFLOWID,FSOURCEID,FMASTERID,FSTATUS,FFIRSTFORMID,FFIRSTBILLID,FFIRSTBILLNO,FSTARTTIME) values('InstanceGUIDId','','','InstanceGUIDId','A','上游单据formId','上游单据内码','上游单据编码',GETDATE())
2.增加流程节点:
增加根节点:
insert into t_bf_instanceEntry(FROUTEID,FINSTANCEID,FLINEID,FSTABLENAME,FSID,FTTABLENAME,FTID,FFIRSTNODE,FCREATETIME) values(NewID(),'InstanceGUIDId','','','','上游单据单据头表名','上游单据内码',1,GETDATE())
增加节点:
insert into t_bf_instanceEntry(FROUTEID,FINSTANCEID,FLINEID,FSTABLENAME,FSID,FTTABLENAME,FTID,FFIRSTNODE,FCREATETIME)
values(NewID(),'InstanceGUIDId','','上游单据单据头表名','上游单据内码','下游单据单据头表名','下游单据内码',0,GETDATE())
3. 增加关联表数据:
insert into 关联表(FEntryID,FLinkId,FFlowId,FFlowLineId,FRuleId,FSTableId,FSTableName,FSBillId,FSId,FQty1Old,FQty1)
values('关联实体内码','关联表主键','流程图内码(不用填)','流程图节点内码(填0)','转换规则内码',0,'源单表名','源单内码','源单关联实体内码','携带量',0)
示例:
下面以直接创建销售订单到销售出库单并以单据头关联的关联关系为例
1、销售订单formID, 单据头表名,单据内码,单据编码,分别为:SAL_SaleOrder,T_SAL_ORDER,100389,XSDD000292
2、 销售出库单formID, 单据头表名,单据内码,单据编码,分别为:SAL_OUTSTOCK,T_SAL_OUTSTOCK,171960,T_SAL_OUTSTOCK
3、查询表定义,确定销售订单单据头表名是否存在: select * from t_bf_tableDefine where FFORMID='SAL_SaleOrder' and FENTITYKEY='FBillHead'
确实存在,但表名为T_SAL_ORDER1,和T_SAL_ORDER不相同,所以要使用表定义中的表名T_SAL_ORDER1
4、查询表定义, 确定销售出库单单据头表名是否存在select * from t_bf_tableDefine where FFORMID='SAL_OUTSTOCK' and FENTITYKEY='FBillHead'
不存在,则增加一条数据 insert into T_BF_TABLEDEFINE(FTABLEID,FTABLENUMBER,FFORMID,FENTITYKEY,FSEQ)
values(NewID(),'T_SAL_OUTSTOCK','SAL_OUTSTOCK','FBillHead',0)
5、增加流程实例
首先使用脚本:select NewID() 产生流程实例内码 D97B6B87-6B6B-48BC-B9A5-E1AB9407C1E5;
insert into t_bf_instance(FINSTANCEID,FFLOWID,FSOURCEID,FMASTERID,FSTATUS,FFIRSTFORMID,FFIRSTBILLID,FFIRSTBILLNO,FSTARTTIME)
values('D97B6B87-6B6B-48BC-B9A5-E1AB9407C1E5','','','D97B6B87-6B6B-48BC-B9A5-E1AB9407C1E5','A','SAL_SaleOrder','100389','XSDD000292',GETDATE())
6、增加流程实例节点:
根节点
insert into T_BF_INSTANCEENTRY(FROUTEID,FINSTANCEID,FLINEID,FSTABLENAME,FSID,FTTABLENAME,FTID,FFIRSTNODE,FCREATETIME)
values(NewID(),'D97B6B87-6B6B-48BC-B9A5-E1AB9407C1E5','','','','T_SAL_ORDER','100389',1,GETDATE())
非根节点
insert into T_BF_INSTANCEENTRY(FROUTEID,FINSTANCEID,FLINEID,FSTABLENAME,FSID,FTTABLENAME,FTID,FFIRSTNODE,FCREATETIME)
values(NewID(),'D97B6B87-6B6B-48BC-B9A5-E1AB9407C1E5','','T_SAL_ORDER','100389','T_SAL_OUTSTOCK','171960',0,GETDATE())
7、最后得到的结果是单据头跟单据头的关联
推荐阅读