一、业务背景
关于对单据批改的需求,前面分享了:
单据头字段的批改就不多说了,调用的是标准的批改功能,但是标准的批改有可能满足不了一些个性化的需求,例如,批改单据体字段等等...
自定义的批改可以参考进阶版的文章讲解来自己二开实现,但是大家可能没有二开资源,或者自己开发起来还是觉得比较吃力,而且往往涉及到多个字段的批改,如果自己二开的,似乎不太灵活,只能对固定的字段进行批改。
但是标准的批改功能,有个好处是,只要支持批改的字段,可以自己选择字段后,系统会动态创建对应的字段控件来输入批改字段值,这个功能,大大提高了批改字段的灵活性。例如,下图,物料批改:
标准的批改功能还有个美中不足的地方是,批改字段,不能触发字段相关的值更新和实体服务规则,这样对于修改字段值后会引起“连锁反应”的场景就不太好处理。
经过对标准批改功能的研究,本次案例,我们就基于标准的批改功能来实现一个“万能批改”功能,并且可以实现:
√ 修改字段支持触发值更新和实体服务规则。
√ 不仅支持单据头字段的批改,还支持单据体字段的批改。
√ 支持维度关联字段的批改:辅助属性、仓位...等。
√ 支持多选基础资料/辅助字段的批改。
√ 批改可以选择的字段,可以自定义设置。
√ 支持设置单据状态自动过滤,例如,已审核单据不允许批改。
首先,看下实现效果,一睹为快!
二、关键实现步骤
新建一个普通动态表单,标识:BPW_BulkEditFldInput,名称:单据批改字段
本案例采用动态表单嵌套的方式在实现动态展示不同字段的控件,动态表单中的内容其实比较简单:
①添加一个单选下拉列表字段:F_BPW_FldCombo,不需要绑定枚举类型(代码会动态构建)!
下拉字段一定要勾选【即时触发值更新】,别忘了这一步,很重要!否则不能正常切换字段!
②添加一个面板控件:F_BPW_Panel,用于动态显示不同字段输入控件,面板拖动合适大小,以便能正常显示。
实际是嵌套标准动态表单(BD_ChangeFieldContent)
③添加2个按钮:确定(F_BPW_OKBtn)、取消(F_BPW_CancelBtn)
④在表单插件中注册Python脚本
注册Python脚本时,复制代码后,按照下图说明修改对应的标识,其他代码不用修改,就可以使用,非常简单了!
需要批改的单据,配置万能批改功能
本案例只需要在需要批改的单据,添加自定义列表菜单,并在列表插件中,注册Python脚本即可。
①在BOS中打开需要批改的单据,如需扩展,需要先扩展,然后,添加一个列表菜单:BPW_tbBukEdit
②在列表插件中注册Python脚本
注册Python脚本时,按照下图说明修改代码,其他部分代码,如无个性化需求,可暂不修改!
三、应用小结
批改维度关联字段时,需要手动录入一个上级基础资料字段,要保证批改的数据行对应基础资料字段启用的维度属性一致!
例如,批改辅助属性,勾选的数据行中,所有物料必须启用相同维度的辅助属性,且手动录入的上级资料启用的维度也一致!
批改字段录入界面,字段的可见性和锁定性与单据字段设置保持一致,如果字段在单据上是隐藏的或者锁定的,那批改时,该字段动态创建的控件也会隐藏或锁定,无法正常进行批改值的录入。
如需控制批改功能权限,可在单据上增加自定义空操作,空操作绑定自定义的权限项,然后在列表菜单的点击事件中调用该空操作,Python插件代码中将AfterBarItemClick事件,改成AfterDoOperation事件,该事件用法参考我这篇文章:单据列表插件
前面截图中也提到,目前案例设置可批改的字段标识是在列表插件代码中,通过全局变量来完成的,如果想做成前台可配置的,可自行基于案例代码二开完成,批改字段标识集合建议保持使用Python里面的列表对象,否则,需要修改代码会更多!
该批改功能,最终会调用单据保存操作,受保存校验的控制,手动打开单据能修改,保存成功,批改才能成功。
应注意不该批改的字段,不要随意去设置批改,尤其是已审核单据,自行把握好批改的范畴,例如,已有上下游单据的物料、影响库存和成本的数量及单价等等,如批改导致发生数据错误,自行承担后果!
=============================正文结束=====================================
↓ ↓ ↓ ↓ ↓ ↓ Python插件案例代码已经上传附件,大家按需下载!
Python插件-单据万能批改.rar(7.78KB)
发布于 金蝶云星空BOS开发交流圈 社群
推荐阅读