本文介绍了一个API接口,该接口允许用户根据传入的参数构建SQL查询并返回查询结果。服务地址、JSON格式数据包及其内部参数(如FormId、FieldKeys、FilterString等)被详细列出。同时,文中提供了成功和失败的返回结果示例,以及如何处理这些结果的示例代码。还讨论了查询接口的特点、分页查询、基础资料和弹性域维度的查询方式,以及使用中的注意事项和其他参考资源链接。
一、功能:
1. 根据用户传入的参数构建查询sql,还回查询结果,可用来查询特定字段的数据
二、服务地址:serverIP为服务器地址
http://ServerIp/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc
三、参数:
1. data:json格式数据包(接口只有这个唯一的参数,里面包含具体的控制参数,参考四)
四、json格式数据包
1.FormId:业务对象表单Id(必录)
2.FieldKeys:需查询的字段key集合,字符串类型,格式:"key1,key2,..."(必录) 注(查询单据体内码,需加单据体Key和下划线,如:FEntryKey_FEntryId)
3.FilterString:过滤条件,字符串类型(非必录)
1)最近版本支持按过滤方案那种类型配置过滤条件,需要特别注意的是其中的比较符号是来自字段的过滤比较符号集配置的符号,比如时间可以使用“=”表示等号,但单据状态则使用“StatusEqualto”表示等号,
[{"Left":"(","FieldName":"FDate","Compare":"=","Value":"C","Right":")","Logic":"AND"},
{"Left":"(","FieldName":"FDocumentStatus","Compare":"StatusEqualto","Value":"C","Right":")","Logic":"AND"}],
4.OrderString:排序字段,字符串类型(非必录)
5.TopRowCount:返回总行数,整型(非必录)
6.StartRow:开始行索引,整型(非必录)
7.Limit:最大行数,整型,不能超过2000(非必录)
备注:23.11补丁开始默认最大1万行,可以在commom.config中加节点配置:WebAPIMaxQueryLimit
五、返回结果:
1. 成功结果:查询字段FieldKeys的集合,封装的接口返回的时候 List<List<object>>
2.失败结果:{"Result":{"ResponseStatus":{"ErrorCode":"","IsSuccess":"false","Errors":[{"FieldName":"","Message":"","DIndex":0}],"SuccessEntitys":[{"Id":"","Number":"","DIndex":0}],"SuccessMessages":[{"FieldName":"","Message":"","DIndex":0}],"MsgCode":""}
六、示例代码:
//参数
var data ="{\"FormId\":\"PUR_PurchaseOrder\","+// 采购订单formid
"\"TopRowCount\":0,"+// 最多允许查询的数量,0或者不要此属性表示不限制
"\"Limit\":10,"+// 分页取数每页允许获取的数据,最大不能超过2000
"\"StartRow\":0,"+// 分页取数开始行索引,从0开始,例如每页10行数据,第2页开始是10,第3页开始是20
"\"FilterString\":\"FMaterialId.FNumber='HG_TEST'\","+// 过滤条件
"\"OrderString\":\"FID ASC\","+// 排序条件
"\"FieldKeys\":\"FID,FSupplierId,FMaterialId,FMaterialId.FNumber\"}";
1.使用平台封装客户端:
var result = _client.ExecuteBillQuery(data);
或者
var result = apiClient.Execute<List<List<object>>>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery", new Object[] { data });
2.自定义客户端:
var result= _client.Execute<List<List<object>>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery", new Object[] { data });
或者
var result= _client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery", new Object[] { data });
3. 结果处理
1)如果返回的是List<List<object>>
foreach (var item in result ) { var FID= item[0]; var FSupplierId= item[1]; var FMaterialId= item[2]; var FNumber= item[3]; }
2)如果返回的是string字符串
引用:using Newtonsoft.Json;
JsonSerializer js = new JsonSerializer(); var jArrays = JsonConvert.DeserializeObject<JSONArray>(result); foreach (var arr in jArrays) { var jarr = arr as JArray; var FID= jarr[0]; var FSupplierId= jarr[1]; var FMaterialId= jarr[2]; var FNumber= jarr[3]; }
七、注意事项:
1.查询接口是ExecuteBillQuery, 不要搞成查看接口(View)
2.接口只包含一个JSON格式数据包参数,数据包包含具体的参数
3.单据体内码:单据体key+下划线+分录主键,示例:FEntity_FEntryId
4.多选基础资料: 不支持查询
5.分录序号:单据体key+FSeq,示例:FEntity_FSeq
6.基础资料名称:基础资料key+.+FName,示例:物料名称FMaterialId.FName
7.基础资料编码:基础资料key+.+FNumber,示例:物料编码FMaterialId.FNumber
8.查询不支持去重复
9.过滤条件参数FilterString, 跟写sql的where条件一样,示例:查询创建日期大于某时间,物料的创建组织为某某"FCreateDate>'2020-04-01' and (FMaterailId.FCreateOrgId.Id=100004 or FMaterailId.FCreateOrgId='机加事业部')"
10.弹性域维度查询(包括核算维度,辅助属性,仓位,职位等级):
内码:字段key+.+维度,示例:FAuxPropId.FFl00002
名称:字段key+.+维度+.+FDataValue(辅助属性)或 字段key+.+维度+.+FName(核算维度),示例:FAuxPropId.FFl00002.FDataValue
编码:字段key+.+维度+.+FNumber,示例:FAuxPropId.FFl00002.FNumber
11.分页查询:
1)、每页行数,设置Limit参数; 开始行索引,设置StartRow参数,分页最好是有确定的顺序,在OrderString排序。
2)、查询到总数,
总单据数:FieldKeys:"count(1)", FilterString: "FID>0", Limit:0
总行数: FieldKeys:"count(1)", FilterString: "FID>0 and 单据体key+_+单据体内码(比如 FEntity_FEntryId)", Limit:0
特别注意 Limit一定要设置为0。
3)、根据能分成多少页进行循环查询。
4)、假设每页10行,则第一页参数为:Limit:10, StartRow:0,第二页参数为:Limit:10, StartRow:10,第三页参数为:Limit:10, StartRow:20。。。。
12. 基础资料特殊内码,编码和名称
编码一般使用FNumber,但员工是FStaffNumber
名称一般使用FName,但辅助属性FDataValue
内码一般使用FId, 但组织使用FOrgId,用户使用FUserId
八、其他参考:
1. 登录登录: https://vip.kingdee.com/article/22914
2. 自定义接口和客户端(下面附件):https://vip.kingdee.com/article/285119785698975495
3. webapi使用指南:https://vip.kingdee.com/article/110709169845684224
推荐阅读