【问题标题】:Salesforce: retrieve images via REST API from RFT fields in custom objectsSalesforce:通过 REST API 从自定义对象的 RFT 字段中检索图像
【发布时间】:2020-05-07 08:59:55
【问题描述】:

如何通过其 REST API 从 Salesforce (SF) 检索图像,这些图像作为链接嵌入到自定义对象的 RTF 字段中?

【问题讨论】:

    标签: r salesforce salesforce-lightning


    【解决方案1】:

    我们旨在通过其 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:实体 ID
    • feoid:字段实体 ID
    • refid:内容参考 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")
    

    【讨论】:

      猜你喜欢
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多