【发布时间】:2020-05-07 08:59:55
【问题描述】:
如何通过其 REST API 从 Salesforce (SF) 检索图像,这些图像作为链接嵌入到自定义对象的 RTF 字段中?
【问题讨论】:
标签: r salesforce salesforce-lightning
如何通过其 REST API 从 Salesforce (SF) 检索图像,这些图像作为链接嵌入到自定义对象的 RTF 字段中?
【问题讨论】:
标签: r salesforce salesforce-lightning
我们旨在通过其 REST API 从 SF 中提取信息,以便生成 Word 格式的报告。为此,我们需要对包含相关信息的 SF 自定义对象运行查询。通常,我们希望从一组自定义对象中获取此信息。
其中一个自定义字段包含一个 RTF 字段,其中包含指向相关图像的链接。在 SF UI 中查看对象时会显示这些图像。 StackOverflow 和 Salesforce:StackExchange 中都有几个关于此主题的条目。其中许多条目讨论了 Apex 方法。那些讨论通过 REST API 检索图像的人并没有让我成功。
SF REST API 开发人员指南here 中的一个条目指导我们如何实现这一点: 通过 GET 向 REST API 发送请求,如下所示:
/vXX.X/sobjects/SObjectName/id/richTextImageFields/fieldName/contentReferenceId
这里的技巧是确定什么是 SObjectName、id、fieldName 和 contentReferenceId。 我们可以从我们正在使用的 SF 数据库模式中获取名称。幸运的是,我们可以从 RTF 字段中嵌入的链接中获取 ID。
ID
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")
【讨论】: