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

PackageSubscriber

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

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

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

describeSObjects()query()retrieve()

項目

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

登録者組織がホストされるインスタンス。

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