我的项目是提取所有salesforce表的内容,包括自定义表。为此,我需要知道列(字段)的名称,因为SOQL不支持来自TABLENAME"的#34; SELECT *。
使用简单的salesforce,我知道以下工作:
sf = Salesforce(username='foo@bar.com', password='abcd', security_token='ZCdsdPdE4eI2DZMl5gwCFIGEFU')
field_data = sf.Contact.describe()["fields"]
但我的问题是我需要参与"联系"在上面的实际方法调用中的字符串,以便我可以为我不知道名称的对象调用此方法(即未在标准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
提前感谢任何建议。
答案 0 :(得分:4)
如果您查看source code for simple-salesforce(截至2015-11-12),我们会在init()
的{{1}}中看到我们将会话设置为Salesforce()
和self.session_id
在您的情况下,您正在使用self.sf_instance
,并且因为只需sf.sessionid
上的方法或属性(和{{},简单salesforce就会返回SFType()
对象{1}}上不存在{1}}您实际上是将Salesforce()
对象插入sessionid
Salesforce()
没有做任何形式的验证来确认你是否将字符串作为参数传递,所以你得到的错误来自于简单的salesforce尝试使用SFType()
对象你'作为一个字符串传入。
试试这段代码:
SFType()
答案 1 :(得分:0)
我遇到了同样的问题,并且似乎已通过从instance_url中删除协议(“ https://”)解决了该问题。这很奇怪,但现在似乎对我有用,我可以contact.describe()
类似这样的东西:
contact = SFType(sf_object, session_id, instance_url.replace("https://",''))
contact.describe()