当前位置: 首页 > news >正文

U9二次开发之补丁制作

补丁制作

u9二开完成之后就要制作补丁发布到服务器啦,我把补丁制作的流程记录一下,供你参考。

1、还原制作补丁所需要的数据库

将补丁库.bak,还原到数据库中。

在这里插入图片描述
在这里插入图片描述

2、配置environment.xml文件

还原数据库之后,然后配置BuildTool目录下的environment.xml文件。

修改数据库连接信息,指向刚才还原的数据库U9Build25_YX_DEV。

只需要改数据库连接信息就行了,其他参数不用改。

<?xml version="1.0" encoding="utf-8" ?> 
<environment>    
    <system>    
	<connectionString>packet size=4096;user id=sa;Connection Timeout=150;Max Pool size=1500;data source=localhost;persist security info=True;initial catalog=U9Build25_YX_DEV;password=123456</connectionString>
    </system>    
    <view>
    	<mapper type="UFSoft.UBF.View.Query.MetadataDomainMapping, UFSoft.UBF.Business.Adapter" />
	<creator type="UFSoft.UBF.View.Query.Adapter.TranslatorCreator, UFSoft.UBF.Business.Adapter" />
    </view>
    <Path>
    	<Metadatalib>d:\</Metadatalib>
    </Path>
    <path>
	<ubfbin>d:\ubf2.0\bin</ubfbin>
	<ubfstudio>d:\ubf20\visual studio</ubfstudio>
	<ubfresources>d:\ubf20\resources</ubfresources>
	<approot>d:\u9app</approot>
    </path>
</environment>

3.配置desktopBuild.xml 文件

同样在BuildTool文件夹下找到desktopBuild.xml 文件。

version:u9的版本号,我这里是6.0
ProductPath:U9 Portal 文件夹所在的目录,也就是u9的安装目录
ProjectPath:补丁生成文件放置的目录
Module:补丁的模块名,可以自定义,一般以Cust开头

其他参数不需要改。

<?xml version="1.0"?>
<configuration version="6.0">
  <!--U9,HR,CD,TR !-->
  <Domain>CD</Domain>
  <PatchBaseVersion>0</PatchBaseVersion>
  <ProductPath>D:\yonyou\U9V60</ProductPath>
  <ProjectPath>D:\yonyou\U9Project\MKGD\补丁</ProjectPath>
  <FilePath>D:\</FilePath>
  <!--重新构造时是否清空文件夹Y,N-->
  <DelOnRebuild>Y</DelOnRebuild>
  <CustomerNo>TO_BE_Cust</CustomerNo>
  <IsCustomer>1</IsCustomer>
  <Module>Cust_CompanyName</Module>
  <SpNumber>0</SpNumber>
  <IsSP>0</IsSP>
</configuration>

4.新建方案

打开 UFIDA.UBF.Build.Engine.DesktopBuild.exe 程序,点击新建方案按钮,新建一个方案。

在这里插入图片描述

然后点击构造按钮:

在这里插入图片描述

构造完成后,会在ProjectPath指定的目录下生成很多文件夹:

在这里插入图片描述

各个文件夹的说明如下:

  • AssemblyInfo:放置Setup.bdxml,此文件是各个模块装配文件的集合
  • Files: 放置所有需要拷贝的文件,包括所有BE/BP/UI/SV的dll,UI/BE插件的配置文件,所有需要拷贝到服务器Portal下的文件
  • Metadata: 模型构造生成的文件,放置与原数据脚本一起生成的bulk文件,BE/BP/UI/SV生成的所有bulk文件(默认是生成在UBF下的,默认路径:D:\yonyou\UBFV50\U9.VOB.Product.Other)
  • PostSQL:所有需要执行的脚本
  • PreScript:是预置脚本的集合,即需要在补丁刚开始部署到服务器上时需要优先执行的脚本
  • ReportMD:放置报表模型和打印模型,所有xml混合放在一起,不要建立子文件夹存放不同模型 (构造生成的建表脚本不需要放入补丁包中,否则会清除掉数据库表原有数据)

5.复制文件

我做的是BE插件,只需要把BE插件项目编译好的dll、pdb文件和sub.xml文件复制到Files文件夹下就行了:

在这里插入图片描述

6.生成安装信息

点击生成安装信息按钮:

在这里插入图片描述

操作成功后会在对应目录下生成packageinfo.xml文件。

在这里插入图片描述

打开xml文件修改一下说明信息。

在这里插入图片描述

不知什么原因,我生成的packageinfo.xml文件中dir是空的(难道是配置问题?),我手动添加了下dir路径:

