Как я могу извлечь вложения из Salesforce? - PullRequest
1 голос
/ 03 мая 2011

Мне нужно извлечь атрибуты из отдела продаж? Мне нужно перенести некоторые заметки и вложения в другое окружение. Я могу извлечь заметки, но не знаю, как с этим справиться

Спасибо

Пради

Ответы [ 3 ]

3 голосов
/ 22 мая 2013

Вот решение, которое я использовал для получения двоичного содержимого вложения от SalesForce. Пример в их документации указывает на следующее:

curl
https://na1.salesforce.com/services/data/v20.0/sobjects/Document/015D0000000NdJOIA0/body
-H "Authorization: Bearer token"

Итак, здесь есть пара разных элементов. Хост (https://na1.salesforce.com), который вы сможете получить после процесса входа в систему, этот хост основан на сеансе, поэтому он всегда может измениться. Второй элемент - это оставшаяся часть URL, которую вы получите из поля «body». объекта Attachment. Третьим и последним элементом является заголовок Authorization, который состоит из строки «Bearer» плюс токен, который выдается вам после аутентификации с помощью бэкэнда SF.

Ответом является двоичный файл, это НЕ в base64, просто сохраните его в файл, и все готово.

Вот пример того, как я это сделал в Задаче C:

// How to get the correct host, since that is configured after the login.
NSURL * host = [[[[SFRestAPI sharedInstance] coordinator] credentials] instanceUrl];

// The field Body contains the partial URL to get the file content
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", [host absoluteString], {AttachmentObject}.body]];

// Creating the Authorization header. Important to add the "Bearer " before the token
NSString *authHeader = [NSString stringWithFormat:@"Bearer %@",[[[[SFRestAPI sharedInstance] coordinator] credentials] accessToken]];

NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60.0];
[urlRequest addValue:authHeader forHTTPHeaderField:@"Authorization"];
[urlRequest setHTTPMethod:@"GET"];

urlConnection = [NSURLConnection connectionWithRequest:urlRequest delegate:self];

Надеюсь, это поможет.

3 голосов
/ 03 мая 2011

Это в основном зависит от того, какие инструменты / утилиты вы используете для извлечения.SOQL для Attachment sObject всегда будет возвращать по одной строке за раз, если в запрос включено поле Body.Это применяется для сохранения ресурсов и предотвращения избыточных сценариев SOQL.

Подход № 1, если queryMore недоступен: введите поле SOQL без Body для перечисления всех вложений, а затем введите один SOQL для идентификатора вложениядля извлечения Body

Подход № 2. Выполните SOQL для извлечения всех необходимых вложений, затем выполните цикл, используя queryMore, чтобы получить их по одному за раз.

Подход № 3. Если вы можете «заморозить» среду SF и просто хотите сделать снимок системы для предварительной загрузки другой, которая будет использоваться в дальнейшем, вы можете использовать «экспорт данных».В меню настройки в управлении данными есть команда экспорта данных, убедитесь, что вы нажали «Включить в экспорт», чтобы включить все двоичные данные.После надлежащей процедуры вам будет предоставлена ​​полная резервная копия данных, которую вы можете обрабатывать в автономном режиме.

Кстати, тело кодировано в base64, вам нужно будет декодировать его, чтобы получить действительный двоичный файл

0 голосов
/ 23 февраля 2015

В SalesForce вложение будет против объекта, например, Объект учетной записи.

Шаги для извлечения вложения (на Java)

  1. Получить идентификатор объекта, к которому прикреплен файл. e.q. Объект счета

    String pid = Account__r().getId();
    
  2. Выполнить запрос к объекту Salesforce «Вложение» для идентификатора на шаге 1

    *String q =    "Select Name, Body, ContentType from Attachment
    where ParentId = '" +    pid + "'";
    QueryResult qr = connection.query(q);
    SObject[] sarr = qr.getRecords();*
    SObject so = sarr[0];
    
  3. Typecast Salesforce Generic Object (SObject) к объекту "Attachment"

    *Attachment att = (Attachment)so;*
    
  4. Извлечение потока байтового массива из тела вложения и выполнение операции, необходимой для массива байтов.

    *byte[] bName = att.getBody();
    // Do your operation in byte array stream* 
    
...