3

我正在开发 Salesforce 应用程序。该应用程序包含一些自定义对象,其中之一是 Project。我创建了一个 Visualforce 页面来管理这些项目。我们也在开发一个扩展。在扩展中,一个新的自定义字段被添加到 Project 对象中。在原始包中,我想更改visualforce页面以显示该字段的值(如果安装了扩展)。所以我需要检查扩展是否已安装,如果是,则显示该扩展中的一个字段。

有没有办法做到这一点?

4

2 回答 2

2

我最终使用的解决方案是在基类中创建一个接口,它的默认实现并没有做太多的事情。然后我创建了一个自定义设置,其中应该输入另一个实现该接口的类名。同样在基类中,我创建了一个工厂,可用于获取接口的实现。我以本指南为基础。

于 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 回答