跳转至

批量查询业务数据

功能描述

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\"]}]}]}}"
}

⚠️ 注意
使用该方法读取子表附件时,读取主表单数据时不会返回子表附件信息,需将子表 SchemaCodeObjectId 作为参数调用 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"

        },