Salesforce:通过REST API从自定义对象中的RFT字段检索图像。

问题描述 投票:0回答:1

如何通过REST API从Salesforce (SF)中检索在自定义对象中被嵌入为RTF字段中的链接的图像?

r salesforce salesforce-lightning
1个回答
0
投票

我们的目的是通过它的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:实体ID
  • feoid:外地实体ID
  • 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发送这个消息之前,你需要用你的salesforce实例URL作为前缀,并且你需要说明REST API的版本,例如v48.0。

以GET的方式将其发送给SF,我是一个R用户,返回一个包含图像作为数据的对象(在R的情况下:一个矩阵)。这个数据对象可以被转换为图像并保存为PNG文件。

假设

  • 你被SF API授权,并收到了一个访问令牌或SessionID和一个instance_url。
  • 你有代码向SF发送了一个查询,并返回了相关RTF字段的对象。
  • 你已经从RTF字段中获取了嵌入的链接,并从链接中提取了eid和refid。

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")
© www.soinside.com 2019 - 2024. All rights reserved.