[設定] - [インストール済みパッケージ] から確認できる、インストール済みのパッケージとそのバージョンを、プログラム的に取得したい、というメモです。
結論から言うと、インストール済みパッケージの取得はTooling APIで提供されているみたいなので、以下のクエリでOKです。
SELECT Id, SubscriberPackageId, SubscriberPackage.NamespacePrefix, SubscriberPackage.Name, SubscriberPackageVersion.Id, SubscriberPackageVersion.Name, SubscriberPackageVersion.MajorVersion, SubscriberPackageVersion.MinorVersion, SubscriberPackageVersion.PatchVersion, SubscriberPackageVersion.BuildNumber FROM InstalledSubscriberPackage ORDER BY SubscriberPackageId
開発者コンソール上のQuery Editorで行う場合、「Execute」の右にある「Use Tooling API」にチェックを入れておく必要があります。
ところが、これをApexでやろうとした場合、上記のクエリ結果を List<InstalledSubscriberPackage>
に代入してあげればOKかと思いきや、 InstalledSubscriberPackage
がInvalid Typeとしてエラーになってしまいます。
そのため、ちょっと回りくどいですが、ApexからTooling APIのREST API呼び出しを行ってあげればOKです。
String query = 'SELECT Id FROM InstalledSubscriberPackage'; Http http = new Http(); HttpRequest req = new HttpRequest(); req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId()); req.setHeader('Content-Type', 'application/json'); req.setEndpoint(URL.getSalesforceBaseUrl().toExternalForm() + '/services/data/v44.0/tooling/query/?q=' + EncodingUtil.urlEncode(query, 'UTF-8')); req.setMethod('GET'); HttpResponse res = http.send(req); System.debug(res); String result = res.getBody(); System.debug(result);
Tooling API、直接触れる機会はなかなかないですね。特に最近はSalesforce CLIなどでラップされてしまっていますし。