如何通过REST API从Salesforce (SF)中检索在自定义对象中被嵌入为RTF字段中的链接的图像?
我们的目的是通过它的REST API从SF中提取信息,以便生成Word格式的报告。为此,我们需要在包含相关信息的SF自定义对象中运行查询。通常情况下,我们希望从一个自定义对象的集合中获取这些信息。
其中一个自定义字段包含一个RTF字段,其中包含相关图片的链接。当在SF UI中查看这些对象时,这些图像就会显示出来。在StackOverflow和Salesforce:StackExchange中都有一些关于这个主题的条目。这些条目中的许多都是讨论Apex方法的。那些讨论通过REST API检索图像的条目没有让我成功。
SF REST API 开发者指南中的一个条目是 此处 指导我们如何实现这一点:通过GET向REST API发送一个请求,如下所示。
/vXX.X/sobjects/SObjectName/id/richTextImageFields/fieldName/contentReferenceId
这里的诀窍是确定什么是SObjectName,id,fieldName和contentReferenceId.我们可以从我们正在使用的SF数据库模式中获得这些名称。幸运的是,我们可以从RTF字段中的嵌入式链接中获得ID。
IDs
RTF字段中的嵌入式链接采取以下形式。
https://[someInternalSalesforceURL].force.com/servlet/rtaImage?eid=a0Y3l00000G31DT&feoid=00N1N00000F14uz&refid=0EM3l0000039EK0
这个链接有三个ID。
我们需要使用eid和refid来对SF REST API的请求进行反构,如下所示。
在上面的例子中。
/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发送这个消息之前,你需要用你的salesforce实例URL作为前缀,并且你需要说明REST API的版本,例如v48.0。
以GET的方式将其发送给SF,我是一个R用户,返回一个包含图像作为数据的对象(在R的情况下:一个矩阵)。这个数据对象可以被转换为图像并保存为PNG文件。
假设
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")