自定义扩展标品物料、客户、供应商查询OpenAPI原创
金蝶云社区-jerry_m
jerry_m
3人赞赏了该文章 299次浏览 未经作者许可,禁止转载编辑于2024年06月14日 17:09:37

一、需求

现在标品的openapi 查询条件不符合,需要扩展。如:根据分类,业务组织编码等查询。

如下场景:直接在参数控制中选择业务组织进行过滤,会报错:实体bd_material的属性useorg不存在;或者该属性存在,但是它对应的数据库字段没有设置。

原因是useorg 并不是物料主档上的字段,而是通过 t_bd_material_u 关联。

image.png

二、解决方案

适用插件方式过滤。在插件中获取入参业务组织编码,然后查询是否有该业务组织权限,继而通过 t_bd_material_u 关联查询进行过滤。


三、操作步骤

1、请求参数,点击【添加属性】选择新增请求参数【业务组织

image.png

image.png

2、根据插件指引,参考插件开发Demo

image.png

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、注册插件

image.png


四、用户操作及效果演示

点击API测试:

http://localhost:8080/ierp/kapi/v2/basedata/bd_material/testQuery?number=2021121400001&createorg_number=00&useorg_number=00&pageSize=10&pageNo=1

image.png


五、开发环境及版本

5.0.014版本以上

参考插件处理:
https://vip.kingdee.com/article/400937810267593472?productLineId=29


六、适用单据

物料、客户、供应商

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

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0