ERP SYSTEM 开发指南(三)支持程序自动升级

RemObjects 是超强大的系列控件,这里使用 Hydra 的自动更新控件,可方便有效地使程序实现自动升级

装好 RemObjects Data Abstract (已经包括 RemObjects SDK 和 Data Abstract) , Hydra

这里演示了整个开发过程,服务端及客户端可直接使用,

其中客户端检测是否有新版本的代码可加入ERP SYSTEM或现有系统,当有新版本时调用客户端进行升级

-

先说下默认情况下Hydra的升级过程

客户端进行版本检测时,默认都返回有可用升级,

需要升级哪些文件是通过判断客户端与服务端升级目录之间的差异作为升级依据

-服务端

新建一个基于RO的工程

ERP SYSTEM 开发指南(三)支持程序自动升级_第1张图片

设置好保存路径及工程名,这里的 Also create a matching client application and a project group

是在创建服务端工程时同时也创建客户端并作为一个工程组,这里将演示在ERP SYSTEM框架下的实现,所以就不自动创建客户端了

ERP SYSTEM 开发指南(三)支持程序自动升级_第2张图片

新建好服务端工程,点击Delphi菜单RemObjects SDK-> Edit Service Library

创建一个自动升级服务,先是引用Hydra的自动升级,然后新建一个服务继承,添加我们所以的方式进行升级

ERP SYSTEM 开发指南(三)支持程序自动升级_第3张图片

ERP SYSTEM 开发指南(三)支持程序自动升级_第4张图片

ERP SYSTEM 开发指南(三)支持程序自动升级_第5张图片

然后Build一下工程,会自动生成相关的接口及实现文件

ERP SYSTEM 开发指南(三)支持程序自动升级_第6张图片

打开 AutoUpdateServer_Impl模块,设置FileSearchInfo属性,将用于存放升级文件的路径

ERP SYSTEM 开发指南(三)支持程序自动升级_第7张图片ERP SYSTEM 开发指南(三)支持程序自动升级_第8张图片

$APPLICATION 是当前程序目录,所以在服务端程序所在目录下,要新建子目录 AutoUpdate\ApplicationDir

至此,服务端可以算是完成了,但其默认行为并不是我们所想要的

1.加入版本判断,在AutoUpdateServer_Impl双击OnVerifyUpdateStatus事件,添加如下代码

procedure TAutoUpdateServer.HYAutoUpdateServiceVerifyUpdateStatus(
  Sender: THYAutoUpdateService; const LastUpdateID: AnsiString;
  var UpdateStatus: THYUpdateStatus; var CurrentUpdateID, UserData: AnsiString);
begin
  UpdateStatus:=usNoUpdates;
//客户端进行版本判断时会调用到这里,LastUpdateID是客户端提供的版本号,FCurrentVersion是服务端通过某种方式读取到的当前版本,比如INI if FCurrentVersion<>LastUpdateID then begin UpdateStatus:=usNeedsUpdate;
//CurrentUpdateID这个参数是值引用,所以相当返回当前版本给客户端 CurrentUpdateID:=FCurrentVersion; end; end;

2.指定需要更新的文件,在AutoUpdateServer_Impl双击OnGetUpdatesInfo事件,添加如下代码

procedure TAutoUpdateServer.HYAutoUpdateServiceGetUpdatesInfo(
  Sender: THYAutoUpdateService; ClientFileList,
  UpdatesList: THYFileUpdateInfoArray);
var serverfiles: THYFileUpdateInfoArray;
    fFileUpdateHelper : THYFileUpdateHelper;
    i: integer;
begin
  serverfiles := THYFileUpdateInfoArray.Create;
  fFileUpdateHelper := THYFileUpdateHelper.Create;
  try
    // Prepares the list of updates
    for i := 0 to (Self.FileSearchInfo.Count-1) do
      fFileUpdateHelper.ScanForFiles(Self.FileSearchInfo[i], serverfiles);

    UpdatesList:=serverfiles;
  except

  end;
end;

 这里使用其默认方式,先是获取升级目录的全部文件,但是不对比客户端目录文件

-客户端

客户端同样很简单,如下图摆好界面

ERP SYSTEM 开发指南(三)支持程序自动升级_第9张图片

重点说下THYAutoUpdateClient三个函数

VerifyUpdateStatus,进行版本判断

DownloadUpdates,下载升级文件,文件名会加上前缀(按THYAutoUpdateClient的属性TemporaryFileName)

FinalizeUpdate,完成升级,删除旧文件并将DownloadUpdates下载的文件恢复原名

 

自动升级完整代码(服务端+客户端)下载:http://share.weiyun.com/4df5273d84f20edeacbf74da45176f3b

另外,框架将在近期实现二层到三层的可选择切换,采用RO作为三层基础,这里先提供RO下载及最新的框架代码

如果先前有下载过我做好的虚拟机系统的话,只需要安装DA,Hydra和替换最新框架代码

RemObjects Data Abstract  :  http://share.weiyun.com/0d5f246b89c916b32e2d52f21caadaca

Hydra  :  http://share.weiyun.com/385ac4cf60fd24f432306d4f303339c9

ERP SYSTEM SOURCE CODE :   http://share.weiyun.com/1751fd2575e7bc7fbd57e82a3aaabccf

(加入了自动升级和一套尚未转换好的POS源码)

 

 

你可能感兴趣的:(System)