本文介绍了bos平台中单据之间关联关系的问题,探讨了如何理解单据转换过程中涉及的表结构和字段含义。通过SQL查询和数据库表分析,发现并非所有操作都由某个特定表控制,而是通过多个表共同协作实现。文中还提到使用SQL Server Profiler监控全流程跟踪时涉及的表及其字段意义,并简要说明了归档操作可能涉及的服务和执行计划。
对于我们这些刚接触bos平台的小白来说,单据之间的关联关系总是让人头疼,不知道上下查受哪些表的影响,全流程跟踪又是从哪里取数的?
对于开发来说,知其然而不知其所以然,总是让人苦恼的,抱着这种烦恼我们来探索一下到底是什么表存储了这些信息,之前大家应该知道在单据转换的时候,我们要在下游的单据的属性 单据关联配置中 要设置一些信息,其中就包含 关联表名:
接着就很自然的去数据库中查一下,看看记录了哪些信息
select * from t_PUR_POOrderEntry_lk
稍微解析一下表中字段含义,可以参考:
大家看到了,其实很简单,就是上游单据key值和下游单据key以及转换规则ID和控制字段等。
控制字段的含义,可以参考:
好了,那么了解了这个以后,我们可以删除其中的某个单据下推的记录,然后我们会发现,去下游单据上查或者去上游单据下查以及全流程跟踪都可以看到,说明不是这个表控制这些操作。
接着我用SQL Server Profiler监控,然后打开某个单的全流程跟踪,发现后台数据库执行的脚本中有这几个表:
t_BF_TableDefine
FTABLEID:没什么好说的,就是个GUID唯一值;
FTABLENUMBER:参与过单据转换的字段对应的表;
FFORMID:单据标识;
FENTITYKEY:参与过单据转换的实体标识;
FSEQ:也算是Id,后面的表里面有存储这个值,用来关联。
t_BF_Instance
FINSTANCEID:实例Id,这个表的主键,和分录表T_BF_INSTANCEENTRY 通过这个字段关联;
FFIRSTFORMID:上游表单标识;
FFIRSTBILLID:上游表单内码;
FFIRSTBILLNO:上游表单单据编码。
T_BF_INSTANCEENTRY
FSTABLENAME:上游关联表的表名;
FSID:上游关联行的内码;
FTTABLENAME:下游关联表的表名;
FTID:下游关联行内码;
FFIRSTNODE:是否是首节点。
T_BF_INSTANCEHIS
T_BF_INSTANCEENTRYHIS
PS:后面两张表没什么好说的,表名就是前两个表加了个HIS,说明是历史表,归档表的意思。需要强调的是:
FSTABLEID:相当于FSTABLENAME这个字段,只不过变成了ID,需要用表名去t_BF_TableDefine表中查询,获取FSeq 就是这个字段的值了;
FTTABLEID:这个字段也是同理,就不赘述了。
接着继续写哈,可能大家会好奇,归档是如何进行的,大家可以猜测一下,应该是执行计划里面有什么服务。刚开始我用关键字服务搜索,没有找到,我换了个关键字流程,然后找到如下图所示:
终于找到了哈!进去看看:
这里涉及到CRON表达式,有些伙伴可能不清楚(0 0/30 00-06 * * ? )是什么意思,可以用解析工具反解析如下:
这里给大家个连接作为参考:
如果帮助到你的话,希望点赞收藏哈!
未完待续!!!!
推荐阅读