Как я могу извлечь вложения из salesforce?

#salesforce #soql

#salesforce #soql

Вопрос:

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

Спасибо

Пради

Ответ №1:

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

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

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

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

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

Комментарии:

1. Это интересно… таким образом, вложения хранятся в БД в двоичном виде, а не в физических файлах? Будет ли это означать, что создание резервной копии вложения даст мне фактические файлы, а перенос их в новый envmt будет иметь тот же результат, что и предыдущий envmt?

2. Ну, мы не знаем, как они хранят вложения на своей стороне, имейте в виду, что SF и все его подсистемы, такие как SOQL, фактически представляют уровень абстракции. В итоге, нам даже все равно, это их проблема ;). Теперь ваш комментарий напоминает мне, что есть и третий способ сделать это. Я обновлю сообщение

Ответ №2:

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

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

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

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

Вот пример того, как я сделал это в Objective 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];
  

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

Комментарии:

1. Спасибо, что очень помогло. Хотелось бы, чтобы у них было что-то подобное, встроенное в iOS Salesforce SDK.

Ответ №3:

В SalesForce вложение будет относиться к объекту, например, к объекту Account.

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

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

     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. Преобразование универсального объекта Salesforce (sObject) в объект «Вложение»

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

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

Ответ №4:

Вы можете использовать параметры запроса SOQl или, если вы ищете какой-либо инструмент автоматизации, который поможет вам с быстрым экспортом, тогда вы можете попробовать AppExchange App Satrang Массовая загрузка файла — https://appexchange .salesforce.com/listingDetail?listingId=a0N3A00000EcsAOUAZamp;tab=e

Отказ от ответственности: Я работаю в Satrang Technologies, издателе этого приложения AppExchange для массовой загрузки файлов.