この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

PackageSubscriber

組織でのパッケージのインストールを表します。このオブジェクトには、ログインしている組織で開発された管理パッケージまたはロック解除済みパッケージのインストール情報が含まれます。

インストールごとに 1 つのレコードが作成されます。たとえば、5 個の組織で 2 個のパッケージがインストールされた場合、10 個のレコードが作成されます。

サポートされているコール

describeSObjects()query()retrieve()

特別なアクセスルール

第一世代管理パッケージの転送アップグレードを開始するには、「AppExchange パッケージのアップロード」ユーザー権限が必要です。

ロック解除済み管理パッケージまたは第二世代管理パッケージの転送アップグレードを開始するには、「第二世代パッケージの作成および更新」権限が必要です。

転送アップグレード機能は、AppExchange セキュリティレビューに合格した第一世代および第二世代管理パッケージでのみ使用できます。管理パッケージの転送アップグレードを有効にするには、Salesforce パートナーコミュニティでサポートケースを登録します。

ロック解除済みパッケージでは、転送アップグレードはデフォルトで有効になっています。

項目

項目名 詳細
InstalledStatus
picklist
プロパティ
Filter、Group、Nillable、Restricted picklist、Sort
説明
パッケージが組織にインストールされている場合、値は i になります。
InstanceName
string
プロパティ
Filter、Group、Nillable、Sort
説明

サブスクライバー組織がホストされるインスタンス。

MetadataPackageId
reference
プロパティ
Filter、Group、Nillable、Sort
説明
パッケージ ID。パッケージ ID のプレフィックスは 033 です。この項目は、API バージョン 49.0 以降で使用できます。
MetadataPackageVersionId
reference
プロパティ
Filter、Group、Nillable、Sort
説明
04t で始まる 18 文字のパッケージバージョン ID。
OrgKey
string
プロパティ
Filter、Group、Nillable、Sort
説明

Salesforce 組織を表す 18 文字の ID。

OrgName
string
プロパティ
Filter、Group、Nillable、Sort
説明

パッケージがインストールされている組織の名前。

OrgStatus
picklist
プロパティ
Filter、Group、Nillable、Restricted picklist、Sort
説明
有効な値は、次のとおりです。
  • Active
  • Demo
  • Free
  • Inactive
  • Trial
OrgStatusInactive の組織は転送アップグレードを受信できません。
OrgType
picklist
プロパティ
Filter、Group、Nillable、Restricted picklist、Sort
説明
有効な値は、次のとおりです。
  • Production
  • Sandbox
ParentOrg
string
プロパティ
Filter、Group、Nillable、Sort
説明
Sandbox が作成された本番組織。

使用方法

次に、実行できる API クエリの種別の例を示します。
クエリ 文字列
特定のパッケージ ID のすべてのパッケージサブスクライバー組織を取得 SELECT Id, OrgKey, OrgStatus, OrgName, OrgType FROM PackageSubscriber WHERE MetadataPackageVersionId = '04t...'
ログインしている組織で作成されたパッケージがインストールされているすべてのパッケージサブスクライバー組織を取得 SELECT Id, OrgKey, OrgStatus, OrgName, OrgType FROM PackageSubscriber WHERE InstalledStatus = 'i'

インスタンスでの PackageSubscriber オブジェクトの絞り込み

