我正在尝试弄清楚如何使用多个过滤器查询 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/