Salesforce: получение изображений через REST API из полей RFT в настраиваемых объектах - PullRequest
0 голосов
/ 07 мая 2020

Как можно получать изображения из Salesforce (SF) через его REST API, которые встроены в виде ссылок в поля RTF в настраиваемых объектах?

1 Ответ

0 голосов
/ 07 мая 2020

Мы стремимся извлекать информацию из SF через его REST API для создания отчета в формате Word. Для этого нам нужно запускать запросы к настраиваемым объектам SF, которые содержат соответствующую информацию. Обычно мы ищем эту информацию из набора настраиваемых объектов.

Одно из настраиваемых полей содержит поле RTF, которое содержит ссылки на соответствующие изображения. Эти изображения отображаются при просмотре объектов в пользовательском интерфейсе SF. Как в StackOverflow, так и в Salesforce: StackExchange есть несколько записей об этом топе c. Многие из этих статей обсуждают методы Apex. Те, которые обсуждают получение изображений через REST API, не позволили мне добиться успеха.

Запись в руководстве разработчика SF REST API здесь инструктирует нас, как этого добиться: отправьте запросить REST API через GET следующим образом:

 /vXX.X/sobjects/SObjectName/id/richTextImageFields/fieldName/contentReferenceId 

Хитрость здесь состоит в том, чтобы определить, что такое SObjectName, id, fieldName и contentReferenceId. Мы можем получить имена из схемы базы данных SF, с которой мы работаем. К счастью, мы можем получить идентификаторы из встроенных ссылок в поле RTF.

идентификаторы

Встроенные ссылки в поле RTF имеют следующий вид:

https://[someInternalSalesforceURL].force.com/servlet/rtaImage?eid=a0Y3l00000G31DT&feoid=00N1N00000F14uz&refid=0EM3l0000039EK0

В этой ссылке три идентификатора:

  • eid: идентификатор объекта
  • feoid: идентификатор объекта поля
  • refid: contentReference ID

Нам нужно использовать eid и refid для создания запроса к SF REST API следующим образом:

  • id = eid
  • contentReferenceId = contentReference ID

В приведенном выше примере:

/vXX.X/sobjects/SObjectName/a0Y3l00000G31DT/richTextImageFields/fieldName/0EM3l0000039EK0

Имена

Следующим шагом является проверка схемы вашей базы данных и определение SObjectName и fieldName. SObjectName - это имя настраиваемого объекта, содержащего поле RTF. Скажем: myObject__c Очевидно, что fieldName является именем поля RTF: скажем, myRTFfield__c Запрос к SF затем будет выглядеть следующим образом:

/vXX.X/sobjects/myObject__c/a0Y3l00000G31DT/richTextImageFields/myRTFfield__c/0EM3l0000039EK0

Получение изображения

Перед отправкой этого в SF вам необходимо указать префикс URL-адреса вашего экземпляра Salesforce, и вам необходимо сформулировать версию REST API, например, v48.0

Отправляя это как GET в SF, я пользователь R, возвращает объект, содержащий изображение в виде данных (в случае R: матрица). Этот объект данных можно преобразовать в изображение и сохранить как файл PNG.

Допущения

  • Вы авторизованы SF API и получили доступ token или SessionID и instance_url.
  • У вас есть код, который отправляет запрос в SF, который возвращает объект с соответствующим полем RTF.
  • вы получили встроенные ссылки из RTF

Пример кода R

В R это выглядит примерно так:

library(httr)
library(png)
request_headers <- c("Accept" = "application/json", 
                     "Content-Type" = "application/json",
                     "Authorization" = paste0("Bearer ", access_token))
url <- "/services/data/v48.0/sobjects/myObject__c/a0Y3l00000G31DT/richTextImageFields/myRTFfield__c/0EM3l0000039EK0"
url <- paste0(instance_url, url) 
result <- GET(url, add_headers(request_headers))
img <- content(result, type = "image/png")
writePNG(img, "myImage.png")
...