生产上陆续碰到几次这样的问题了,就是在有申请人的单据页面(借款单,出差申请单之类的),当我们扩展单据后,添加了一些跟申请人相关的字段(比如说部门名称), 配置了业务规则:携带基础资料属性到指定列(通过这个业务规则把申请人的部门名称带入到我们扩展的字段上),结果发现每次新增的时候,发现扩展的字段的值为空, 切换申请人的时候,可以正常生效,这是什么原因导致的呢?
通过追查代码发现:
这个原因就是,页面加载的时机(创建时)问题,这个顺序依次是
1 系统先初始化数据,创建人,创建时间,字段默认值是在此时生成的.
2 业务规则按上到下的顺序生效,但发现申请人的数据是为空,所以配置扩展的字段是为空,
3 插件的afterCreateNewData方法生效,按照插件代码,此时申请人的值从空变成等于创建人,
简单说,就是业务规则还是生效了,但是生效的时候,申请人还没值,申请人的是在下一步通过插件生效的
解决这个问题的方法也很简单,
一 是通过插件来实现,在afterbinddata这个方法里面把查询出来的值放进去
二 是也可以通过配置来实现,主要讲下这个方法,原来的业务规则不动,新加一个业务规则,
因为老的业务规则,值更新的时候是没问题的,创建时候拿不到值的,而且默认情况下,按照业务规则也是拿到的是创建人的值
步骤1 : 创建新的业务规则
步骤2:设置前置条件bjok_textfield1 = '' (也就是扩展部门字段为空的情况)
步骤3: 添加 计算定义公式的值并填写到指定列
bjok_textfield1 = GetFieldValue('bos_user', 'dpt.name', 'id', creator.id)
bjok_textfield1 : 当前单据页面的扩展部门字段
bos_user : 人员单据
dpt.name :人员单据里的部门信息
id: : 人员单据的id
creator.id: 当前单据页面的创建者id
通过这个配置,保存生效后就能把页面加载后申请人的部门信息正确带入到扩展字段中:
实现效果:
新加业务规则配置前的效果:
新加业务规则配置后的效果:
推荐阅读