3

私はSalesforceアプリケーションに取り組んでいます。アプリケーションにはいくつかのカスタムオブジェクトが含まれており、そのうちの1つがProjectです。これらのプロジェクトを管理するためのVisualforceページを作成しました。拡張機能も開発中です。拡張機能では、新しいカスタムフィールドがProjectオブジェクトに追加されます。元のパッケージでは、visualforceページを変更して、そのフィールドの値(拡張機能がインストールされている場合)かどうかを表示したいと思います。したがって、拡張機能がインストールされているかどうかを確認する必要があります。インストールされている場合は、その拡張機能のフィールドを表示します。

それを行う方法はありますか?

4

2 に答える 2

2

私が最終的に使用した解決策は、ほとんど機能しないデフォルトの実装を使用して基本クラスにインターフェイスを作成することでした。次に、そのインターフェイスを実装する別のクラス名を入力するカスタム設定を作成しました。また、基本クラスでは、インターフェイスの実装を取得するために使用できる Factory を作成しました。このガイドをベースとして使用しました。

于 2012-12-19T08:25:54.753 に答える
1

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')チェックする価値はありますか?

于 2012-12-17T15:53:12.540 に答える