自定义接口问题小结
金蝶云社区-云社区用户5O460413
云社区用户5O460413
0人赞赏了该文章 1,083次浏览 未经作者许可,禁止转载编辑于2019年01月23日 09:10:58

以下是个人拙见,仅供参考,目前接触比较浅显,还请指正!
调用总部封装的接口,目前接触到的有两大种类:第一种是平台封装的各种单据的保存、提交、审核等等接口。 按照常规做法调用即可,后台,UI端调用皆可。
第二种是咱们的自定义接口:

KDTLoginBusinessService : Kingdee.BOS.WebApi.ServicesStub.AbstractWebApiBusinessService
public KDTLoginBusinessService(Kingdee.BOS.ServiceFacade.KDServiceFx.KDServiceContext context)
: base(context)
{

}

public JSONObject ExecuteService(string parameter)
{
//实现自己的业务内容即可
JSONObject parameters = JSONObject.Parse(parameter);
}
在调用自定义接口的时候,我们会出现以下问题需要特别注意:
有两种方式我们将来会请求我们的自定义接口,第一种是通过页面AJAX请求,第二种则是后台请求。
截止目前为止,第二种后台请求,
HttpClient httpClient = new HttpClient();
httpClient.Url = LoginUrl;
List LoginParameters = new List();
LoginParameters.Add(ZTID);//帐套Id
LoginParameters.Add(UserID);//用户名
LoginParameters.Add(Password);//密码
LoginParameters.Add(LOCID);
httpClient.Content = JsonConvert.SerializeObject(LoginParameters);
var iResult = JObject.Parse(httpClient.AsyncRequest())["LoginResultType"].Value();
if (iResult == 1)
{
httpClient.Url = url;
List Parameters = new List();
JObject jObj = new JObject();
jObj.Add("starttime", "2019-01-01 00:00:00");
jObj.Add("endtime", "2019-01-30 00:00:000");
jObj.Add("ids", "110361,110381,110385,166936,111195,164074,1640906");
Parameters.Add(jObj);
httpClient.Content = JsonConvert.SerializeObject(Parameters);
var responseOut = httpClient.AsyncRequest();
}

此处调用实例,完全没有问题的。
但是通过UI页面调用则会出现一些问题。
比如就目前的接口,我们通过以上参数,通过页面请求,弄死都不会成功。
我们往往测试自定义接口的时候,把注意力放在了自己要传递的接口参数上,传递完成后,明明通过后台调用成功,UI调用的时候就不成功?!
原因在哪里?!
原来我们忽略了后台封装的潜在隐性参数,httpClient 里面
{ "format": 1,//隐性参数 "useragent": "ApiClient",/隐性参数 "rid": "1507897230",/隐性参数 "parameters": "[{\"starttime\":\"2019-01-01 00:00:00\",\"endtime\":\"2019-01-30 00:00:000\",\"ids\":\"110361,110381,110385,166936,111195,164074,1640906\"}]",//我们自定义的参数 "timestamp": "2019-01-21T09:33:34.1072462+08:00",/隐性参数 "v": "1.0"/隐性参数}

用此方法,UI自定义接口,便可搞定。