批量查询业务数据
功能描述
LoadBizObjects 批量加载业务数据,最大可加载 500 条数据。
请求方式
POST(HTTPS)
请求地址
https://www.h3yun.com/OpenApi/Invoke
参数说明
| 参数 | 参数类型 | 必须 | 说明 |
|---|---|---|---|
| ActionName | String | 是 | 调用的方法名。 |
| SchemaCode | String | 是 | 需要查询的表单编码。 |
| Filter | String | 是 | 过滤条件。默认返回前 500 条数据。 |
参数示例:
{
"ActionName": "LoadBizObjects",
"SchemaCode": "D000183ebdce12c67bb4fb6a9ce1058b2f829f4",
"Filter": "{\"FromRowNum\":0,\"RequireCount\":false,\"ReturnItems\":[\"F0000001\",\"F0000002\",\"F0000004\"],\"SortByCollection\":\"[{\\\"ItemName\\\":\\\"CreatedTime\\\",\\\"Direction\\\":1}]\",\"ToRowNum\":50,\"Matcher\":{\"Type\":\"And\",\"Matchers\":[{\"Type\":\"Item\",\"Name\":\"F0000001\",\"Operator\":2,\"Value\":\"Test2\"},{\"Type\":\"Or\",\"Matchers\":[{\"Type\":\"Item\",\"Name\":\"F0000002\",\"Operator\":2,\"Value\":\"2024-09-12\"},{\"Type\":\"Item\",\"Name\":\"F0000004\",\"Operator\":6,\"Value\":[\"选项3\",\"选项1\"]}]}]}}"
}
⚠️ 注意
使用该方法读取子表附件时,读取主表单数据时不会返回子表附件信息,需将子表SchemaCode和ObjectId作为参数调用LoadBizObject方法获取。
Filter参数说明
| 参数 | 参数类型 | 必须 | 说明 |
|---|---|---|---|
| FromRowNum | String | 是 | 分页查询起始行号(从 0 开始)。 |
| RequireCount | String | 是 | 是否返回总行数。 |
| ReturnItems | String | 是 | 返回字段列表(不填返回所有字段)。 |
| SortByCollection | String | 是 | 排序字段(当前不支持使用,需置空)。 |
| ToRowNum | String | 是 | 分页查询结束行号。 |
| Matcher | String | 是 | 查询条件,详见 Filter 数据结构。 |
Filter数据结构
public class Filter
{
public int FromRowNum { get; set; } = -1;
public bool RequireCount { get; set; }
public string[] ReturnItems { get; set; } = new string[] { };
public string SortByCollection { get; set; } = "[]";
public int ToRowNum { get; set; } = 100;
public BaseMatcher Matcher { get; set; }
public abstract class BaseMatcher
{
public abstract string Type { get; }
}
public class AndMatcher : BaseMatcher
{
public AndMatcher()
{
Matchers = new List<BaseMatcher>();
}
public override string Type { get;} = "And";
public List<BaseMatcher> Matchers { get; set; }
}
public class OrMatcher : BaseMatcher
{
public OrMatcher()
{
Matchers = new List<BaseMatcher>();
}
public override string Type { get; } = "Or";
public List<BaseMatcher> Matchers { get; set; }
}
public class FieldMatcher : BaseMatcher
{
public override string Type { get;} = "Item";
/// <summary>
/// 筛选的字段编码
/// </summary>
public string Name { get; set; }
/// <summary>
/// 比较运算符
/// </summary>
public int Operator { get; set; }
/// <summary>
/// 筛选值(字符串,字符串数组,数字数组)
/// </summary>
public object Value { get; set; }
}
public class SortBy
{
/// <summary>
/// 排序的字段编码
/// </summary>
public string ItemName { get; set; }
/// <summary>
/// 排序的方向 0:升序,1:降序
/// </summary>
public int Direction { get; set; }
}
}
Operator说明
| Operator | 说明 |
|---|---|
| 0 | 大于。 |
| 1 | 大于等于。 |
| 2 | 等于。 |
| 3 | 小于等于。 |
| 4 | 小于。 |
| 5 | 不等于。 |
| 6 | 在某个范围内。 |
| 7 | 不在某个范围内。 |
| 8 | 左对象包含右对象(如集合或字符串包含)。 |
| 13 | 以指定字符串开头。 |
构造Filter示例
// 目标参数结构:
// {
// "ActionName": "LoadBizObjects",
// "SchemaCode": "D000183ebdce12c67bb4fb6a9ce1058b2f829f4",
// "Filter": "{\"FromRowNum\":0,\"RequireCount\":false,\"ReturnItems\":[\"F0000001\",\"F0000002\",\"F0000004\"],\"SortByCollection\":\"[]\",\"ToRowNum\":50,\"Matcher\":{\"Type\":\"And\",\"Matchers\":[{\"Type\":\"Item\",\"Name\":\"F0000001\",\"Operator\":2,\"Value\":\"Test2\"},{\"Type\":\"Or\",\"Matchers\":[{\"Type\":\"Item\",\"Name\":\"F0000002\",\"Operator\":2,\"Value\":\"2024-09-12\"},{\"Type\":\"Item\",\"Name\":\"F0000004\",\"Operator\":2,\"Value\":\"选项3\"}]}]}}"
// }
// 构造步骤:
Filter filter = new Filter();
AndMatcher and = new AndMatcher();
//文本等于
and.Matchers.Add(new FieldMatcher()
{
Name = "F0000001",
Operator = 2,
Value = "Test2"
});
OrMatcher or = new OrMatcher();
//日期等于
or.Matchers.Add(new FieldMatcher()
{
Name = "F0000002",
Operator = 2,
Value = "2024-09-12"
});
//文本 等于任意一个(在某个范围内)
or.Matchers.Add(new FieldMatcher()
{
Name = "F0000004",
Operator = 6,
Value = new string[] {"选项3","选项1"}
});
and.Matchers.Add(or);
filter.Matcher = and;
filter.FromRowNum = 0;
filter.ToRowNum = 50;
filter.ReturnItems = new string[] { "F0000001", "F0000002", "F0000004" };
List<H3.Data.Filter.SortBy> sortBys = new List<Data.Filter.SortBy>();
sortBys.Add(new Data.Filter.SortBy("CreatedTime", Data.Filter.SortDirection.Descending));
filter.SortByCollection = Newtonsoft.Json.JsonConvert.SerializeObject(sortBys);
string json = Newtonsoft.Json.JsonConvert.SerializeObject(filter);
Dictionary<string, string> paramDict = new Dictionary<string, string>();
paramDict.Add("ActionName", "LoadBizObjects");
paramDict.Add("SchemaCode", "D000183ebdce12c67bb4fb6a9ce1058b2f829f4");
paramDict.Add("Filter", json);
string postData = Newtonsoft.Json.JsonConvert.SerializeObject(paramDict);
-- 等效 SQL 语句:
SELECT * FROM I_D000183ebdce12c67bb4fb6a9ce1058b2f829f4
WHERE F0000001 = 'Test2'
AND (F0000002 = '2024-09-12'
OR F0000004 = '选项3')
Name 为字段名,Operator 为运算符,Value 为数值。
运算符参考 H3.Data.ComparisonOperatorType。
请求示例(C#)
string apiAddress = @"https://www.h3yun.com/OpenApi/Invoke";
HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create(apiAddress);
request.Method = "POST";
request.ContentType = "application/json";
// 身份认证参数
request.Headers.Add("EngineCode", "");
request.Headers.Add("EngineSecret", "");
// 请求参数
Dictionary<string, object> dicParams = new Dictionary<string, object>();
dicParams.Add("ActionName", "LoadBizObjects");
dicParams.Add("SchemaCode", "D000024chuangjian");
dicParams.Add("Filter", "{\"FromRowNum\": 0,\"RequireCount\": false,\"ReturnItems\": [], \"SortByCollection\": [],\"ToRowNum\": 500, \"Matcher\": { \"Type\": \"And\", \"Matchers\": []}}");
string jsonData = JsonConvert.SerializeObject(dicParams);
byte[] bytes;
bytes = System.Text.Encoding.UTF8.GetBytes(jsonData);
request.ContentLength = bytes.Length;
using (Stream writer = request.GetRequestStream())
{
writer.Write(bytes, 0, bytes.Length);
writer.Close();
}
string strValue = string.Empty;
using (System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse())
{
using (System.IO.Stream s = response.GetResponseStream())
{
string StrDate = string.Empty;
using (StreamReader Reader = new StreamReader(s, Encoding.UTF8))
{
while ((StrDate = Reader.ReadLine()) != null)
{
strValue += StrDate + "\r\n";
}
}
}
}
请求示例(Java)
Map<String, String> paramMap = new HashMap();
paramMap.put("ActionName", "LoadBizObjects");
paramMap.put("SchemaCode", "D000024chuangjian");
paramMap.put("Filter", "{\"FromRowNum\": 0,\"RequireCount\": false,\"ReturnItems\": [], \"SortByCollection\": [],\"ToRowNum\": 500, \"Matcher\": { \"Type\": \"And\", \"Matchers\": []}}");
// 身份认证参数
Map headers = new HashMap();
headers.put("EngineCode", "");
headers.put("EngineSecret", "");
Gson gson = new Gson();
String result = HttpRequestUtil.sendPost(url, gson.toJson(paramMap), headers);
返回结果
| 参数 | 说明 |
|---|---|
| Successful | 返回结果是否成功(true/false)。 |
| ErrorMessage | 错误信息。 |
| Logined | 未使用(可忽略)。 |
| ReturnData | 返回的数据。 |
| DataType | 返回数据类型(默认值 0)。 |
返回值示例:
{
"Successful": true,
"ErrorMessage": null,
"Logined": false,
"ReturnData": {
"BizObjectArray": [{
"ObjectId": "fea0ade0-505d-4ffc-bca0-6cbdf3c302c6",
"Name": "123",
"ModifiedBy": "System",
"ModifiedTime": "2019/6/12 14:32:06",
"WorkflowInstanceId": "f6a030fc-1311-4877-bc88-cb2649a8f784",
"Status": 2,
"OwnerId": "System",
"F0000028": null,
"F0000002": null,
"ModifiedByObject": {
"ObjectId": "18f923a7-5a5e-426d-94ae-a55ad1a4b239",
"Name": "System"
},
"OwnerIdObject": {
"ObjectId": "f3f69a49-edf6-468d-9aee-8cbc82a46662",
"Name": "System"
},
"CreatedByObject": {
"ObjectId": "f3f69a49-edf6-468d-9aee-8cbc82a46662",
"Name": "System"
},
"OwnerDeptIdObject": {
"ObjectId": "04204118-a9d4-42bf-898b-1cb2f2f73e29",
"Name": "System"
}
}, {
"ObjectId": "83de1dfa-9043-4eb8-9943-36849c58ce0e",
"Name": "",
"ModifiedBy": "",
"ModifiedTime": "2019/6/11 17:33:25",
"WorkflowInstanceId": "",
"Status": 0,
"OwnerId": "System",
"F0000028": "",
"F0000002": "",
"OwnerIdObject": {
"ObjectId": "f3f69a49-edf6-468d-9aee-8cbc82a46662",
"Name": "System"
},
"CreatedByObject": {
"ObjectId": "f3f69a49-edf6-468d-9aee-8cbc82a46662",
"Name": "System"
},
"OwnerDeptIdObject": {
"ObjectId": "04204118-a9d4-42bf-898b-1cb2f2f73e29",
"Name": "Syste "
}
}]
},
"DataType": 0
}
⚠️ 注意
人员/部门字段会返回两个字段,原字段会返回姓名/部门名称,同时会衍生一个{字段编码}Object字段,衍生字段是一个对象,包含氚云的用户/部门Id和姓名/部门名称。
以拥有者为例:
"OwnerId": "System",
"OwnerIdObject": {
"ObjectId": "f3f69a49-edf6-468d-9aee-8cbc82a46662", "Name": "System" },