需求:多选基础资料绑定附件明细,选择附件明细后,已选栏显示附件名称,而不是url。点击确定返回显示的也是附件名称。目前现状如图:
分析:
对于一般的基础资料,显示的一般是name字段,我们看附件明细界面,发现它没有number和name字段。那他是怎么决定的显示什么字段?
前后端交互我们熟悉,打开f12看到点击的时候是后台返回的数据给前端。通过billlistap的entryRowClick事件赋值的已选值。
entryRowClick
我们找到核心代码,发现只是返回选中行给前端。没有对应给已选栏赋值的地方。
通过一些场外求助,我们又找到了赋值的地方,在这里我们发现添加已选的数据。但是仔细一看,这个时候就已经有了number和name的数据,我们不好去干扰,还没找到赋值的地方。
继续一些场外求助,我们收获了把视线移到基础资料列表加载的时候。这里主要是给列表绑定数据的时候去查询了所有的数据,并设置了选中的数据,然后存入缓存中。根据断点调试我们发现在这里生成的数据,有了number和name属性的对应值。这行代码上面还是正常的数据库的数据,那么深入看下这里。
我们深入调试发现了这里这关键的代码。他是从bos_attachment的实体类型中取出来number和name的属性,那我们结合我们设计器的知识,会想起来基础资料我们可以手动去配置编码和名称的字段。恍然大悟.......
我们找到附件明细,发现编码和名称确实是这里指定的,和我们调试出的数据是对应的。于是把这里url改成文件名。(注意要扩展页面修改)
然后我们保存重置下元数据,再测试发现已选已经变成了文件名。
后续:
这里扩展附件明细修改,会全局生效,所有用到名称的地方,都变成了文件名,如果对其他地方产品影响,那么可以使用继承的方法,物理表不用修改,保证数据在一起,然后引用新的实体,这样就是当前引用这里被修改,其他和原来保持不变。
应该一开始就能想出来这个基础资料的名称属性,一般默认显示的都是名称,以后要更能马上联想到。不过通过一次调试让我们对基础资料列表的加载过程有了更深入的了解,也是有收获的。
我这里有几次场外求助,要能做到深入理解还是要多多看源码调试,这里分享一个大牛的调试帖子:苍穹debug流程https://vip.kingdee.com/link/s/Me0DG
列表的涉及的关键类就是kd.bos.mvc.list.ListView和kd.bos.list.BillList,有问题有兴趣可以深入看下这两个类的方法逻辑。
this.clientViewProxy.invokeControlMethod是发送控件的指令到前端,前后的交互的指令目前没有公开,大家顾名思义,在开发过程中慢慢学习,了解掌握几个常见的即可。
推荐阅读