kd.bos.exception.KDException: ***** 操作未定义实现类!原创
10人赞赏了该文章
4,402次浏览
编辑于2022年04月01日 14:34:48
如何解决:
断点kd.bos.form.FormMetadataProvide.getFormOperation(String entityId, String operationKey)
在单据entityId里面添加报错操作就可以了
------------------------------------------------------------------------------------------------------------------------
操作未定义实现类,同时*****缺显示操作的key,而不是type
出现场景: 定义一个key=modifysubject;type=donothing 的操作,点击操作按钮报错,操作未定义实现类;
正常逻辑: type=donothing 的操作为平台内置类型是有实现类,而报错确提示modifysubject(key)未定义实现类;
通过调试代码发现,当找不到操作类型type时,就会把key设为type;
操作类型是通过查询页面元实体表(T_META_ENTITY)获得的,如果查询不到可推断此页面并没有添加此操作;这里可能有点疑惑没添加你是如何使用的:例如你重写单据列表-表单模板,在新的表单模板添加了的操作,而在原单据-页面列表并没有添加相同的操作时;其实元实体查询的FNUMBER参数的值为原单据标识,所以查询不到
SELECT FDATA from T_META_ENTITY where FNUMBER = 'dmp_require_manage_org' and FKEY = 'addsubsubject' and FTYPE = 13
关键代码:
kd.bos.form.FormMetadataProvide
public FormOperate getFormOperation(String entityId, String operationKey) { String operateStr = this.metadataService.loadEntityOperationMeta(entityId, operationKey); Object op; if (!StringUtils.isEmpty(operateStr)) { op = (Map)SerializationUtils.fromJsonString(operateStr, Map.class); } else { op = new HashMap(16); ((Map)op).put("type", operationKey.toLowerCase()); ((Map)op).put("key", operationKey.toLowerCase()); Map<String, Object> name = new HashMap(16); name.put(Locale.getDefault().toString(), operationKey.toLowerCase()); ((Map)op).put("name", name); } FormOperate operate = (FormOperate)FormOperateTypes.createFormOperate((Map)op); return operate; }
赞 10
10人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读