アップグレードの配布
学習の目的
この単元を完了すると、次のことができるようになります。
- お客様にアップグレードを提供するためのさまざまな方法を挙げる。
- お客様でのアップグレードを容易にするために使用できるツールについて説明する。
最新バージョンの使用
前の単元では、管理パッケージの一意のバージョンを識別するパッケージバージョン番号について学習しました。
すでに述べたように、製品の複数バージョンをメンテナンスすることは理想的とは言えません。すべてのお客様が常に単一のバージョン、つまり最新バージョンの製品を使用するように努めます。そうすることで、あらゆるユーザーが同じ環境、最新のバグ修正、すべての優れた機能を使用できます。
では、その方法を確認しましょう。
お客様への転送アップグレード
お客様に製品の最新バージョンを使用してもらう必要がある場合、簡単で確実な方法があります。転送アップグレードを使用してください。転送アップグレードでは、製品の最新バージョンをお客様に転送します。アップグレードを完了するためにお客様がしなければならない作業はありません。最新バージョンがインストールされたら使用するだけです。
転送アップグレードは、メジャー更新またはマイナー更新、および新しいパッチバージョンに使用できます。転送アップグレードが完了すると、製品の [パッケージの詳細] ページでお客様に新しいバージョン番号が表示されます。もちろんすばらしい新機能もすべて表示されます。
コミュニケーションがすべて
転送アップグレードの利点をご理解いただけましたか? 次は、皆さんからお客様に転送アップグレードについて伝えてください。お客様は、予定されている転送アップグレードについて事前に知りたいはずです。
転送方法
転送アップグレードは次のようなしくみで機能します。
- アップグレードするお客様組織を 1 つ以上選択します。
- その組織にインストールするアプリケーションのバージョンを選択します。
- アップグレードを特定の日時にスケジュールします。
- アップグレードの進行状況を追跡します。正常に完了したかどうかを確認し、再スケジュールする場合は保留中のアップグレードを中止します。
これは概要です。詳細なアップグレードのしくみ、つまり、どの組織が最初に更新され、各組織で何を行うかはパートナーが決定します。
大きな権限には大きな責任が伴う
転送アップグレードは、パートナーが制御します。簡単なパッチからアプリケーションの全面的な改修まで何でも配布できます。単一のお客様でもすべてのお客様でもアップグレードできます。
適切に行われれば、シームレスな転送アップグレードも可能です。全ユーザーが新しいバージョンを取得して使用できます。不適切に行われた場合は...コンピューターを知っている方なら、失敗したアップグレードがどうなるかはご存じでしょう。
判断力を働かせてください。多くの機能やコンポーネントを追加する場合は、影響を考慮します。
- コンポーネントは既存のインストール環境で機能するか?
- アップグレードが一般的なカスタマイズを妨げないか?
- アップグレードでお客様のデータを変更して混乱は発生しないか?
新機能は、アップグレードを出荷するまでどのお客様も使用していないので管理が容易です。既存の機能には注意が必要です。お客様の生産性が保たれるように、稼働環境の維持に努めます。
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'); }
PostInstall
クラスをテストするには、Test
クラスの testInstall
メソッドを使用します。メソッドの内部はどうなるのでしょうか? それは皆さんが決めてください。
十分に考慮された自動化
自動化はうまくいけばすばらしいものです。既存および新規の機能での最適な使用方法を考えます。
既存の機能を拡張する場合は、インストール後クラスを使用して、自動的に既存のユーザーに機能コンポーネント用の新しい権限を割り当てます。そうすることで、すべてのユーザーが中断なくパッケージの使用を継続できます。
新機能用のコンポーネント権限は、インストール後 Apex スクリプトを使用して自動割り当てしないでください。代わりに、お客様のシステム管理者にこれらの機能について通知し、細かい作業の実行を依頼します。
アップグレードのスケジュール
アップグレードが定義できたので、次はスケジュールします。いつ誰がアップグレードを取得しますか?
SOAP API を使用してアップグレードをスケジュールする
SOAP API を使用すると、プログラムでアップグレードをスケジュールして制御し、さらに進行状況を追跡できます。SOAP API では、次のことができます。
- SOQL クエリでパッケージを使用しているお客様を見つける
- これらのお客様への転送アップグレードをスケジュールする
- アップグレードの状況を監視し、エラーがないか確認する
API は、アップグレードのリリースに高い柔軟性をもたらします。たとえば、Web フォームを作成して、お客様が新バージョンにアップグレードできるようにすることができます。フォームのボタンがクリックされたら、これらのお客様への転送アップグレードをスケジュールできます。
SOAP API の使用方法はやや複雑であるため、ここでは説明しません。どのように各自の転送アップグレードをスケジュールできるかについては、『Second-Generation Managed Packaging Developer Guide (第二世代管理パッケージ開発者ガイド)』に概説されています。
変更、それは唯一不変なもの
ソフトウェアを開発するときにはいろいろと変更があります。バグが修正され、機能が追加され、アルゴリズムと構造が進化します。皆さんはすでに自分の開発チームで変更に対処しています。今回は、こうした変更をお客様に提供する方法を確認できました。
こうしたツールを使用してお客様にタイムリーでシームレスな更新を提供できます。Salesforce のお客様は、SaaS の利点すべてを期待しています。SaaS の約束を守ってください。そうすることでお客様の満足を維持できます。