2017-09-04 52 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上的联系人进行跟踪 –