注册氚云社区,学习低代码知识,与更多氚友互动交流
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 氚云-白泽 于 2020-12-28 03:03 编辑
本文档演示如何在氚云中书写一个自定义接口,提供给第三方系统调用1. 新建一个表单用来保存自定义接口 2.在表单设计----》后端代码 插入自定义接口,(默认的代码保持不变,请勿删除)保存成功后,即可使用自定义代码接口了。 [color=rgba(11, 19, 32, 0.64)] - //自定义接口代码,代码放在本表单默认的类代码下
- //说明:自定义接口类个数无限制,类名可以自定义,但是类名不可重复,且必须继承自H3.SmartForm.RestApiController
- public class MyApiController: H3.SmartForm.RestApiController
- {
- //此构造方法必须有,但是方法体内不需要写任何代码
- public MyApiController(H3.SmartForm.RestApiRequest request): base(request) { }
-
- //第三方请求本自定义接口时,会触发本事件
- protected override void OnInvoke(string actionName, H3.SmartForm.RestApiResponse response)
- {
- try
- {
- //“CreateOneData”可以为任意非空字符串,用来判断第三方请求的动作
- /*注:actionName 不能为已公开的ActionName,如下:
- LoadBizObject 加载业务数据
- LoadBizObjects 批量加载业务数据
- CreateBizObject 创建业务数据
- CreateBizObjects 批量创建业务数据
- UpdateBizObject 更新业务数据
- RemoveBizObject 删除业务数据
- */
- if(actionName == "CreateOneData")
- {
- //从传入的参数里获取 key为“para1” 的值,若未传,则得到默认值“defaultValue”,若传的值无法转换成string类型,则报错
- string stringValue = this.Request.GetValue<string>("para1", "defaultValue");
- //从传入的参数里获取 key为“para2” 的值,若未传,则得到默认值0,若传的值无法转换成int类型,则报错
- int intValue = this.Request.GetValue<int>("para2", 0);
-
- //当找到了对应的actionName时,回复给第三方请求一个 key为“result”值为“success” 的结果
- response.ReturnData.Add("result", "success");
- //当找到了对应的actionName时,回复给第三方请求一个 key为“message”值为空字符串 的结果
- response.ReturnData.Add("message", string.Empty);
-
-
- //以下代码演示在自定义接口中查询业务对象的范例,如实际用不上请删除
- H3.Data.Filter.Filter filter = new H3.Data.Filter.Filter();
- H3.Data.Filter.And andMatcher = new H3.Data.Filter.And();
- andMatcher.Add(new H3.Data.Filter.ItemMatcher("Status", H3.Data.ComparisonOperatorType.Equal, 1));//筛选出数据状态为生效的数据
- filter.Matcher = andMatcher;
- H3.DataModel.BizObjectSchema schema = this.Request.Engine.BizObjectManager.GetPublishedSchema("D00021MyApiTest");
- //查询“D00021MyApiTest”表单里所有符合筛选条件的业务对象,得到一个业务对象数组
- //注:H3.Organization.User.SystemUserId 为系统默认用户Id,在定时器中、自定义接口中由于没有当前登录人,所以用这个代替this.Request.UserContext.UserId
- H3.DataModel.BizObject[] arr = H3.DataModel.BizObject.GetList(this.Request.Engine, H3.Organization.User.SystemUserId,
- schema, H3.DataModel.GetListScopeType.GlobalAll, filter);
-
-
- Dictionary < string, object > dic = new Dictionary<string, object>();
- //从第三方传入参数里拿出传回给第三方
- dic.Add("StringValue", stringValue);
- //传回给第三方一个小数
- dic.Add("DoubleValue", 5.24343);
- //从第三方传入参数里拿出传回给第三方
- dic.Add("ArrayValue", new int[4]{ intValue, intValue + 1, intValue - 2, intValue + 3});
- //回复给第三方请求一个 key为“data”值为对象 的结果
- response.ReturnData.Add("data", dic);
- } else
- {
- //当传入一个未找到的actionName时,回复给第三方请求一个 key为“result”值为“error” 的结果
- response.ReturnData.Add("result", "error");
- //当传入一个未找到的actionName时,回复给第三方请求一个 key为“message”值为字符串 的异常提示
- response.ReturnData.Add("message", "无法处理actionName为“" + actionName + "”的请求!");
- }
- } catch(Exception ex)
- {
- //当执行的代码发生异常时,回复给第三方请求一个 key为“result”值为“error” 的结果
- response.ReturnData.Add("result", "error");
- //当执行的代码发生异常时,回复给第三方请求一个 key为“message”值为捕获到的异常原因
- response.ReturnData.Add("message", ex.Message);
- }
- }
- }
复制代码3.第三方系统中调用自定义接口示例(C#版): - //此处为请求的url
- string apiAddress = @"https://www.h3yun.com/OpenApi/Invoke";
- System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(apiAddress);
-
- //设置本次请求的方式为POST
- request.Method = "POST";
-
- //设置本次请求附带的数据为json格式
- request.ContentType = "application/json";
-
- //身份认证参数,根据自己企业开发信息修改此处(注意:此两项请对管理员以外人员保密)
- request.Headers.Add("EngineCode", "XXXXXXXXXXXX");//系统集成-企业开发信息-EngineCode
- request.Headers.Add("EngineSecret", "XXXXXXXXXXXX");//系统集成-企业开发信息-Secret
-
- //请求附带参数
- Dictionary<string, object> dicParams = new Dictionary<string, object>();
- //“CreateOneData”可以为其他任意非空字符串,用来给自定义接口判断本次请求的动作
- /*注:actionName 不能为已公开的ActionName,如下:
- LoadBizObject 加载业务数据
- LoadBizObjects 批量加载业务数据
- CreateBizObject 创建业务数据
- CreateBizObjects 批量创建业务数据
- UpdateBizObject 更新业务数据
- RemoveBizObject 删除业务数据
- */
- dicParams.Add("ActionName", "CreateOneData");
-
- //“MyApiController”是自定义接口的类名
- dicParams.Add("Controller", "MyApiController");
-
- //“D00021hca_test1”是自定义接口所在应用的应用编码,查看应用编码的方法:列表页面点击左上角应用名后的设置按钮,再点击重命名,在弹窗中可以看到当前应用的应用编码
- dicParams.Add("AppCode", "D00021hca_test1");
-
- //传给自定义接口的一个字符串
- dicParams.Add("para1", "传给接口的参数一");
-
- //传给自定义接口的一个数值
- dicParams.Add("para2", 999);
-
- string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(dicParams);
-
- byte[] bytes;
- bytes = System.Text.Encoding.UTF8.GetBytes(jsonData);
- request.ContentLength = bytes.Length;
- using (System.IO.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 StrData = string.Empty;
- using (System.IO.StreamReader Reader = new System.IO.StreamReader(s, Encoding.UTF8))
- {
- while ((StrData = Reader.ReadLine()) != null)
- {
- strValue += StrData + "\r\n";
- }
- }
- }
- }
-
- //控制台打印本次请求得到的结果
- Console.WriteLine(strValue);
-
- /*调用成功时strValue的值展示:
- {
- "Successful": true,
- "ErrorMessage": null,
- "Logined": false,
- "ReturnData": {
- "result": "success",
- "message": "",
- "data": {
- "StringValue": "传给接口的参数一",
- "DoubleValue": 5.24343,
- "ArrayValue": [
- 999,
- 1000,
- 997,
- 1002
- ]
- }
- },
- "DataType": 0
- }
- */
-
- /*调用失败时strValue的值展示:
- {
- "Successful": true,
- "ErrorMessage": null,
- "Logined": false,
- "ReturnData": {
- "result": "error",
- "message": "无法处理actionName为“BadActionName”的请求!"
- },
- "DataType": 0
- }
- */
复制代码
|