1

我的项目是提取我所有的销售人员表格的内容,包括自定义表格。为此,我需要知道列(字段)的名称,因为 SOQL 不支持“SELECT * from TABLENAME”。

使用 simple-salesforce,我知道以下工作:

sf = Salesforce(username='foo@bar.com', password='abcd', security_token='ZCdsdPdE4eI2DZMl5gwCFIGEFU')

    field_data = sf.Contact.describe()["fields"]

但我的问题是我需要在上面的实际方法调用中参数化“Contact”字符串,以便我可以为我不知道名称的对象调用此方法(即未在标准salesforce中定义)。例如我需要做:

    field_data = sf.CustomTableName.describe()["fields"]

当我尝试使用 SFType 类时:

contact = SFType('Contact',sf.sessionid,sf.sf_instance)
f = contact.describe()

我收到此错误:

Traceback (most recent call last):
  File "./simple-example.py", line 13, in <module>
    f = contact.describe()["fields"]
  File "/Library/Python/2.7/site-packages/simple_salesforce/api.py", line 430, in describe
    result = self._call_salesforce('GET', self.base_url + 'describe')
  File "/Library/Python/2.7/site-packages/simple_salesforce/api.py", line 570, in _call_salesforce
    'Authorization': 'Bearer ' + self.session_id,
TypeError: cannot concatenate 'str' and 'SFType' objects

提前感谢您的任何建议。

4

2 回答 2

4

如果您查看simple-salesforce 的源代码(截至 2015 年 11 月 12 日),您会看到在init()我们Salesforce()将会话设置为self.session_id和实例设置为self.sf_instance

在您的情况下,您正在使用sf.sessionid,并且因为 simple-salesforce 设置为SFType()在方法或属性不存在Salesforce()(并且sessionid不存在于Salesforce())时返回对象,您实际上是将SFType()对象插入到您的 init 中SFType()

SFType.__init__()不进行任何形式的验证来确认您将字符串作为参数传递,因此您得到的错误来自 simple-salesforce 尝试使用SFType()您作为字符串传递的对象。

试试这个代码:

contact = SFType('Contact', sf.session_id, sf.sf_instance)
f = contact.describe()
于 2015-11-13T03:06:14.047 回答
0

我遇到了同样的问题,似乎已经通过从 instance_url 中删除协议(“https://”)解决了这个问题。这很奇怪,但现在似乎对我有用,我可以做到contact.describe()

像这样的东西:

contact = SFType(sf_object, session_id, instance_url.replace("https://",''))
contact.describe()
于 2018-10-13T01:47:49.340 回答