Salesforce 専用の Stack サイト で同じ質問をした方がよいかもしれません。管理パッケージを構築しているメンバーが多いようです。
オブジェクトとフィールドが存在するかどうかを確認するために、いくつかの動的 Apex ( describe methods など) を試してみます。
たとえば、AppExchange から Chatter Unfollow アプリをインストールしており、そのオブジェクトに依存したい場合:
String objectName = 'chttrunfollow__UnfollowRule__c';
String fieldName = 'chttrunfollow__Active__c';
Map<String, Schema.SObjectType> gd = Schema.getGlobalDescribe();
Schema.SObjectType t = gd.get(objectName);
if(t != null) {
Schema.DescribeSObjectResult sobjectDescribe = t.getDescribe();
System.debug(sobjectDescribe.isAccessible());
Map<String, Schema.SObjectField> fields = sobjectDescribe.fields.getMap();
if(fields != null && fields.get(fieldName) != null && fields.get(fieldName).getDescribe().isAccessible()) {
System.debug('Show it!');
}
} else {
System.debug(LoggingLevel.ERROR, 'Not found');
}
これは非常にコストのかかる操作になる可能性があるため、結果をどこかにキャッシュすることをお勧めします (カスタム設定?)。
呼び出しがありSystem.requestVersion()
ますが、「あなたの」現在のバージョンのみが返されると思います(特定の組織に他に何がインストールされているかを尋ねるために使用することはできません)。ライセンスを使用している場合 -UserInfo.isCurrentUserLicensed('namespace')
チェックする価値はありますか?