马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册账号
×
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,图示:
需要拷贝生成的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
|