#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)
-
Получить идентификатор объекта, к которому прикреплен файл. например, объект учетной записи
String pid = Account__r().getId();
-
Выполните запрос к объекту 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];
-
Преобразование универсального объекта Salesforce (sObject) в объект «Вложение»
*Attachment att = (Attachment)so;*
-
Извлеките поток массива байтов из тела вложения и выполните необходимую операцию с массивом байтов.
*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 для массовой загрузки файлов.