アップグレードの配布
この単元を完了すると、次のことができるようになります。
- お客様を混乱させずに更新を提供するうえで Salesforce がどう役立つかを説明する。
- お客様にアップグレードを提供するためのさまざまな方法を挙げる。
- お客様でのアップグレードを容易にするために使用できるツールについて説明する。
前の単元では、管理パッケージの一意のバージョンを識別するパッケージバージョン番号について学習しました。
同じパッケージでもバージョンが異なれば、中身も異なります。アプリケーションのメジャーバージョン番号が変わると、その動作が大幅に変わる可能性があります。マイナーバージョン変更でさえ、内部的にいくつもの変更が行われることがあります。パッケージバージョン番号があると、パートナーは変更の影響を考えざるを得ず、結果的にお客様は変更による混乱から保護されます。
すでに述べたように、製品の複数バージョンをメンテナンスすることは理想的とは言えません。すべてのお客様が常に単一のバージョン、つまり最新バージョンの製品を使用するように努めます。そうすることで、あらゆるユーザが同じ環境、最新のバグ修正、すべての優れた機能を使用できます。
では、その方法を確認しましょう。
お客様に製品の最新バージョンを使用してもらう必要がある場合、簡単で確実な方法があります。転送アップグレードを使用してください。転送アップグレードでは、製品の最新バージョンをお客様に転送します。アップグレードを完了するためにお客様がしなければならない作業はありません。最新バージョンがインストールされたら使用するだけです。
転送アップグレードは、両方のアップグレード (メジャーおよびマイナー) とパッチに使用できます。転送アップグレードが完了すると、製品の [パッケージの詳細] ページでお客様に新しいバージョン番号が表示されます。もちろん素晴らしい新機能もすべて表示されます。
コミュニケーションがすべて
転送アップグレードの利点をご理解いただけましたか? 次は、みなさんからお客様に転送アップグレードについて伝えてください。お客様は、予定されている転送アップグレードについて事前に知りたいはずです。
アップグレードでは、ほとんどのアクティビティと同様に、コミュニケーションが不可欠です。期待の管理と影響の最小化に関する一連の有益なガイドラインは、『ISVforce ガイド』を参照してください。
転送方法
転送アップグレードは次のようなしくみで機能します。
- アップグレードするお客様組織を 1 つ以上選択します。
- それらの組織にインストールする製品のバージョンを選択します。
- アップグレードを特定の日時にスケジュールします。
- アップグレードの進行状況を追跡します。正常に完了したかどうかを確認し、再スケジュールする場合は保留中のアップグレードを中止します。
これは概要です。詳細なアップグレードのしくみ、つまり、どの組織が最初に更新され、各組織で何を行うかはパートナーが決定します。
大きな権限には大きな責任が伴う
転送アップグレードは、パートナーが制御します。簡単なパッチから製品の全面的な改修まで何でも配布できます。単一のお客様でもすべてのお客様でもアップグレードできます。
適切に行われれば、シームレスな転送アップグレードも可能です。全ユーザが新しいバージョンを取得して使用できます。不適切に行われた場合は...コンピュータを知っている方なら、失敗したアップグレードがどうなるかはご存じでしょう。
判断力を働かせてください。多くの機能やコンポーネントを追加する場合は、影響を考慮します。
- コンポーネントは既存のインストール環境で機能するか?
- アップグレードが一般的なカスタマイズを妨げないか?
- アップグレードでお客様のデータを変更して混乱は発生しないか?
新機能は、アップグレードを出荷するまでどのお客様も使用していないので管理が容易です。既存の機能には注意が必要です。お客様の生産性が保たれるように、稼働環境の維持に努めます。
AppExchange パートナーが転送アップグレードを行うには特別な権限が必要です。Salesforce パートナーコミュニティでケースを登録して、メジャーアップグレードとパッチの転送権限を要求してください。
大きな権限は絶対的権限ではない
転送アップグレードには次の制限があります。
- アップグレードされた権限セットにタブ表示設定は引き継がれません。
- インストール後、リモートサイト設定が自動的に有効化されることはありません。
こうした点を念頭に置いてリリースを計画します。この種のアップグレードはお客様と調整する必要があります。
アップグレードでは既存のシステムが変更されるため、新規インストールよりも注意が必要です。しかも、お客様組織がどのような状況かわかりません。
インストール後作業が必要になる場合もあります。たとえば、更新された数式に合わせて、または不整合を修復するためにお客様のデータを編集する場合などです。新しい Apex メタデータ API を使用すると、カスタム項目をパッケージに追加するときにページレイアウトを更新することさえできます。
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 スクリプトを使用して自動割り当てしないでください。代わりに、お客様のシステム管理者にこれらの機能について通知し、細かい作業の実行を依頼します。
アップグレードが定義できたので、次はスケジュールします。いつ誰がアップグレードを取得しますか? 対話型でアップグレードをリリースすることも、Enterprise API を使用してお客様を自動的にアップグレードすることもできます。
対話型で転送アップグレードをスケジュールする手順は、次のとおりです。
- パッケージ組織にログインします。
- [設定] から、[クイック検索] ボックスに「パッケージ」と入力し、[パッケージ] を選択します。
- 転送する管理パッケージの名前を選択します。
- [パッケージの詳細] ページで、[バージョン] を選択し、[転送アップグレード] をクリックします。
-
[転送アップグレードのスケジュール] をクリックします。
- [パッチバージョン] 選択リストから、パッケージバージョンを選択します。
- 開始日をスケジュールする場合は、[スケジュール済み開始日] 項目に日付を入力します。
- [対象組織の選択] セクションで、アップグレードする組織を選択します。すでにアップグレードされた組織はこのリストに表示されません。[スケジュール] をクリックします。
検索条件を使用して、更新する組織のリストを選択します。組織は次の基準で絞り込むことができます。
- 部分的な名前、完全な名前、または組織 ID
- Sandbox 組織か、本番組織か
- インストールされているパッケージのバージョン
Enterprise API を使用したアップグレードのスケジュール
さまざまなルールや検索条件に従って一度に多くのお客様をアップグレードする場合、対話型のスケジュールでは対応が困難です。Enterprise API を使用すると、プログラムでアップグレードをスケジュールして制御し、さらに進行状況を追跡できます。Enterprise API では、次のことができます。
- SOQL クエリでパッケージを使用しているお客様を見つける
- これらのお客様への転送アップグレードをスケジュールする
- アップグレードの状況を監視し、エラーがないか確認する
API は、アップグレードのリリースに高い柔軟性をもたらします。たとえば、Web フォームを作成して、お客様が新バージョンにアップグレードできるようにすることができます。フォームのボタンがクリックされたら、これらのお客様への転送アップグレードをスケジュールできます。
Enterprise API の使用方法はやや複雑であるため、ここでは説明しません。『ISVforce ガイド』には、各自の転送アップグレードをスケジュールするために使用できる詳細な手順とコード例が含まれています。
変更の追跡
お客様に更新を送信したら、誰がすでにパッケージの最新バージョンを受信したかを追跡できます。転送アップグレードを受信したお客様を検索する手順は、次のとおりです。
- 開発組織から、[設定] をクリックします。
- [クイック検索] ボックスに「パッケージ」と入力し、[パッケージ] を選択します。
- パッケージの名前をクリックし、[転送アップグレード] をクリックします。
- 対象組織の名前をクリックして、[転送アップグレードの詳細] ページを表示します。
- [転送アップグレードの詳細] ページには、転送アップグレードに関する情報 (状況 (4)、スケジュール済み開始日 (5)、完了までの所要時間、対象組織 (6)など) が表示されます。
- [組織] セクションに移動すると、アップグレードする全組織のリストが表示されます。
- 検索ボックス (7) を使用して、これらの組織を、アップグレード状況の検索対象となるお客様のリストへと絞り込みます。検索ボックスに式を入力します。組織名の部分、全部、または完全な組織 ID を検索します。選択リストを使用して転送アップグレードの状況で検索することもできます。
顧客はアプリケーションが積極的に更新されていることを簡単に確認できます。各リストには、最新リリース日が含まれます。
管理パッケージを更新した後に、AppExchange リストが最新バージョンと一致することを確認します。
- パートナーコミュニティにログインして [公開] タブに移動し、[パッケージ] サブタブを選択します。
- 最新パッケージバージョンの横にある [レビューを開始] をクリックします。管理パッケージの前のバージョンがセキュリティレビューに合格している場合、最新バージョンは自動的に合格になります。
- 新しいバージョンが合格した後、リストに関連付けます。
a. [公開] タブにアクセスし、[リスト] サブタブを選択します。
b. リストを開き、[アプリケーション] サブタブを選択し、[パッケージを選択] をクリックします。
ソフトウェアを開発するときにはいろいろと変更があります。バグが修正され、機能が追加され、アルゴリズムと構造が進化します。みなさんはすでに自分の開発チームで変更に対処しています。今回は、こうした変更をお客様に提供する方法を確認できました。
Salesforce は次のようにパートナーを支援しています。
- パッチとアップグレードという 2 つの提供メカニズムを用意することで、変更を構造化できるようにする
- 合理的なバージョン番号管理体系により、お客様の変更への期待を管理できるようにする
- 転送アップグレードでお客様を最新の状態に維持することで、メンテナンスを簡素化できるようにする
こうしたツールを使用してお客様にタイムリーでシームレスな更新を提供できます。Salesforce のお客様は、SaaS の利点すべてを期待しています。SaaS の約束を守ってください。そうすることでお客様の満足を維持できます。