パッケージに多くのサブスクライバーがいる場合、PackageSubscriber オブジェクトのクエリには時間がかかります。クエリパフォーマンスを向上するために、PackageSubscriber クエリに InstanceName などの検索条件を追加します。InstanceName は、サブスクライバー組織がホストされているインスタンスを表す項目です。

  1. 組織のパッケージおよびパッケージの最新リリースバージョンを取得します。
    1/**
    2* Get the MetadataPackage object corresponding to this org's managed package
    3*/
    4public MetadataPackage getMetadataPackage() throws ConnectionException {
    5	// retrieve the managed package, which won’t have an empty namespace
    6	QueryResult result = conn.query("select id from  MetadataPackage where namespaceprefix <> ''");
    7		
    8	return (MetadataPackage) result.getRecords()[0];
    9}
    10
    11/**
    12* Get the latest MetadataPackageVersion object of the given MetadataPackage
    13*/
    14public MetadataPackageVersion getLatestMetadataPackageVersion(MetadataPackage metadataPackage) 
    15throws ConnectionException {
    16	// get the latest released version of the given package
    17	String query = "Select id, ReleaseState, MajorVersion, MinorVersion, PatchVersion, 
    18MetadataPackageId"
    19		+ " From MetadataPackageVersion"
    20		+ " Where MetadataPackageId = '%s' and ReleaseState = 'Released'"
    21		+ " Order by majorversion desc, minorversion desc, patchversion desc";
    22		
    23	QueryResult result = conn.query(String.format(query, metadataPackage.getId()));
    24		
    25	return (MetadataPackageVersion) result.getRecords()[0];
    26}
  2. 対象となるサブスクライバーを取得します。次のクエリ文字列およびメソッドは、インスタンスによって絞り込まれた PackageSubscribers を照会できるように変更されています。
    1static final String PACKAGE_SUBSCRIBER_ORG_KEY_QUERY = "Select OrgKey from PackageSubscribers where OrgStatus = 'Active'"
    2	+ " and InstalledStatus = 'I'"
    3	+ " and InstanceName = '%s'"; // placeholder for instance values
    4
    5static final String METADATA_PACKAGE_VERSION_QUERY = "Select Id, Name, ReleaseState, (%s) from MetadataPackageVersion"
    6	+ " where MetadataPackageId = '%s' AND ReleaseState = 'Released'"
    7	+ " AND (MajorVersion < %s OR (MajorVersion = %s and MinorVersion < %s)"
    8	+ " OR (MajorVersion = %s and MinorVersion = %s and PatchVersion < %s))";
    9
    10/**
    11* Get all PackageSubscribers on the given instance that are eligible to upgrade to the given 
    12* MetadataPackageVersion
    13*/
    14public PackageSubscriber[] getEligibleSubscriberIds(MetadataPackageVersion version, String instanceName) throws ConnectionException {
    15	String allPackageId = version.getMetadataPackageId();
    16	Integer major = version.getMajorVersion();
    17	Integer minor = version.getMinorVersion();
    18	Integer patch = version.getPatchVersion();
    19
    20	return getEligibleSubscriberIds(major, minor, patch, allPackageId, instanceName);
    21}
    1public PackageSubscriber[] getEligibleSubscriberIds(Integer major, Integer minor, Integer patch, String packageId, String instanceName) throws ConnectionException {
    2	String subscriberQuery = String.format(PACKAGE_SUBSCRIBER_ORG_KEY_QUERY, instanceName);
    3QueryResult results = conn.query(String.format(METADATA_PACKAGE_VERSION_QUERY, 
    4subscriberQuery, packageId, major, major, minor, major, minor, patch));
    5
    6	return Arrays.stream(results.getRecords()).map(MetadataPackageVersion.class::cast)
    7		.filter(mpv -> mpv.getPackageSubscribers() != null)
    8		.flatMap(mpv -> Arrays.stream(mpv.getPackageSubscribers().getRecords()))
    9		.map(PackageSubscriber.class::cast)
    10		.toArray(PackageSubscriber[]::new);
    11}
  3. すべてをまとめます。次のコードサンプルは、前のメソッドを使用してワークフローを変更し、インスタンスによってパッケージ転送を実行する方法を示しています。
    1String[] instances = { "NA4" }; // Here we list the instances we would like to push to
    2MetadataPackage metadataPackage = api.getMetadataPackage();
    3MetadataPackageVersion version = api.getLatestMetadataPackageVersion(metadataPackage);
    4
    5// do pushes by instance to avoid API timeouts retrieving PackageSubscribers
    6for (String instanceName : instances) {
    7PackageSubscriber[] eligibleSubscribers = api.getEligibleSubscriberIds(version, 
    8instanceName);
    9	
    10// ... proceed with creating PushRequests and PushJobs as before