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

}

}

}

相关推荐
AI玫瑰助手8 小时前
Python函数:默认参数的定义与注意事项
开发语言·python·信息可视化
油炸自行车8 小时前
Claude Code 错误:API Error: 400 Failed to deserialize the JSON body into the
开发语言·javascript·json·trae·claude code·api error 400
肩上风骋8 小时前
C++14特性
开发语言·c++·c++14特性
JAVA社区10 小时前
Java高级全套教程(十)—— SpringCloudAlibaba超详细实战详解
java·开发语言·spring cloud·面试·职场和发展
弥树子10 小时前
踩坑记录:服务器内网调用接口,真实请求URL与官方公开URL不一致问题排查
开发语言·php
z落落10 小时前
C# ToCharArray + foreach遍历 + String与StringBuilder
开发语言·c#
学代码的真由酱11 小时前
Java多用户一对一网页聊天室-测试报告
java·开发语言·功能测试·测试
人道领域11 小时前
【LeetCode刷题日记】669.修剪二叉搜索树
开发语言·python·算法
xiaoshuaishuai811 小时前
C# AvaloniaUI动态显示图片
开发语言·c#
日光明媚12 小时前
一步生成视频!One-Forcing:DMD + 零成本 GAN,训练 200 步超越多步 SOTA
android·开发语言·kotlin