工匠智造文档

U9

一. 新建项目

  1. 新建解决方案
    • 使用UBF工具新建解决方案12
  2. 新建轻量服务项目
    • 在创建好的解决方案下新建轻量服务项目,生成的项目文件是以.ubfserproj结尾345
  3. 修改配件名
    • 切换到模型视图,选中最外层,再点击属性修改配件名,例如:UFIDA.Cust.xxx.TestSV,方便后续区分其它插件67
  4. 新建服务组件
    • 在创建好的轻量服务项目下新建服务组件,用作一个模块。例如:mo,po等。生成的组件是以.ubfsvr结尾89
    • 第2步创建轻量服务项目时自带的服务组件可以删除10
  5. 修改名称和显示名称
    • 切换到模型视图,选中服务组件下的以花括号:{}开头的命名空间,再点击属性修改名称和显示名称,两者保持一致。例如:UFIDA.Cust.xxx.itemMaster,方便后续区分其它模块111213
  6. 新建接口
    • 切换到模型视图,选中命名空间下的模型图,从左侧工具箱拖取服务和数据传输对象14
    • 数据传输对象包括入参对象和返回对象,下方的详细信息可以添加数据传输对象的字段,点击属性修改名称和显示名称。例如:FindItemMasterDTO,ResponseDTO等1516
    • 服务即接口,下方的详细信息可以添加服务的入参(CreateMODTO),点击属性修改名称和显示名称,例如:CreateMO,创建MO,还可以关联返回类型(已存在的数据传输对象,ResponseDTO),调整接口事务17
  7. 构造解决方案
    • 回到解决方案,右键选择构造,项目构造后会在指定目录下生成构造后的项目文件。具体路径在消息列表中会打印出来,至此项目新建完毕18

二. 项目开发

  1. 项目拷贝
    • 解决方案构造后的项目不能直接使用,拷贝一份到工作文件夹即可,源文件保留作为根,方便后续重新生成项目
  2. 项目开发
    • 拷贝后的项目点击项目中.sln结尾的文件即可打开项目19
    • 编辑对应接口的Extend文件,书写代码,实现具体功能20
    • 编写时用到现有方法或工具类时,可以导入依赖,根据需要引用不同的包
    • 代码书写完毕后,编译,生成项目,接口文件到指定文件夹。其中项目文件6个,接口文件每个接口1个2324
    • 将项目文件和接口文件拷贝到U9的运行环境中,并给每个接口配一个配置文件,例如:接口文件:UFIDA.Cust.GJ.itemMaster.IFindItemMaster.svc, 配置文件:UFIDA.Cust.GJ.itemMaster.IFindItemMaster.config,配置文件放在\xxx\Portal\RestServices下25
    • 具体接口和项目文件放到哪个目录,接口怎么配置,参考历史项目即可
    • 配置后重启iis服务,新的接口即可生效,浏览器调用接口测试xxxx/U9/RestServices/UFIDA.Cust.GJ.itemMaster.IFindItemMaster.svc,检查接口是否可用。接口调用xxxx/U9/RestServices/UFIDA.Cust.GJ.itemMaster.IFindItemMaster.svc/Do262728
  3. 项目调试
    • vs中可以直接调试,选择菜单栏的调试,附加到进程,筛选进程 w3wp.exe,确认后调试开始,此时可以调试Extend中书写的代码,无法调试源码,所以只能用于简单调试自己的代码2122
    • 使用dnSpy工具进行调试,选择项目中待接口所在的dll文件,调试,附加到进程,即可开始调试,此处调试可以追踪底层源码,排查官方代码可能存在的问题

三. 项目部署

  1. 把对应的项目文件,接口文件,接口配置文件拷贝到对应生产环境的U9运行目录下,注意目录正确即可,拷贝时如果失败,需要关闭ApplicationServer再拷贝,重启iis服务即可

四. 关键方法

  1. 获取上下文
PlatformContext context = PlatformContext.Current;
  1. 查询
IssueDocType issueDocType = IssueDocType.Finder.Find("Code = '" + docTypeCode + "' and Org = '" + org.ID + "'");
  1. 大事务
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();
     }