U9一种客开方案的解决

企业需要对U9做一些客开的操作。U9客开有多种形式,其中OpenAPI,WebService的方案有实际项目运行中。有一种另类的客开方案,一直掌控不到位。做程序的总是想着有点标新立异的存在嘛。从没有放弃过,直到终于搞定!

客开方案是用友U9开发群里面的高手无私的开源。认为其思想更能匹配我的思维习惯,应用场景更灵活吧。不同客开方案结合起来使用,开发效率提升不小。

碰到过的坑记录一下。以免日后忘记又要不眠不休的煎熬。

1、web.config文件中要加入以下内容,再iisreset重启一下IIS。

文件的路径是,D:\yonyou\U9CE\Portal

<!--自定义代理路径-->

<add key="CustomProxyPath" value="CustomProxy" />

<!--自定义代理是否启用热加载-->

<add key="CustomProxyHotLoad" value="true" />

<!--自定义代理热加载触发时长(秒)-->

<add key="CustomProxyHotLoadTimeSeconds" value="5" />

踩坑最深的是此处,调试时不停提示找不到文件,原来是此处没有配置路径信息!-CustomProxy是自定义,用来存放接口文件的目录。

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

<probing privatePath="bin;_app_bin;UBFLib;ApplicationLib;CustomProxy" />

</assemblyBinding>

2、Apifox调试时,注意JSON的格式。如下。从这里可以看到,另类的客开思维是纯正的反射应用。利用的是U9原生态的dll库。格式也是标准固定化的,符合用户习惯,变化大的话,理解上也是困难。

{

"context": {

"enterpriseID": "100",

"orgCode": "100",

"userCode": "admin",

"password": ""

},

"proxy": "UFIDA.U9.NPMFG.CustomProxy.SubmitPO,UFIDA.U9.NPMFG.CustomProxy",

"data": {

"pODocNo": "DPO0225080260"

}

}

3、这套客开方案起源时间较久,技术概念上有了差异。似乎高手们也很少使用它的。碰到的坑时,JSON格式处理上的差异造成的。

<!--通用代理服务-->

<service name="UFIDA.U9.WSS.ProxyService.Services.ProxyService">

<endpoint address="" behaviorConfiguration="ProxyServiceEndPointBehavior"

binding="webHttpBinding"

bindingConfiguration="restWebHttpBinding"

contract="UFIDA.U9.WSS.ProxyService.Interfaces.IProxyService" />

</service>

实际上是请求格式标准, / Content-Type / WrappedRequest 与 BodyStyle = WebMessageBodyStyle.Bare 的差异导致了调试时,总是报415错误。其中,

如果不想包一层 request,可以把接口改成:

[WebInvoke(

Method = "POST",

RequestFormat = WebMessageFormat.Json,

ResponseFormat = WebMessageFormat.Json,

BodyStyle = WebMessageBodyStyle.Bare)]

对应的JSON格式是,

{

"context": {

"enterpriseID": "100",

"orgCode": "100",

"userCode": "admin",

"password": ""

},

"queryCond": {

"entityFullName": "UFIDA.U9.MO.MO.MO",

"selectClause": "ID,ProductQty",

"whereClause": "Org=#Context.OrgID# and ProductQty>1000000",

"orderByClause": "CreatedOn desc"

},

"pageParamter": {

"pageIndex": 1,

"pageSize": 10

}

}

没有 "request": { } 包起来。
[WebInvoke(

Method = "POST",

RequestFormat = WebMessageFormat.Json,

ResponseFormat = WebMessageFormat.Json,

BodyStyle = WebMessageBodyStyle.WrappedRequest)]

对应的JSON格式如下,

{
"request": {

"queryCond": {

"entityFullName": "UFIDA.U9.MO.MO.MO",

"selectClause": "ID,ProductQty",

"whereClause": "Org=#Context.OrgID# and ProductQty>1000000",

"orderByClause": "CreatedOn desc"

},

"pageParamter": {

"pageIndex": 1,

"pageSize": 10

}

}

}

相关推荐
李妍.2 小时前
02Numpy基础(上)
开发语言·python
TheBestRucy2 小时前
Python 九阳神功之贰:面向对象(下)
开发语言·python
AI_小站3 小时前
刚面完百度的 Agent 开发岗,我才发现:世界就是个巨大的草台班子
java·开发语言·人工智能·spring·百度·langchain
felixking4 小时前
C++20 协程
开发语言·c++·协程
Zane1994125 小时前
CAS 与原子类:Java 如何实现无锁编程
java·开发语言
码农颜6 小时前
6.3 主函数流程剖析
开发语言·php
TheBestRucy6 小时前
Python 九阳神功:从零筑基到线程飞升
服务器·开发语言·网络·人工智能·python
研☆香6 小时前
聊一聊前端的常见字 关键字
开发语言·前端·javascript
草莓橙子碗7 小时前
Claude 使用指南
开发语言·python
longxiaozhang68 小时前
C# Array类:数组其实没那么难
开发语言·c#