.Net Salesforce 集成 - 从 List<sObject> 获取列值
Posted
技术标签:
【中文标题】.Net Salesforce 集成 - 从 List<sObject> 获取列值【英文标题】:.Net Salesforce integration - getting column values from List<sObject> 【发布时间】:2014-01-26 01:06:23 【问题描述】:我们在 .Net 与 Salesforce.com 的集成中使用了合作伙伴 API。我正在使用以下代码将 Account 记录添加到字典中,并使用 ExternalId__c 作为每条记录的键。
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();
从这种类型的集合中提取特定列值的正确语法是什么?
【问题讨论】:
您需要使用合作伙伴 API 的任何特殊原因?如果它不必与几个不同的 Salesforce 组织一起工作,那么使用企业版可能会简单得多。解析(使用)WSDL 将为您提供具有具体字段的 Account 或 Contact 等类,使用起来更简单。 我们正在使用合作伙伴,因为正在处理的数据量很大。 【参考方案1】:我在您的代码中看到了一些模棱两可的东西 -
您正在查询所有 Account 对象并只处理第一个。如果您是 只对某些对象感兴趣,为什么不在查询中提供谓词(WHERE 子句)?
您的字典值为List<sObject>
。如果'ExternalId__c'
是一个唯一的自定义字段,您将始终为每个“ExternalId__c”值提供一个帐户对象。也许字典应该是字符串-> sObject。然后,您可以访问字典值并对其调用 sObject 方法。 dict[externalId].getId() 等
【讨论】:
以上是关于.Net Salesforce 集成 - 从 List<sObject> 获取列值的主要内容,如果未能解决你的问题,请参考以下文章
在 asp.net 中使用 describeSObject 检索自定义字段
SalesForce 集成 - 在 SF 对象定义更改时通知外部系统