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

PackageSubscriber

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

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

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

describeSObjects()query()retrieve()

項目

項目名 詳細
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