salesforce - 如何使用 S4S 连接器执行 'OR' 查询?

标签 salesforce sitecore

我正在尝试弄清楚如何使用多个过滤器查询 Salesforce,其中任一过滤器都可以为 true(类似于传统的 WHERE x='' OR y='' SQL 语句)。

以下内容似乎可行,但会生成一个“AND”查询,其中两个过滤器都必须为 true:

var dataSource = new GenericSalesforceEntityDataSource("Download__c", GetSalesforceSession);
dataSource.AddDataSourceFilter("Contact__c", new Operator(ComparisonOperator.Equals), profile.ContactId);
dataSource.AddDataSourceFilter("Lead__c", new Operator(ComparisonOperator.Equals), profile.LeadId);
var downloads = dataSource.GetQueryResultsAsEntities();

如果可能的话,我希望避免将 SOQL 查询硬编码到我的 .NET 应用程序中。 S4S API 是否支持这些类型的查询,或者我应该为此使用 SOQL?

最佳答案

Sitecore for Salesforce Connector (S4S)具有复合过滤器,允许您以编程方式创建数据源,该数据源可在 where 子句中使用 OR 运算符转换为 SOQL 查询。

var dataSource = new GenericSalesforceEntityDataSource("Download__c", GetSalesforceSession);
var orFilter = new LogicalDisjunctionFilter();
orFilter.AddDataSourceFilter("Contact__c", ComparisonOperator.Equals, profile.ContactId);
orFilter.AddDataSourceFilter(ApexLog.Fields.Location, ComparisonOperator.Equals, "SystemLog");
// The two filters above will be combined with a logical OR
dataSource.AddDataSourceFilter(orFilter);
var downloads = dataSource.GetQueryResultsAsEntities();

您可以根据需要使用 LogicalDisjunctionFilter 与 LogicalConjunctionFilter 的组合来构建 AND 和 OR 逻辑。

或者,您可以直接将 SOQL where 子句添加到数据源。

var dataSource = new GenericSalesforceEntityDataSource("Download__c", GetSalesforceSession);
dataSource.SoqlFilter = string.Format("Contact__c = '{0}' OR Location = 'SystemLog'", profile.ContactId);
var downloads = dataSource.GetQueryResultsAsEntities();

或者,正如 Matt 建议的那样,您可以构建自己的 SOQL 字符串并直接运行。

var dataSource = new GenericSalesforceEntityDataSource("Download__c", GetSalesforceSession);
var queryResult = dataSource.RunSoqlQuery(new SoqlQuery(string.Format("Select Id from Download__c where Contact__c = '{0}' OR Location = 'SystemLog'", profile.ContactId)));
var downloads = dataSource.EntitysFromQueryResult<GenericSalesforceEntity>(queryResult);

关于salesforce - 如何使用 S4S 连接器执行 'OR' 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8797248/

相关文章:

asp.net - Sitecore 获取渲染的 Html

javascript - 使用 Postman 的 Salesforce 集成 INVALID_SESSION_ID

javascript - 从 Javascript Visualforce 调用扩展方法

salesforce - Cometd/bayeux 客户端 + salesforce 流媒体 API 问题

Sitecore:将内容树子项呈现为 ListView

asp.net - 我应该如何在 Sitecore 中存储/访问本地化 UI 字符串?

salesforce - 按过去 13 个月过滤

authentication - Salesforce OAuth2 Missing_oauth_token

c# - 如何从 glassmapper 映射的对象属性中获取 sitecore 字段?

visual-studio-2013 - 配置 Unicorn 的序列化位置,以便将项目添加到 Visual Studio 解决方案