分发升级
学习目标
完成本单元后,您将能够:
- 列出您可以向客户提供升级的不同方式。
- 描述您可以用来让客户更轻松地升级的工具。
最新版本,拜托了!
在上一单元中,您了解了软件包版本号,它标识受管软件包的唯一版本。
正如我们提到的,维护产品的不同版本并不是理想的做法。尽量让您的所有客户都使用产品的同一个版本(即最新版本)。这会为每个人提供相同的体验、最新的错误修复和所有最酷的功能。
让我们看看这是如何做到的。
向您的客户推送升级
如果您真的希望您的客户使用产品的最新版本,有一个简单的方法可以确保他们这样做:使用推送升级。在推送升级中,您将产品的最新版本推送给您的客户。他们无需执行任何操作即可完成升级,只需使用新版本即可。
您可以针对主要或次要升级以及新补丁版本使用推送升级。推送升级完成后,客户会在其软件包详细信息页面上看到产品的新版本号。而且,当然,他们还会看到您所有精彩的新功能。
沟通,沟通,沟通
我们希望到目前为止,您已经愿意尝试推送升级了。现在,您可以将这些话告诉您的客户,他们会愿意在获得推送升级之前先对其有所了解!
怎么实现推送升级
以下是推送升级的过程:
- 您选择一个或多个要进行升级的客户组织。
- 您选择要在这些组织中安装的应用版本。
- 您计划在指定日期和时间进行升级。
- 您跟踪升级的进度。检查升级是否成功完成,如果要重新计划,则中止待进行的升级。
这是一个宽泛的过程梗概。您可以具体决定升级的形式:首先更新哪些组织,以及每个组织会发生什么等。
权力越大,责任越大
推送升级为您提供控制权。您可以分发任何内容,从简单的补丁到应用程序的大修。您可以升级单个客户或所有客户。
如果正确执行,推送升级可以做到无缝完成,每个人都能得到新版本并使用。如果执行不当,那……每个使用计算机的人都知道拙劣的升级是什么样的。
运用您的判断。如果您要添加大量功能或组件,请考虑影响:
- 这些组件是否适用于现有安装?
- 您的升级是否会干扰常用的自定义?
- 您的升级是否以破坏性的方式修改了客户数据?
新功能易于管理。在您发布升级之前,没有客户会使用它们。现有功能比较棘手。尽量保持原有的工作方式,以便客户保持高效。
Salesforce 合作伙伴需要特殊权限才能推送升级。要请求访问,请在 Salesforce 合作伙伴社区(需要登录)登记一个支持个案。
自动化细节
升级比全新安装更棘手,因为它们会对现有系统进行更改。谁知道客户组织中发生了什么?
有时您需要进行安装后工作,即在安装后执行的任务。例如,您可以修改客户数据以适应更新的公式或修复不一致。利用 Apex 元数据,您甚至可以在向软件包中添加自定义字段时更新页面布局。
Salesforce 允许您为安装后工作编写一个 Apex 类。该类会在您的升级安装到组织中后执行其工作。
这样的类是什么样的?这里有一个简单的例子:
global class PostInstallClass implements InstallHandler { global void onInstall(InstallContext context) { if(context.previousVersion() == null) { // This means the package is being installed for the first time // Perform required activities for the first time install Account a = new Account(name='NewAccount'); insert(a); } else if(context.previousVersion().compareTo(new Version(1,0)) == 0) { // This means the previous version is 1.0 } if(context.isUpgrade()) { // This means the package is getting upgraded // Perform required activities for package upgrades } if(context.isPush()) { //This means the package is getting pushed // Perform required activities for push upgrades } } }
每个新的 Apex 类都需要一个测试类,所以我们的示例中也有一个:
@isTest static void testInstallScript() { PostInstallClass postinstall = new PostInstallClass(); Test.testInstall(postinstall, null); Test.testInstall(postinstall, new Version(1,0), true); List<Account> a = [Select id, name from Account where name ='NewAccount']; System.assertEquals(a.size(), 1, 'Account not found'); }
使用 Test
类的 testInstall
方法来测试您的 PostInstall
类。该方法中包括什么?由您来决定!
深思熟虑的自动化
自动化在正常工作时很棒。请考虑如何最好地将其与现有功能和新功能结合使用。
要增强现有功能,请使用安装后类自动将功能组件的任何新权限分配给现有用户。这样,每个人都可以不间断地继续使用该软件包。
不要使用安装后 Apex 脚本为新功能自动分配组件权限。相反,要提醒客户管理员注意这些功能,让他们制定详细信息。
计划升级
现在您已经定义了升级,是时候进行计划了。谁获得升级,何时升级?
使用 SOAP API 计划升级
SOAP API 允许您以编程方式计划和控制升级,并跟踪其进度。使用 SOAP API,您可以:
- 通过 SOQL 查询查找使用您的软件包的客户
- 为这些客户计划推送升级
- 监控升级状态,并检查错误
API 为您部署升级提供了足够的灵活性。例如,您可以创建一个 Web 表单,允许客户升级到新版本。单击表单上的按钮可以为这些客户计划推送升级。
我们不在这里介绍如何使用 SOAP API,因为它涉及更多内容。第二代受管软件包开发人员指南概述了如何计划自己的推送升级。
唯一不变的就是变化
当您开发软件时,事情会发生变化。错误得到修复,功能得到添加,算法和结构不断发展。您已经在自己的开发团队中应对过改变。现在您已经了解了如何将这些更改交付给您的客户。
使用这些工具为您的客户提供及时、无缝的更新。作为 Salesforce 客户,他们期待获得软件即服务的所有优势。遵守 SaaS 承诺,您就可以让他们感到满意。