2017-09-04 87 views
0

我正在開發一個Django 1.11應用程序,作爲Salesforce對象的UI,使用django-salesforce與Salesforce進行通信。如何使用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領域的文件內容,但不是實際的內容。

有沒有從附件獲取文件內容的方法,而不必爲此僅實現OAuth客戶端?

+0

請編輯您的問題,編寫您的附件模型,查詢和意想不到的輸出內容,通常可以理解:「從我看到的內容」。爲了舉例的目的,信息可以被簡化,但應該存在。用你正在做/嘗試的東西來替換「基本上我需要」這個詞,這樣也更好。您可以從SO網站的某些成功問題或[幫助](https://stackoverflow.com/help/how-to-ask)獲得靈感。這一切都可能是爲什麼這個問題被拒絕投票並被標記爲關閉。 – hynekcer

+0

@hynecer感謝您的建議,我希望現在更好 –

回答

1

A)通過REST API請求通過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 

乙封裝)您可以通過

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客戶端(需要節奏口技)是:

編輯我希望你的意思是用戶=一些聯繫,不一定與SFDC目標用戶有某種形式的付費許可證的聯繫。出於安全原因,他們只能通過您的網站下載,而不是直接下載。任何OAuth都不可能改進它。

+0

與REST API一起工作得很好,謝謝!儘管如此,也許你指的是'django-salesforce'的不同版本,但不應該是'from salesforce.backend.driver import handle_api_exceptions'? –

+0

是的,現在'salesforce.backend.driver',它可以很快更改爲'salesforce.dbapi.driver'。 – hynekcer

+0

關於您的編輯,門戶網站上的用戶將被作爲Salesforce上的聯繫人進行跟蹤 –