我正在使用SalesForce“Beatbox”库(http://code.google.com/p/salesforce-beatbox/source/browse/trunk/src/beatbox/_beatbox.py)
异常1:当我发送leadId时,我收到异常“INVALID_CROSS_REFERENCE_KEY:需要有效的leadId”
这就是说我没有使用有效的leadId,但我发誓这是一个有效的leadId,因为我事先做了一个检索线索并从SalesForce自己获取了leadId!
例外2: 当我取消注释convertedStatus和doNotCreateOpportunity参数时,我得到异常“soapenv:客户端错误:元素{urn:partner.soap.sforce.com} doNotCreateOpportunity在此位置无效”
这是说我将参数传递给SalesForce API的方式有问题。不过,这对我来说是正确的。
有关如何解决这些问题的任何想法?
def convertLead(self, leadIds, convertedStatus, doNotCreateOpportunity=False):
return ConvertLeadRequest(self.__serverUrl, self.sessionId, leadIds, convertedStatus, doNotCreateOpportunity).post(self.__conn)
class ConvertLeadRequest(AuthenticatedRequest):
"""
Converts a Lead to an Account. See also:
http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_convertlead.htm
"""
def __init__(self, serverUrl, sessionId, leadIds, convertedStatus, doNotCreateOpportunity=False):
AuthenticatedRequest.__init__(self, serverUrl, sessionId, "convertLead")
self.__convertedStatus = convertedStatus
self.__leadIds = leadIds;
self.__doNotCreateOpportunity = doNotCreateOpportunity
def writeBody(self, s):
#s.writeStringElement(_partnerNs, "convertedStatus", self.__convertedStatus)
#s.writeStringElement(_partnerNs, "doNotCreateOpportunity", self.__doNotCreateOpportunity)
s.writeStringElement(_partnerNs, "leadId", self.__leadIds)
编辑:
现在,当我提出以下请求时:
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:p="urn:partner.soap.sforce.com" xmlns:m="http://soap.sforce.com/2006/04/metadata" xmlns:o="urn:sobject.partner.soap.sforce.com" xmlns:w="http://soap.sforce.com/2006/08/apex" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<s:Header>
<p:CallOptions>
<p:client>BeatBox/0.9</p:client>
</p:CallOptions>
<p:SessionHeader>
<p:sessionId>REDACTED</p:sessionId>
</p:SessionHeader>
</s:Header>
<s:Body>
<p:convertLead>
<p:convertedStatus>Cold Qualified</p:convertedStatus>
<p:doNotCreateOpportunity>False</p:doNotCreateOpportunity>
<p:leadId>00QC000000zAbLEMA0</p:leadId>
<p:overwriteLeadSource>False</p:overwriteLeadSource>
<p:sendNotificationEmail>False</p:sendNotificationEmail>
</p:convertLead>
</s:Body>
</s:Envelope>
我仍然得到异常“转换状态无效”
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Client</faultcode>
<faultstring>Element {urn:partner.soap.sforce.com}convertedStatus invalid at this location</faultstring>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
答案 0 :(得分:1)
问题是writeBody没有生成正确的结构。检查WSDL显示convertLead调用期望采用0..n这些结构。 (例外#2是关于此的提示)
<element name="convertLead">
<complexType>
<sequence>
<element name="leadConverts" type="tns:LeadConvert" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<complexType name="LeadConvert">
<sequence>
<element name="accountId" type="tns:ID" nillable="true"/>
<element name="contactId" type="tns:ID" nillable="true"/>
<element name="convertedStatus" type="xsd:string"/>
<element name="doNotCreateOpportunity" type="xsd:boolean"/>
<element name="leadId" type="tns:ID"/>
<element name="opportunityName" type="xsd:string" nillable="true"/>
<element name="overwriteLeadSource" type="xsd:boolean"/>
<element name="ownerId" type="tns:ID" nillable="true"/>
<element name="sendNotificationEmail" type="xsd:boolean"/>
</sequence>
</complexType>
所以你的writeBody需要像
def writeBody(self, s):
s.startElement(_partnerNs, "leadConverts")
s.writeElementString(_partnerNs, "convertedStatus", self.__convertedStatus)
s.writeElementString(_partnerNs, "doNotCreateOpportunity", self.__doNotCreateOpportunity)
s.writeElementString(_partnerNs, "leadId", self.__leadId)
...
s.endElement()
如果您想进行批量潜在客户转换,那么您需要为每个要进行的潜在客户转换生成此结构的多个实例。