# H3Sdk **Repository Path**: themarcus/h3sdk ## Basic Information - **Project Name**: H3Sdk - **Description**: 氚云SDK - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-05-18 - **Last Updated**: 2024-02-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: mgk ## README # 关于 H3Sdk是针对[氚云](https://www.h3yun.com/)低代码平台的官方接口实现的一套非官方SDK,为对接氚云数据开发工作提供方便快捷的请求方式。 当前版本基于Net实现,兼容.Net Standard 2.0,2.1,.Net6,.Net7。 # 教程 ## 请求客户端 H3Sdk提供一个请求对象ApiClient,所有请求方法都来自ApiClient。实例化ApiClient需要传入氚云中的EngineCode和EngineSecret ``` c# var client=new ApiClient(engineCode,engineSecret); ``` ## 标准业务请求 基础请求包含氚云标准api中的增删改查和下载附件 ### 批量查询业务对象 参数:schemaCode,filter。filter具体用法参考氚云官方文档(这里的filter实际上是仿照氚云后端Api中的filter,用法一样) ``` c# Filter filter = new Filter(); And andMatcher = new And(); Or orMatcher = new Or(); orMatcher.Add(new ItemMatcher("openclose", ComparisonOperatorType.Equal, "手工关闭")); orMatcher.Add(new ItemMatcher("openclose", ComparisonOperatorType.Equal, "系统关闭")); andMatcher.Add(orMatcher); filter.Matcher = andMatcher; var result = await client.LoadBizObjectsAsync("D146451jxcworkorder", filter); ``` 返回JToken ``` json [ { "ObjectId": "6a945b05-7c4d-4ae8-a8c2-f162fc9d7263", "Name": "WO2023022401", "CreatedBy": "张三", "OwnerId": "张三", "OwnerDeptId": "张三企业/事业部", "CreatedTime": "2023/2/24 14:33:39", "ModifiedBy": "张三", "ModifiedTime": "2023/2/24 15:03:52", "WorkflowInstanceId": "ac15a829-df6b-43ad-bfb5-13d8eec9a01f", }, { "ObjectId": "6a945b05-7c4d-4ae8-a8c2-f162fc9d7264", "Name": "WO2023022402", "CreatedBy": "李四", "OwnerId": "李四", "OwnerDeptId": "张三企业/事业部", "CreatedTime": "2023/2/24 14:33:39", "ModifiedBy": "李四", "ModifiedTime": "2023/2/24 15:03:52", "WorkflowInstanceId": "ac15a829-df6b-43ad-bfb5-13d8eec9a01f", } ] ``` ### 查询单个业务对象 参数:schemaCode,objectId ``` c# var result = await client.LoadBizObjectAsync("D146451jxcworkorder","6a945b05-7c4d-4ae8-a8c2-f162fc9d7263"); ``` 返回JToken ``` json { "ObjectId": "6a945b05-7c4d-4ae8-a8c2-f162fc9d7263", "Name": "WO2023022401", "CreatedBy": "张三", "OwnerId": "张三", "OwnerDeptId": "张三企业/事业部", "CreatedTime": "2023/2/24 14:33:39", "ModifiedBy": "张三", "ModifiedTime": "2023/2/24 15:03:52", "WorkflowInstanceId": "ac15a829-df6b-43ad-bfb5-13d8eec9a01f", } ``` ### 新增业务对象 参数,schemaCode,isSubmit,bizObject。其中isSubmit为true则提交生效,为false表示提交草稿,bizObject填入新增业务对象字段的值 ``` c# Dictionary bizObject = new Dictionary(); bizObject.Add("supplierName", "顺丰"); var result = await client.CreateBizObjectAsync("D146451MyPurchaseOrder",true,bizObject); ``` 返回新增的业务对象的objectId ```tex 018f23b9-5f91-4e50-827c-0111cb1cc5c5 ``` ### 批量新增业务对象 参数:schemaCode,isSubmit,bizObjects。其中,bizObjects为list,传入多个业务对象的字段值 ```c# Dictionary bizObject1 = new Dictionary(); bizObject1.Add("supplierName", "tom"); Dictionary bizObject2 = new Dictionary(); bizObject2.Add("supplierName", "jack"); List> bizObjects= new List>(); bizObjects.Add(bizObject1); bizObjects.Add(bizObject2); var result = await client.CreateBizObjectsAsync("D146451MyPurchaseOrder", true, bizObjects); ``` 返回新增业务对象的objectId列表 ``` tex 29366d51-a679-4dca-acc6-0c99ae6944a1 d2e5d5e8-a2ef-4390-91d6-24bf16fcfde0 ``` ### 更新业务对象 参数:schemaCode,objectId,bizObject。其中,objectId指定更新的业务对象objectId,bizObject为更新的内容 ```c# Dictionary bizObject = new Dictionary(); bizObject.Add("supplierName", "国美电器"); await client.UpdateBizObjectAsync("D146451MyPurchaseOrder", "29366d51-a679-4dca-acc6-0c99ae6944a1", bizObject); ``` 无返回值 ### 删除业务对象 参数:schemaCode,objectId ``` c# await client.RemoveBizObjectAsync("D146451MyPurchaseOrder", "f549c542-fdf5-446c-b1ea-991f9cd48178"); ``` 无返回值 ### 下载附件 参数:schemaCode,objectId,bizProperties(字典,参考下面返回值),附件字段名,附件fileId ```c# var result=await client.DownloadBizObjectFileAsync("D146451attachmentDownload", "f549c542-fdf5-446c-b1ea-991f9cd48178", null, "picture", "abfba89b-e6e5-4508-a834-977ed34bd093"); ``` 返回FileObject对象 | 字段 | 类型 | 含义 | | ------------- | ------------------------------- | -------------------------- | | FileId | string | 文件Id | | FileName | string | 文件名 | | ContentType | string | 文件类型 | | SchemaCode | string | 业务表单 | | BizObjectId | string | 业务对象id | | BizProperties | List> | 业务对象附加信息,预留字段 | | Content | byte[] | 文件内容,字节数组 | ```json { "FileId": "abfba89b-e6e5-4508-a834-977ed34bd093", "FileName": "pexels-veeterzy-114979.jpg", "ContentType": "image/jpeg", "SchemaCode": "D146451attachmentDownload", "BizObjectId": "f549c542-fdf5-446c-b1ea-991f9cd48178", "BizProperties": null, "Content": "pSjZT0yUpUXyMUpRvIxSlKXB4G4" } ``` ### 上传附件 参数: schemaCode,objectId,附件字段名,文件名,文件流 ``` c# using FileStream fileStream = new FileStream(filePath, FileMode.Open); var result = await client.UploadBizObjectFileAsync( "D146451MyProduct", "93484b32-ef2c-41e9-a1ee-10866ac54670", "file", "readfile.txt", fileStream); ``` 返回值,string(附件fileId) --- ## 自定义接口请求 氚云支持自定义Http接口,因此,根据自定义接口的类型,H3Sdk提供了两种兼容方案。 ### 返回ReturnData对象 在氚云后端实现自定义接口的时候,返回标准结果ReturnData,如: ```JSON { "code":0, "message":"", "data":{} } ``` > 备注:氚云实现自定义接口请参考官方文档 返回的业务数据均存放于data中,code==0表示执行成功,code==1表示执行异常,异常信息从message中获取 H3Sdk提供PostAsync函数接收自定义接口的情况,并返回ReturnData ```c# public async Task> PostAsync(string controller,string actionName,string appCode,Dictionary body) ``` ### 返回JToken对象 由于并非所有自定义接口的实现基于上述标准的ReturnData,因此H3Sdk提供兼容的JToken对象作为ReturnData,只要自定义接口返回ReturnData即可,不约束ReturnData的内容 ```c# public async Task PostAsync(string controller, string actionName, string appCode, Dictionary body) ```