2016-09-16 1 views
1

Я начал изучать SalesForce и разрабатывать приложения с помощью django.Загрузите несколько файлов с помощью simple-salesforce python

Мне нужна помощь при загрузке файла в salesforce, для этого я прочитал simple-salesforce и this, которые помогают загрузить файл с помощью отдыха и SOAP api.

Мой вопрос в том, как загрузить один или несколько файлов с помощью простой-salesforce?

ответ

0

Вот код, который я использую для загрузки файлов.

def load_attachments(sf, new_attachments): 
    ''' 
     Method to attach the Template from the Parent Case to each of the  children. 
     @param: new_attachments the dictionary of child cases to the file name of the template 
    ''' 
    url = "https://" + sf.get_forced_url() + ".my.salesforce.com/services/data/v29.0/sobjects/Attachment/" 
    bearer = "Bearer " + sf.get_session_id() 
    header = {'Content-Type': 'application/json', 'Authorization': bearer} 

    for each in new_attachments: 
     body = "" 
     long_name = str(new_attachments[each]).split(sep="\\") 
     short_name = long_name[len(long_name) - 1] 
     with open(new_attachments[each], "rb") as upload: 
      body = base64.b64encode(upload.read()) 
     data = json.dumps({ 
          'ParentId': each, 
          'Name': short_name, 
          'body': body 
          }) 
     response = requests.post(url, headers=header, data=data) 
     print(response.text) 

В принципе, чтобы отправить файл, вам необходимо использовать модуль запросов и отправить файл через почтовую транзакцию. Для транзакции post требуется URL-адрес, на который отправляется запрос, информация заголовка и данные.

Здесь sf - это экземпляр, возвращаемый простой инициализацией с помощью функции simple-salesforce. Поскольку мой экземпляр использует пользовательские домены, мне пришлось создать свою собственную функцию в простом-salesforce, чтобы справиться с этим; Я называю это get_forced_url(). Примечание. URL-адрес может отличаться для вас в зависимости от того, какую версию вы используете [часть v29.0 может измениться].

Затем я установил свой носитель и заголовок.

Следующая вещь представляет собой цикл, который представляет новое вложение для каждого вложения на карте из родительского идентификатора в файл, который я хочу загрузить. Важно отметить, что вложения должны иметь родительский объект, поэтому вам необходимо знать ParentId. Для каждого приложения я затушевываю тело, создаю длинное и короткое имя для вложения. Тогда важная часть. В вложениях фактические данные файла хранятся в виде двоичного массива base-64. Таким образом, файл должен быть открыт как двоичный, следовательно, «rb», а затем закодирован на base-64.

После того, как файл был разобран на двоичный код base-64, я создаю строку json, где ParentId является идентификатором объекта родительского объекта, Имя - это короткое имя, а тело - это строка с кодировкой base-64 данные.

Затем файл отправляется на URL с заголовками и данными. Затем я печатаю ответ, чтобы посмотреть, как это происходит.

Смежные вопросы