标签:空白模板,审核报错,编码规则问题,空白单据,复制单据
背景:
某个生态伙伴需要使用供应链的某张单据,经和供应链的同事讨论之后,不建议使用扩展OR继承的方式来处理供应链单据,让他们新建空白模板单据,然后通过复制粘贴控件来构建该单据。(苍穹没有直接复制实体的方案)
复制控件的方式很简单,选中你要复制的控件,点击工具栏上方的复制,在其他单据中点击粘贴即可。(不同类型的实体不能复制粘贴)
问题:
通过复制粘贴构建的单据,正常的新增删除是没有问题的,但是过程中遇到了很多其他问题。
审核的时候直接报错了
编码规则不生效
编码规则配置了流水号,但每次都是001
解决:
审核报错问题很好处理,因为直接有报错日志,打断点调试就好了。贴这个报错,直接在kd.bos.service.operation.StatusConvertOperateService#markOldStatusDirtyFlags中打断点调试就好。
最终发现问题:
状态字段标识必须是status,复制过来的会自动加上开发商标识前缀
审核人标识必须是auditor,复制过来的会自动加上开发商标识前缀
审核时间标识必须是auditdate,复制过来的会自动加上开发商标识前缀
可能还有其他字段,剩下的自己调试解决就好
2.编码规则不生效。这个问题有时候有有时候没有,看你是复制元数据还是控件。编码规则生效其实也是因为默认注册了插件,有平台的逻辑,空白模板不会默认注册插件,所以需要我们手动注册。
找一个其他单据,把这俩默认插件注册进来就好
3.编码规则生效了,能看到编码显示,但是流水号每次都是001。这个问题也是打断点调试,编码规则的插件是kd.bos.form.plugin.CodeRulePlugin,所以我们在这里面打断点查看,最终发现,页面初始化之前会触发这个插件,我们的逻辑也是没啥问题的,但是保存的时候又会触发这个插件,编码规则引擎会去记录当前编码,下次再读取出来。那么问题就很清晰了,因为模板是空白的,保存按钮也是我们自己加的,保存操作应该有绑定插件,查看其他单据,最终验证猜想,看类名也知道,这个是编码规则的插件,注册到我们的保存操作中,问题顺利解决。
总结:
平台底层会默认很多标识,空白模板没有默认,如果手动加的不一致,可能就报错了
平台很多功能都是默认绑定的插件实现的,空白模板也不会默认,不绑定就没有对应的功能
空白模板需要有很多操作自己做,对于单据、基础资料,建议使用模板创建,不要使用空白模板
有报错堆栈就打断点,自己调试,问题很好解决
推荐阅读