2014-01-08 40 views
0

我們在與Salesforce.com的.Net集成中使用合作伙伴API。我正在使用以下代碼將Account記錄添加到字典中,並使用ExternalId__c作爲每條記錄的關鍵字。.Net Salesforce集成 - 從列表中獲取列值<sObject>

public Dictionary<string, List<sObject>> getAccountMap(SalesforceConnection clientConn) 
{ 
    Dictionary<string, List<sObject>> accountByMerchNum = new Dictionary<string, List<sObject>>(); 

    List<sObject> sObjRTypes = clientConn.performQuery("SELECT Id, ExternalId__c FROM Account"); 

    if (sObjRTypes != null && sObjRTypes.Count > 0) 
    { 
     sObject Account = sObjRTypes[0]; 
     foreach (XmlElement elem in Account.Any) 
     { 
      if (elem.LocalName.ToString() == "ExternalId__c") 
      { 
       if (accountByMerchNum.ContainsKey(elem.InnerText)) 
       { 
        accountByMerchNum[elem.InnerText].Add(Account); 
       } 
       else 
       { 
        accountByMerchNum.Add(elem.InnerText, new List<sObject> { Account }); 
       } 
      } 
     } 
    } 
    return accountByMerchNum; 
} 

如何從Dictionary>中提取特定的列值?我猜想它應該是類似於以下內容......但我的猜測迄今爲止是錯誤的。

Dictionary<string, List<sObject>> accountDictionary = new Dictionary<string, List<sObject>>(); 
String tempId = accountDictionary[externalId].getId(); 

從這種類型的集合中提取特定列值的正確語法是什麼?

+0

您需要使用Partner API的任何特殊原因?如果不需要使用多個不同的Salesforce組織,則使用企業版本可能會更簡單。解析(使用)WSDL將爲您提供像Account或Contact類的具體字段,使用起來更簡單。 – eyescream

+0

由於正在處理的數據量很大,我們正在使用合作伙伴。 – user2774325

回答

0

我看到一對夫婦的曖昧的東西在你的代碼 -

  1. 您要查詢所有賬戶對象和處理只有first.If你 感興趣的只是特定的對象,爲什麼不提供一個謂語( WHERE子句)在查詢中?

  2. 您的詞典值是一個List<sObject>。如果'ExternalId__c'是唯一的自定義字段,則每個「ExternalId__c」值都將始終有一個Account對象。也許字典應該是string - > sObject。然後可以訪問字典值並調用它的sObject方法。 dict [externalId] .getId()等。