如何通过force-partner-api-55.2.jar获取Salesforce变更数据捕获选中实体
获取Salesforce变更数据捕获已选中实体的正确方法
你当前用describeGlobal()的方式只能拿到所有支持变更数据捕获的实体(因为AssociateEntityType为ChangeEvent的都是支持该功能的实体),但无法区分是否已在设置中启用。要获取已选中的实体,有两种可靠方式:
方法一:通过SOQL查询ChangeEventSubscription对象
ChangeEventSubscription对象存储了所有已启用变更数据捕获的实体配置,直接查询它就能得到目标列表:
String soql = "SELECT EntityDefinition.QualifiedApiName FROM ChangeEventSubscription"; QueryResult result = getPartnerConnection().query(soql); List<SObjectCache> selectedEntities = new ArrayList<>(); for (SObject sObj : result.getRecords()) { String entityName = (String) sObj.getField("EntityDefinition.QualifiedApiName"); // 此处可将entityName转换为你需要的SObjectCache对象 selectedEntities.add(new SObjectCache(entityName)); }
方法二:通过SOQL查询EntityDefinition对象
EntityDefinition是元数据对象,其中IsChangeDataCaptureEnabled字段标记了实体是否已启用变更数据捕获:
String soql = "SELECT QualifiedApiName FROM EntityDefinition WHERE IsChangeDataCaptureEnabled = true"; QueryResult result = getPartnerConnection().query(soql); List<SObjectCache> selectedEntities = new ArrayList<>(); for (SObject sObj : result.getRecords()) { String entityName = (String) sObj.getField("QualifiedApiName"); selectedEntities.add(new SObjectCache(entityName)); }
注意事项
- 确保你的API用户拥有View All Data权限,或者至少有访问
ChangeEventSubscription/EntityDefinition对象的权限,否则查询会返回空结果或权限错误。 - 两种方法返回的核心结果一致,可按需选择:若需要变更数据捕获的额外配置细节(如订阅渠道),优先使用
ChangeEventSubscription查询。
内容的提问来源于stack exchange,提问作者NoName
相关产品推荐
相关产品推荐

