2012-01-10 35 views
1

我想弄清楚如何使用多個篩選器查詢Salesforce,其中任一篩選器都可以爲true(類似於傳統的WHERE x='' OR y='' SQL語句)。如何使用S4S連接器執行'OR'查詢?

下出現的作品,但產生「與」查詢,其中兩個過濾器必須正確:

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?

+1

SOQL將使這更簡單,在Salesforce的用戶界面,你通常可以指定規則一起,或者如果你想要更多的特殊邏輯啓用,您使用規則的數字寫出來的邏輯額外的字段,例子(1 AND(2 OR 3))。在dataSource中可能有某種方式指定,但我不熟悉您使用的API(通常直接使用salesforce)。 – 2012-01-10 00:54:30

+0

謝謝!這非常有幫助。我能夠在API中指定'OR'SOQL查詢並且它工作正常! – 2012-01-10 19:00:51

+0

爲了完整而作爲答案發布。 – 2012-01-10 19:03:30

回答

1

SOQL會使這更容易,所以應該是你選擇的路線,如果你可以選擇,特別是因爲它提供了最簡單的方法來執行你的過濾器的邏輯操作。

2

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(); 

或者,正如馬特所言,您可以建立自己的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); 
+0

很高興知道,謝謝Daniel! – 2012-08-15 20:34:36

+0

@DerekHunziker我很樂意回答有關StackOverflow的S4S問題,但恐怕我遲到了。如有任何S4S支持問題,請隨時聯繫FuseIT。 – 2012-08-15 20:41:36

相關問題