2017-09-04 24 views
0

Salesforceとの通信にdjango-salesforceを使用して、一部のSalesforceオブジェクトのUIとして機能するDjango 1.11アプリを開発しています。django-salesforceを使用してSalesforce添付ファイルコンテンツを取得する方法は?

自分の連絡先に関連するSalesforce添付ファイルオブジェクトからファイルをダウンロードするオプションをユーザーに与える必要があります。この添付ファイルのモデルに

# Django Attachment model on my_app/models.py 

... 

class Attachment(models.Model): 
    parent = models.ForeignKey(Contact, models.DO_NOTHING, 
           sf_read_only=models.NOT_UPDATEABLE) 
    name = models.CharField(max_length=255, verbose_name='File Name') 
    content_type = models.CharField(max_length=120, blank=True, null=True) 
    body_length = models.IntegerField(sf_read_only=models.READ_ONLY) 
    body = models.TextField() 

... 

私は、実際のコンテンツbodyフィールド上のファイルコンテンツのための残りのURLにアクセスすることはできませんが。

添付ファイルからファイルコンテンツを取得する方法はありますか?このためにOAuthクライアントを実装する必要はありませんか? REST API要求によって

+0

アタッチメントモデル、クエリ、予期しない結果が表示された場合は、「私が見ているものから」と一般に理解できるように編集してください。情報は、例の目的のために単純化することができるが、存在する必要がある。あなたがやっていること/しようとすることによって、「基本的に私は必要です」という最初の言葉を置き換える方がいいです。 SOサイトまたは[help](https://stackoverflow.com/help/how-to-ask)で成功したいくつかの質問に触発されることができます。これはおそらく、質問が投票され、閉会になった理由です。 – hynekcer

+0

@hynecerご意見ありがとうございます、私は今より良いと思います –

答えて

1

A)はあなたが

from salesforce.utils import get_soap_client 
import base64 

soap = get_soap_client('salesforce') 
for ...: 
    ret = soap.query("SELECT Body FROM Attachment WHERE Id = '...'") 
    blob = base64.b64decode(ret)[0]['Body']) 

便利関連の回答でSOAPクライアント(必要とビートボックス)を取得することができます)handle_api_exceptions

from salesforce.backend.driver import handle_api_exceptions 
# from salesforce.dbapi.driver import handle_api_exceptions # can be changed soon to this 
from django.db import connections 

session = connections['salesforce'].sf_session 
rows = Attachment.objects.filter(...) 
for row in rows: 
    url = session.auth.instance_url + row.body 
    blob = handle_api_exceptions(url, session.get).text 

Bによってカプセル化されています:

EDIT私はあなたが=いくつかの連絡先、必ずしも支払われたライセンスの何らかの形でSFDC対象ユーザーに関連する連絡先をユーザを意味することを期待しています。セキュリティ上の理由から、あなたのサイトからのみダウンロードしてください。どんなOAuthでもそれを改善することはできません。

+0

はREST APIでうまくいきました。ありがとう!しかし、ちょうど1つのメモ、おそらくあなたは 'django-salesforce'の別のバージョンを参照していますが、それは' salesforce.backend.driver import handle_api_exceptions'からではありませんか? –

+0

はい、今は 'salesforce.backend.driver'です。すぐに' salesforce.dbapi.driver'に変更することができます。編集に関する – hynekcer

+0

、ポータルのユーザーはSalesforceの連絡先として追跡されます –

関連する問題