一. 新建项目
- 新建解决方案
- 使用UBF工具新建解决方案


- 使用UBF工具新建解决方案
- 新建轻量服务项目
- 在创建好的解决方案下新建轻量服务项目,生成的项目文件是以.ubfserproj结尾



- 在创建好的解决方案下新建轻量服务项目,生成的项目文件是以.ubfserproj结尾
- 修改配件名
- 切换到模型视图,选中最外层,再点击属性修改配件名,例如:UFIDA.Cust.xxx.TestSV,方便后续区分其它插件


- 切换到模型视图,选中最外层,再点击属性修改配件名,例如:UFIDA.Cust.xxx.TestSV,方便后续区分其它插件
- 新建服务组件
- 在创建好的轻量服务项目下新建服务组件,用作一个模块。例如:mo,po等。生成的组件是以.ubfsvr结尾


- 第2步创建轻量服务项目时自带的服务组件可以删除

- 在创建好的轻量服务项目下新建服务组件,用作一个模块。例如:mo,po等。生成的组件是以.ubfsvr结尾
- 修改名称和显示名称
- 切换到模型视图,选中服务组件下的以花括号:{}开头的命名空间,再点击属性修改名称和显示名称,两者保持一致。例如:UFIDA.Cust.xxx.itemMaster,方便后续区分其它模块



- 切换到模型视图,选中服务组件下的以花括号:{}开头的命名空间,再点击属性修改名称和显示名称,两者保持一致。例如:UFIDA.Cust.xxx.itemMaster,方便后续区分其它模块
- 新建接口
- 切换到模型视图,选中命名空间下的模型图,从左侧工具箱拖取服务和数据传输对象

- 数据传输对象包括入参对象和返回对象,下方的详细信息可以添加数据传输对象的字段,点击属性修改名称和显示名称。例如:FindItemMasterDTO,ResponseDTO等


- 服务即接口,下方的详细信息可以添加服务的入参(CreateMODTO),点击属性修改名称和显示名称,例如:CreateMO,创建MO,还可以关联返回类型(已存在的数据传输对象,ResponseDTO),调整接口事务

- 切换到模型视图,选中命名空间下的模型图,从左侧工具箱拖取服务和数据传输对象
- 构造解决方案
- 回到解决方案,右键选择构造,项目构造后会在指定目录下生成构造后的项目文件。具体路径在消息列表中会打印出来,至此项目新建完毕

- 回到解决方案,右键选择构造,项目构造后会在指定目录下生成构造后的项目文件。具体路径在消息列表中会打印出来,至此项目新建完毕
二. 项目开发
- 项目拷贝
- 解决方案构造后的项目不能直接使用,拷贝一份到工作文件夹即可,源文件保留作为根,方便后续重新生成项目
- 项目开发
- 拷贝后的项目点击项目中.sln结尾的文件即可打开项目

- 编辑对应接口的Extend文件,书写代码,实现具体功能

- 编写时用到现有方法或工具类时,可以导入依赖,根据需要引用不同的包
- 代码书写完毕后,编译,生成项目,接口文件到指定文件夹。其中项目文件6个,接口文件每个接口1个


- 将项目文件和接口文件拷贝到U9的运行环境中,并给每个接口配一个配置文件,例如:接口文件:UFIDA.Cust.GJ.itemMaster.IFindItemMaster.svc, 配置文件:UFIDA.Cust.GJ.itemMaster.IFindItemMaster.config,配置文件放在\xxx\Portal\RestServices下

- 具体接口和项目文件放到哪个目录,接口怎么配置,参考历史项目即可
- 配置后重启iis服务,新的接口即可生效,浏览器调用接口测试xxxx/U9/RestServices/UFIDA.Cust.GJ.itemMaster.IFindItemMaster.svc,检查接口是否可用。接口调用xxxx/U9/RestServices/UFIDA.Cust.GJ.itemMaster.IFindItemMaster.svc/Do



- 拷贝后的项目点击项目中.sln结尾的文件即可打开项目
- 项目调试
- vs中可以直接调试,选择菜单栏的调试,附加到进程,筛选进程 w3wp.exe,确认后调试开始,此时可以调试Extend中书写的代码,无法调试源码,所以只能用于简单调试自己的代码


- 使用dnSpy工具进行调试,选择项目中待接口所在的dll文件,调试,附加到进程,即可开始调试,此处调试可以追踪底层源码,排查官方代码可能存在的问题
- vs中可以直接调试,选择菜单栏的调试,附加到进程,筛选进程 w3wp.exe,确认后调试开始,此时可以调试Extend中书写的代码,无法调试源码,所以只能用于简单调试自己的代码
三. 项目部署
- 把对应的项目文件,接口文件,接口配置文件拷贝到对应生产环境的U9运行目录下,注意目录正确即可,拷贝时如果失败,需要关闭ApplicationServer再拷贝,重启iis服务即可
四. 关键方法
- 获取上下文
PlatformContext context = PlatformContext.Current;
- 查询
IssueDocType issueDocType = IssueDocType.Finder.Find("Code = '" + docTypeCode + "' and Org = '" + org.ID + "'");
- 大事务
using (UBFTransactionScope scope = new UBFTransactionScope(TransactionOption.RequiresNew))
{
// 回滚
scope.Rollback();
// 提交
scope.Commit();
}
小事务
using (Session session = Session.Open())
{
RcvRptDoc rcvRptDoc;
rcvRptDoc = RcvRptDoc.Finder.FindByID(careateResult.ID);
rcvRptDoc.RcvDep = "xxx";
session.Commit();
}