找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 965|回复: 6

[学习] WebAPI开发

[复制链接]
发表于 2025-2-17 09:46:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×
1、使用前提:

只适用于U9C企业版和标准版;

建议使用前打标准补丁带如下关键字的标准补丁:PUB/UBF/BS/SLC/ISV

2、使用背景:

标准接口不满足对接需求,或个性化的对接需求,或客开单据需要开发服务给第三方调用等

3、客开流程(有授权):

无需借助UBF开发平台也可开发WebAPI给第三方调用。

使用Visual Studio开发工具开发类库项目,引用..Portal/bin/UFSoft.UBF.MVC.dll和..Portal/bin/System.Web.Http.dll文件

新建客开接口的CustXXXController.cs文件,类名固定为XXXController,XXX不允许和产品的Controller重复(请先查看下标准的Controller,地址:https://www.yyu9c.com/swagger),继承OpenAPIController

XXController类中建自己需要的不同接口名称即可(不要和产品的实体名称一致,否则可能会和标准的API冲突,比如料品的客开API,不可定义成ItemMasterController,建议开头全部为Cust开头,如:CustItemMasterController)

所有Controller中的方法返回值,全部返回ApiResult对象,T泛型可以返回任意DTO对象或任意DTO对象的集合

所有Controller中的方法传入值,参数需要声明[FromBody] List<自己定义的DTO类型>或者[FromBody] 自己定义的DTO类型(即参数传入是集合,返回对应T泛型应该也是个集合)

Controller参考示例:

///


/// 需要引入UFSoft.UBF.MVC.dll 正式接口,需要继承我们的OpenAPIController

///


public class SupplierController: OpenAPIController

{

///


/// 新增供应商

///


/// 供应商集合

///

[HttpPost]

public ApiResult> Create([FromBody] List supplierDTOs)

{

//return UFIDA.U9.ISV.PUB.RestSV.Business.CBO.Supplier.CreateSupplier.Do(supplierDTOs);

List resultList = UFIDA.U9.ISV.PUB.RestSV.Business.CBO.Supplier.CreateSupplier.Do(supplierDTOs);//这里写自己的业务逻辑实现代码,返回ApiResult>即可

ApiResult> apiresult = new ApiResult>(resultList);

return apiresult;

}

}


4、客开流程(无授权):

客开流程(有授权):第三方调用需要传入授权码,获取Token才能调用业务接口

客开流程(无授权):只支持客开,第三方调用可以直接调用,无需调用授权接口

U9接口客开提供有授权和无授权接口访问机制:第四步与第三步是提供的两种不同的给第三方调用的方式,第三步开发的接口第三方调用需要第三方传入授权、传入Token才可以调用业务接口,第四步开发的接口第三方调用不需要传入授权

  • 开发方式和第三方的区别是继承ApiController( System.Web.Http命名空间下)
  • 引用..Portal/bin/UFSoft.UBF.MVC.dll和..Portal/bin/System.Web.Http.dll文件
  • 同时需要引用UFIDA.U9.CBO.PubSV.dll和UFSoft.UBF.AopFrame.dll(重写上下文用,不管是调用U9的任何方法,都要重写上下文)
  • 上下文需要客开自己增加企业编码、组织编码、用户编码,同时客开需要根据传入的上下文参数写入到U9上下文,如下图及示例:

UFSoft.UBF.Util.Context.PlatformContext.Current 中可以取出上下文信息:

重写上下文,客开代码要写到using里面:

using (BPForEngine bp = new BPForEngine())

{

              ContextDTO tdto = new ContextDTO();

           tdto.UserCode=context.UserCode;//取接口传入的用户编码

           tdto.EntCode=context.EnterpriseID;//取接口传入的企业编码

           tdto.CultureName="zh-CN";//固定

           tdto.OrgCode=context.OrgCode;//取接口传入的组织编码

           tdto.WriteToContext();

//编写代码逻辑

}


举例如下:

using (BPForEngine bp = new BPForEngine())

{

           ContextDTO cdto = new ContextDTO();

            cdto.EntCode = head[0].EntCode;

            cdto.OrgCode = head[0].OrgCode;

            cdto.UserCode = head[0].UserCode;

            cdto.WriteToContext();//重写上下文

           UFIDA.U9.CBO.SCM.Supplier.BatchQuerySupplierByDTOSRV proxy = new UFIDA.U9.CBO.SCM.Supplier.BatchQuerySupplierByDTOSRV();

            proxy.QuerySupplierDTOs = new List();

           UFIDA.U9.CBO.SCM.Supplier.QuerySupplierDTO queryDTO = new UFIDA.U9.CBO.SCM.Supplier.QuerySupplierDTO();

            queryDTO.Supplier = new CommonArchiveDataDTO();

            queryDTO.Supplier.Code = head[0].DocNO;

            queryDTO.Org = new CommonArchiveDataDTO();

            queryDTO.Org.Code = UFIDA.U9.Base.Context.LoginOrg.Code;

           proxy.QuerySupplierDTOs.Add(queryDTO);

          List resultList =  proxy.Do();//代码实现

}


5、部署说明:

需要生成类库项目的dll和xml,图示:

1730885198236770.png.jpg

需要拷贝生成的xx.dll和xxx.xml放置到..Portal\ApplicationServer\Libs下(非常关键);

在Portal\OpenApiExtend.config文件中手工配置dll文件路径,在MyApi节点的url配置dll路径的相对地址,即:\ApplicationServer\Libs\XXX.dll(非常关键)

上面两步做完操作一定要重启IIS

访问地址 http://U9地址/swagger/ui/index 即可打开所有服务的Controller,找到自己做的Controller即可,调用方式参考“三、第三方调用说明”步骤完全一样。

6、参数定义的特殊说明:

定义参数DTO时,能够保证每个参数被成功序列化的方式是

参数定义前加上:

[DataMember(Name = "参数名")]


附录资料:https://docs.qq.com/doc/DQUJsbm5NVmFBUGxP


发表于 2025-3-16 09:37:17 | 显示全部楼层
你好,为什么我都饿U9C企业版portal目录下没有webapi文件,这是安装完默认就有的,还是需要配置的?

点评

安装选项中未勾选WebAPI模块,如果你在安装时没有明确地选择包含“WebAPI”相关的组件,则该部分不会自动部署到系统中。  详情 回复 发表于 2025-3-17 09:20
回复 点赞 拍砖

使用道具 举报

 楼主| 发表于 2025-3-17 09:20:55 | 显示全部楼层
qidashuai112 发表于 2025-3-16 09:37
你好,为什么我都饿U9C企业版portal目录下没有webapi文件,这是安装完默认就有的,还是需要配置的?
...

安装选项中未勾选WebAPI模块,如果你在安装时没有明确地选择包含“WebAPI”相关的组件,则该部分不会自动部署到系统中。
回复 点赞 拍砖

使用道具 举报

发表于 2025-4-3 13:07:44 | 显示全部楼层
请教一下,为什么我找不到OpenApiExtend.config文件,我的 U9地址/swagger/ui/index地址是能打开的。
回复 点赞 拍砖

使用道具 举报

发表于 2025-4-17 10:57:42 | 显示全部楼层
学习到了,非常感谢,感谢分享。
回复 点赞 拍砖

使用道具 举报

发表于 2025-5-22 16:42:55 | 显示全部楼层
这不是官方文档吗
回复 点赞 拍砖

使用道具 举报

发表于 2025-7-9 15:40:37 | 显示全部楼层
Marco-1988 发表于 2025-3-17 09:20
安装选项中未勾选WebAPI模块,如果你在安装时没有明确地选择包含“WebAPI”相关的组件,则该部分不会自动 ...

在那里钩选 呢?
回复 点赞 拍砖

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2025-8-3 08:24 , Processed in 0.076116 second(s), 17 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表