dll和pdb文件是放在\Portal\ApplicationLib路径下的,

sub.xml文件是放在\Portal\bin路径下的。

<?xml version="1.0" encoding="UTF-8"?>
<package>
  <baseinfo code="CD6.0.Cust_Canaan.1002208310000003" name="CD6.0.Cust_Canaan.1002208310000003" type="" version="6.0" releasedate="" desc="" question="" doc="" basebuild="" referenceBuild="20090918002" IsCustomer="1" CustomerNo="TO_BE_Cust" Domain="CD" SPNum="0" Modules="Cust_Canaan," DependModules="," IsSP="0" />
  <description>说明</description>
  <descriptiondetail>标准采购插件提交审核时写中间表</descriptiondetail>
  <filelist>
    <file dir="\Portal\ApplicationLib;" exeflag="" servertype="0" filename="UFIDA.U9.Cust.Canaan.PurchaseOrderPlugBE.dll" filetype="0" />
    <file dir="\Portal\ApplicationLib;" exeflag="" servertype="0" filename="UFIDA.U9.Cust.Canaan.PurchaseOrderPlugBE.pdb" filetype="0" />
    <file dir="\Portal\bin;" exeflag="" servertype="0" filename="UFIDA.U9.Cust.Canaan.PurchaseOrderPlugBE.sub.xml" filetype="0" />
  </filelist>
</package>

7.生成补丁

点击生成补丁按钮生成补丁。

在这里插入图片描述
在这里插入图片描述

8.安装补丁

打开系统管理工具客户端,点击补丁下载与安装侧边栏,然后点击导入,添加自己的补丁。

在这里插入图片描述

添加完后点提交按钮:

在这里插入图片描述

然后选中你添加的补丁,安装就行了:

在这里插入图片描述
在这里插入图片描述

最后

配置文件只需要配置一次,以后直接使用就可以了,其实打补丁本质上就是把各种dll、xml文件复制到服务器不同的文件夹之下而已,我们完全可以自己手动复制,不需要打补丁。

不过打补丁的好处是,可以记录历史的补丁数据,什么时候更新了什么东西,一目了然。

如果全是手工复制文件到服务器目录的话,时间久了就会搞不清楚以前更新了什么内容,不利于系统维护。

所以,我还是建议通过打补丁的方式更新系统。

相关文章:

  • 数字孪生与元宇宙相比有何区别?
  • java计算机毕业设计计算机散件报价系统源码+数据库+系统+lw文档+mybatis+运行部署
  • Qt Quick/QML入门到精通_专栏demo对应文章目录(目前27个demo/长期更新)
  • Java并发 | 17.[锁机制] 重量级锁(Monitor+自旋锁)
  • 【我拥有的书】
  • MSP432P 汇编,C语言点灯
  • Tomcat部署及优化
  • Kubernetes中Pod容器的使用
  • BERT模型解析
  • Springboot整合dubbozookeeper为注册中心
  • Spark的部署与使用
  • 目标检测——关键点检测学习记录(二):人体骨骼点检测——自顶向下
  • C++----类型转换
  • 机器学习笔记之线性分类——高斯判别分析(二)最优参数求解
  • 爬取头像的程序不好用了?那就再重新做一份咯
  • 时间复杂度分析经典问题——最大子序列和
  • 230. Kth Smallest Element in a BST
  • 4个实用的微服务测试策略
  • angular组件开发
  • Babel配置的不完全指南
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • input的行数自动增减
  • Java,console输出实时的转向GUI textbox
  • JSDuck 与 AngularJS 融合技巧
  • js如何打印object对象
  • mysql innodb 索引使用指南
  • Object.assign方法不能实现深复制
  • overflow: hidden IE7无效
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • python学习笔记 - ThreadLocal
  • SQLServer之创建显式事务
  • text-decoration与color属性
  • VuePress 静态网站生成
  • Vue实战(四)登录/注册页的实现
  • 闭包--闭包作用之保存(一)
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 测试开发系类之接口自动化测试
  • 多线程事务回滚
  • 复杂数据处理
  • 检测对象或数组
  • 聊聊redis的数据结构的应用
  • 每天一个设计模式之命令模式
  • 再谈express与koa的对比
  • 阿里云ACE认证学习知识点梳理
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 容器镜像
  • 通过调用文摘列表API获取文摘
  • #13 yum、编译安装与sed命令的使用
  • #QT(一种朴素的计算器实现方法)
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (13):Silverlight 2 数据与通信之WebRequest
  • (3)llvm ir转换过程
  • (二)WCF的Binding模型
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (九)信息融合方式简介