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」文字列をパラメーター化する必要があることです。これにより、名前がわからない (つまり、標準のセールスフォースで定義されていない) オブジェクトに対してこのメ​​ソッドを呼び出すことができます。たとえば、私はする必要があります:

    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_idself.sf_instance

あなたの場合、あなたはを使用しています.simple-salesforceは、メソッドまたはプロパティが存在しない(および存在しない)場合は常にオブジェクトsf.sessionidを返すように設定されているため、実際にはオブジェクトをあなたのinitに挿入していますSFType()Salesforce()sessionidSalesforce()SFType()SFType()

SFType.__init__()は、文字列を引数として渡していることを確認するための検証を一切行わないため、単純なセールスフォース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 に答える