自定义扩展标品物料、客户、供应商查询OpenAPI原创
3人赞赏了该文章
299次浏览
编辑于2024年06月14日 17:09:37
一、需求
现在标品的openapi 查询条件不符合,需要扩展。如:根据分类,业务组织编码等查询。
如下场景:直接在参数控制中选择业务组织进行过滤,会报错:实体bd_material的属性useorg不存在;或者该属性存在,但是它对应的数据库字段没有设置。
原因是useorg 并不是物料主档上的字段,而是通过 t_bd_material_u 关联。
二、解决方案
适用插件方式过滤。在插件中获取入参业务组织编码,然后查询是否有该业务组织权限,继而通过 t_bd_material_u 关联查询进行过滤。
三、操作步骤
1、请求参数,点击【添加属性】选择新增请求参数【业务组织】
2、根据插件指引,参考插件开发Demo
3、实现接口 kd.bos.openapi.api.plugin.ApiQueryPlugin
public class MaterialQueryPlugin implements ApiQueryPlugin{ @Override public QFilter getFilter(QFilter filter, Map<String, Object> reqData) { QFilter filter1 = ApiQueryPlugin.super.getFilter(filter, reqData); Object useorg_number = ((HashMap)reqData.get("data")).get("useorg_number"); QFilter filterUseOrg = new QFilter("number", QFilter.equals, useorg_number); DynamicObject useOrgObj = QueryServiceHelper.queryOne("bos_org", "id", new QFilter[]{filterUseOrg}); if (useOrgObj == null){ filter1.and("1", QFilter.not_equals, 1); }else { QFilter qFilter = QFilter.joinSQL("t_bd_material", "inner join t_bd_material_u on t_bd_material_u.fdataid = t_bd_material.fid and t_bd_material_u.fuseorgid = " + useOrgObj.get("id"), new Object[0]); // 如果是不止需要查询_u 表数据,还需要查询有权限的所有数据则可以用以下条件 // Long orgId = useOrgObj.getLong("id"); // QFilter qFilter = BaseDataServiceHelper.getBaseDataFilter("bd_material", orgId); filter1.and(qFilter); } return filter1; } }
4、注册插件
四、用户操作及效果演示
点击API测试:
五、开发环境及版本
5.0.014版本以上
参考插件处理:
https://vip.kingdee.com/article/400937810267593472?productLineId=29
六、适用单据
物料、客户、供应商
赞 3
3人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *
10金币20金币30金币40金币50金币60金币
可用金币: 0