PackagePushJob
組織で、あるバージョンから別のバージョンへパッケージをアップグレードするための個々の転送ジョブを表します。1 つの転送要求に対して複数の転送ジョブを作成できます。たとえば、5 つの組織を 1 つの転送でアップグレードする場合、1 つの PackagePushRequest レコードと 5 つの PackagePushJob レコードが作成されます。
サポートされているコール
create()、describeSObjects()、query()、retrieve()、update()、upsert()
特別なアクセスルール
第一世代管理パッケージの転送アップグレードを開始するには、「AppExchange パッケージのアップロード」ユーザー権限が必要です。
ロック解除済み管理パッケージまたは第二世代管理パッケージの転送アップグレードを開始するには、「第二世代パッケージの作成および更新」権限が必要です。
転送アップグレード機能は、AppExchange セキュリティレビューに合格した第一世代および第二世代管理パッケージでのみ使用できます。管理パッケージの転送アップグレードを有効にするには、Salesforce パートナーコミュニティでサポートケースを登録します。
ロック解除済みパッケージでは、転送アップグレードはデフォルトで有効になっています。
項目
| 項目名 | 詳細 |
|---|---|
| DurationSeconds |
|
| EndTime |
|
| PackagePushRequestId |
|
| StartTime |
|
| Status |
|
| SubscriberOrganizationKey |
|
使用方法
パッケージのバージョン 3.4.6 をすべての組織に転送するとします。すでに MetadataPackageVersion を使用してアップグレードの対象となる組織を特定し、PackagePushRequest を使用して転送要求を作成しました。ここでは、対象となる各組織への転送ジョブを作成するコードを記述しましょう。
このコードサンプルは Web Services Connector (WSC) を使用しています。
1PackageSubscriber[] subscribers = new PackageSubscriber[];
2
3// ... populate eligible and desired subscribers
4
5// Create the PackagePushJob array
6PackagePushJob[] jobs = new PackagePushJob[subscribers.length];
7
8for (int i = 0; i < subscribers.length; i++) {
9 // create a job for each subscriber...
10 PackagePushJob job = new PackagePushJob();
11 // ... associate it to the PackagePushRequest ppr...
12 job.setPackagePushRequestId(ppr.getId());
13 // ... and add the orgKey
14 job.setSubscriberOrganizationKey(subscribers[i].getOrgKey());
15 jobs[i] = job;
16}
17
18// Save the jobs
19SaveResult[] saveResults = conn.create(jobs);
20
21// Add the newly generated id's to the PackagePushJob objects
22for (int i = 0; i < saveResults.length; i++) {
23 if (saveResults[i].isSuccess()) {
24 jobs[i].setId(saveResults[i].getId());
25 }
26}または、REST API を使用している場合は、次の例のように PackagePushJob sObject エンドポイントに POST 要求を送信します。SOAP API もサポートされています。この例は、ジョブの状況を照会するために必要な転送ジョブ ID (0DX で始まる) を返します。
1POST
2/services/data/v38.0/sobjects/packagepushjob/
3{
4 "PackagePushRequestId" : "0DV...",
5 "SubscriberOrganizationKey" : "00DR00..."
6}転送ジョブの状況の確認
ジョブの状況を確認するには、Status 項目を照会します。次に例を示します。
1SELECT Id, Status FROM PackagePushJob WHERE PackagePushRequestId ='0DV...'次に Java での例を示します。
1// Finds the status of the PackagePushJob with the given id
2String PACKAGE_PUSH_JOB_STATUS_QUERY = "Select status from PackagePushJob where Id = '%s'";
3
4// job is a PackagePushJob instance
5QueryResult queryResult = conn.query(String.format(PACKAGE_PUSH_JOB_STATUS_QUERY,
6job.getId()));
7
8// extract the status from the QueryResult
9String status = ((PackagePushJob) queryResult.getRecords()[0]).getStatus();
10
11// optionally, update the PackagePushJob instance with the latest status
12job.setStatus(status);ジョブが完了するまで継続的にジョブの状況をポーリングすることもできます。次の Java の例では、10 秒ごとに状況をポーリングします。
1// The set of states that indicate a PackagePushJob has completed
2final Set<String> TERMINAL_STATES = new HashSet<>();
3TERMINAL_STATES.add("Succeeded");
4TERMINAL_STATES.add("Failed");
5TERMINAL_STATES.add("Canceled");
6
7String status = queryJobStatus(job); // this method returns the status as retrieved in the previous code sample
8
9// If the status is not one of the completed statuses...
10while(!TERMINAL_STATES.contains(status)) {
11 Thread.sleep(10 * 1000); // ... wait 10 seconds and try again
12 status = queryJobStatus(job);
13}