列表动态赋值,报错赋值字段找不到原创
金蝶云社区-JeremyG
JeremyG
5人赞赏了该文章 1,997次浏览 未经作者许可,禁止转载编辑于2023年05月31日 15:51:54
summary-icon摘要由AI智能服务提供

本文描述了在一个项目中,单据实体加入当前审核人字段后,生产环境运行一年后部分用户出现错误的情况。错误发生在点击详情页时,提示某属性不存在。分析发现部分用户配置了已选行合计导致。根本原因是合计计算复用了列表加载代码,但字段获取不同。暂时解决方案是关闭合计字段,根本方案是改进代码以判断当前场景是否应赋值。同时,提及了最初动态展示审批人信息的方案调整及动态赋值限制。

背景:

单据实体中加入了当前审核人的一个文本字段,列表中动态取到当前实际的审批人,赋值给该字段。生产环境运行了一年左右的时间了,突然有部分用户报错了。列表展示不报错,当点击进入详情的时候才报错。

异常信息:实体类型QueryObject中不存在名为XXXXX的属性。

目前项目只有源码,没有可运行调试的开发环境,只能对着代码分析。

image.png


分析:

  1. 直接感觉,是否用户个性化配置了隐藏该字段。查看发现并没有。而且如果隐藏了,列表显示也会报错了,排除.

  2. 代码异常,看了代码发现这里获取到列表数据,并给自定义列数据赋值的时候报错了。(这里的逻辑就是取到所有的列表的列,然后setDataForCustomColumn(collection)方法会取到异常的XXXX字段列进行赋值)

    image.png

    但是目前的情况:1.列表实际展示数据是正常的。2.只有部分用户有异常。3.进入详情页面为什么会走到列表插件?

  3. 于是求助平台开发老师,提示可能是配置了已选行合计,最终发现部分用户配置了已选行合计字段,取消已选行合计就可以了。

    image.png

大致原因(因为没有调试代码,具体的细节不太清楚):

列表合计或者其他场景,是复用了列表加载的执行代码,拿合计为例。

  1. 当有选中行的时候,会计算合计。(本次点击进入详情其实是触发了选中,测试验证其他选中行或者点击任何单元格都会报错)

  2. 为了保证性能,计算合计的代码会只获取合计字段,不获取其他字段。

  3. 计算合计的代码复用了列表加载数据的代码,不过加载的字段改动了。如果没有二开,是完全没有问题的。

  4. 二开了加载数据的逻辑,正常列表加载是没有问题的,但计算合计的时候也会进入这块逻辑,合计时只有具体的合计列字段,没有其他列,所以二开代码在dynamicObject.set(指定列, Value);赋值的时候,报错列找不到


解决:

  1. 直接方案就是先把合计字段关闭,就不报错了。但是只是暂时解决,不能解决根本。

  2. 本质方案可以在设置指定列的值的时候,判断下当前数据包是否有需要赋值的指定列。如果是列表加载,那么会有该列,正常赋值。如果是合计,就不赋值。

    image.png


额外:

  1. 本次需求是想在列表中动态展示当前审批人信息,最早是通过列表动态添加列的方式,但是最终在列表引出的时候发生异常了,最后方案改成了,实体上加一个当前审批人的文本字段,列表上也加入,然后在列表加载的时候动态给每一行当前审批人字段赋值。

  2. 动态赋值仅限简单类型字段,如文本、整数等。复杂类型字段,如基础资料字段,不建议动态赋值。


    

图标赞 5
5人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!