使用搜索和查询

本节中的示例使用 REST API 资源来搜索和查询记录 使用 Salesforce 对象搜索语言 (SOSL) 和 Salesforce 对象查询语言 (SOQL),以及 其他搜索 API。有关 SOSL 和 SOQL 的详细信息,请参阅 SOQL 和 SOSL 参考

  • 执行 SOQL 查询 使用 Query 资源执行 SOQL 查询,该查询
    在单个响应中返回所有结果,或者如果需要,返回部分结果和用于检索其余结果的定位器。
  • 执行包含已删除项目的
    SOQL 查询 使用 QueryAll 资源执行 SOQL 查询,该查询包含有关因合并或删除而删除的记录的信息。使用 QueryAll 而不是 Query,因为 Query 资源将自动筛选出已删除的项。
  • 获取有关查询性能的反馈(测试版)
    要获取有关 Salesforce 如何执行查询、报表或列表视图的反馈,请使用 Query 资源和 explain 参数。Salesforce 会分析每个查询,以找到获取查询结果的最佳方法。根据查询和查询筛选器,Salesforce 使用索引或内部优化。要返回有关 Salesforce 如何优化查询的详细信息,而无需实际运行查询,请使用 explain 参数。根据响应,决定是否微调查询的性能,例如添加筛选器以使查询更具选择性。
  • 搜索字符串
    使用 Search 资源执行 SOSL 搜索,或使用 Parameterized Search 资源执行不带 SOSL 的简单 RESTful 搜索。
  • 获取默认搜索范围和顺序 使用“搜索范围和顺序”资源检索登录用户的默认全局搜索范围和顺序
    ,包括用户搜索结果页中的任何固定对象。
  • 获取对象的搜索结果布局 使用“搜索结果布局”资源检索查询字符串中指定的每个对象
    的搜索结果布局配置。
  • 查看相关项目 使用“相关项目
    ”资源获取相关记录的列表。

执行 SOQL 查询

使用 Query 资源执行 SOQL 查询,该查询在单个响应中返回所有结果,或者 如果需要,返回部分结果和用于检索剩余结果的定位器 结果。

以下查询请求所有 name 字段中的值 帐户记录。执行查询的示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/query/?q=SELECT+name+from+Account -H "Authorization: Bearer token"

用于执行查询的示例请求正文不需要用于执行查询的示例响应正文

{
    "done" : true,
    "totalSize" : 14,
    "records" : 
    [ 
        {  
            "attributes" : 
            {    
                "type" : "Account",    
                "url" : "/services/data/v59.0/sobjects/Account/001D000000IRFmaIAH"  
            },  
            "Name" : "Test 1"
        }, 
        {  
            "attributes" : 
            {    
                "type" : "Account",    
                "url" : "/services/data/v59.0/sobjects/Account/001D000000IomazIAB"  
            },  
            "Name" : "Test 2"
        }, 

        ...

    ]
}

检索剩余的 SOQL 查询 结果

如果初始查询仅返回部分结果,则响应结束 包含一个名为 :

nextRecordsUrl

"nextRecordsUrl" : "/services/data/v59.0/query/01gD0000002HU6KIAW-2000"

在这种情况下,请求下一批记录并重复,直到所有记录都 被检索到。这些请求使用 ,并且不包含任何参数。nextRecordsUrl检索剩余查询结果的示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/query/01gD0000002HU6KIAW-2000 -H "Authorization: Bearer token"

用于检索剩余查询结果的示例请求正文不需要用于检索剩余查询结果的示例响应正文

{
    "done" : true,
    "totalSize" : 3214,
    "records" : [...]
}

执行包含以下内容的 SOQL 查询 已删除的项目

使用 QueryAll 资源执行 SOQL 查询,其中包括 有关因合并或删除而删除的记录的信息。用 QueryAll 而不是 Query,因为 Query 资源将自动筛选掉 已删除的项目。

以下查询请求所有 Name 字段中的值 已删除的Merchandise__c记录,在具有一个已删除Merchandise__c的组织中 记录。使用 Query 而不是 QueryAll 的同一查询不会返回任何记录,因为 查询会自动从结果集中筛选出任何已删除的记录。对已删除的Merchandise__c记录执行查询的示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/queryAll/?q=SELECT+Name+from+Merchandise__c+WHERE+isDeleted+=+TRUE -H "Authorization: Bearer token"

用于执行查询的示例请求正文不需要用于执行查询的示例响应正文

{
    "done" : true,
    "totalSize" : 1,
    "records" : 
    [ 
        {  
            "attributes" : 
            {    
                "type" : "Merchandise__c",    
                "url" : "/services/data/v59.0/sobjects/Merchandise__c/a00D0000008pQRAIX2"  
            },  
            "Name" : "Merchandise 1"
        }, 
    ]
}

检索剩余的 SOQL 查询 结果

如果初始查询仅返回部分结果,则响应的末尾将 包含一个名为 的字段。为 例如,您可能会在 查询:

nextRecordsUrl

"nextRecordsUrl" : "/services/data/v59.0/query/01gD0000002HU6KIAW-2000"

在这种情况下,请求下一批记录并重复,直到所有记录都 被检索到。这些请求使用 ,并且不包含任何参数。nextRecordsUrl

虽然有 URL 时,它仍会提供初始 QueryAll 请求的剩余结果。 其余结果包括与初始匹配的已删除记录 查询。nextRecordsUrlquery检索剩余结果的示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/query/01gD0000002HU6KIAW-2000 -H "Authorization: Bearer token"

用于检索其余结果的示例请求正文不需要用于检索剩余结果的示例响应正文

{
    "done" : true,
    "totalSize" : 3214,
    "records" : [...]
}

获取有关查询性能的反馈(测试版)

要获取有关 Salesforce 如何执行查询、报告或列表视图的反馈,请使用 Query 资源以及 explain 参数。Salesforce 会分析每个查询以找到最佳查询 方法获取查询结果。根据查询和查询筛选器,Salesforce 使用索引或内部优化。要返回有关 Salesforce 如何优化 query,而不实际运行查询,使用 explain 参数。 根据响应,决定是否微调查询的性能,例如添加 筛选器,使查询更具选择性。

注意

此功能是一项测试版服务。客户可以选择单独试用此类测试版服务 自由裁量权。对测试版服务的任何使用均受适用的测试版服务条款的约束 在协议和条款中提供。

响应包含一个或多个查询执行计划,按从最优到最少的顺序排序 最佳的。最佳计划是当查询、报表或列表视图为 执行。

有关使用 explain 时返回的字段的更多详细信息,请参阅查询选项标头中的 explain 参数。查看更多 有关使查询更具选择性的信息,请参阅使用超大型 SOQL 《Apex 开发人员指南》中的查询。

示例:对查询性能的反馈

以下性能反馈查询使用:Merchandise__c

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/query/?explain=
SELECT+Name+FROM+Merchandise__c+WHERE+CreatedDate+=+TODAY+AND+Price__c+>+10.0

性能反馈查询的响应正文如下所示:

{
  "plans" : [ {
    "cardinality" : 1,
    "fields" : [ "CreatedDate" ],
    "leadingOperationType" : "Index",
    "notes" :  [ {
      "description" : "Not considering filter for optimization because unindexed",
      "fields" : [ "IsDeleted" ],
      "tableEnumOrId" : "Merchandise__c"
    } ],
    "relativeCost" : 0.0,
    "sobjectCardinality" : 3,
    "sobjectType" : "Merchandise__c"
  }, {
    "cardinality" : 1,
    "fields" : [ ],
    "leadingOperationType" : "TableScan",
    "notes" :  [ {
      "description" : "Not considering filter for optimization because unindexed",
      "fields" : [ "IsDeleted" ],
      "tableEnumOrId" : "Merchandise__c"
    } ],
    "relativeCost" : 0.65,
    "sobjectCardinality" : 3,
    "sobjectType" : "Merchandise__c"
  } ]
}

此响应表明 Salesforce 为此查询找到了两个可能的执行计划。 第一个计划使用 CreatedDate 索引字段来提高此查询的性能。 第二个计划在不使用索引的情况下扫描所有记录。如果执行查询,则 使用第一个计划。这两个计划都指出,没有用于过滤的二次优化 标记为已删除的记录,因为 IsDeleted 字段未编制索引。

搜索字符串

使用搜索资源执行 SOSL 搜索或使用 参数化搜索资源,用于执行简单的 RESTful 搜索,而无需 SOSL的。

SOSL 示例 使用 GET 方法进行搜索

以下示例执行 SOSL 搜索。此示例中的搜索字符串必须经过 URL 编码。

Acme示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/search/?q=FIND+%7BAcme%7D -H "Authorization: Bearer token"

示例请求正文不需要示例响应正文

{
  "searchRecords" : [ {
    "attributes" : {
      "type" : "Account",
      "url" : "/services/data/v59.0/sobjects/Account/001D000000IqhSLIAZ"
    },
    "Id" : "001D000000IqhSLIAZ",
  }, {
    "attributes" : {
      "type" : "Account",
      "url" : "/services/data/v59.0/sobjects/Account/001D000000IomazIAB"
    },
    "Id" : "001D000000IomazIAB",
  } ]
}

使用 GET 方法的参数化搜索示例

以下示例 执行对 的参数化搜索。这 此示例中的搜索字符串必须经过 URL 编码。

Acme示例用法对包含 Acme 的所有结果进行全局搜索

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/parameterizedSearch/?q=Acme -H "Authorization: Bearer token"

帐户搜索包含 Acme 的结果,返回 id 和 名称字段

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/parameterizedSearch/?q=Acme&sobject=Account&Account.fields=id,name&Account.limit=10 -H "Authorization: Bearer token"

示例请求正文不需要示例响应正文

{
  "searchRecords" : [ {
    "attributes" : {
      "type" : "Account",
      "url" : "/services/data/v59.0/sobjects/Account/001D000000IqhSLIAZ"
    },
    "Id" : "001D000000IqhSLIAZ"
  }, {
    "attributes" : {
      "type" : "Account",
      "url" : "/services/data/v59.0/sobjects/Account/001D000000IomazIAB"
    },
    "Id" : "001D000000IomazIAB"
  } ]
}

具有元数据参数的示例响应正文

注意

仅当 请求指定 。metadata=LABELS

{
  "searchRecords" : [ {
    "attributes" : {
      "type" : "Account",
      "url" : "/services/data/v59.0/sobjects/Account/001D000000IqhSLIAZ"
    },
    "Id" : "001D000000IqhSLIAZ",
  }, {
    "attributes" : {
      "type" : "Account",
      "url" : "/services/data/v59.0/sobjects/Account/001D000000IomazIAB"
    },
    "Id" : "001D000000IomazIAB",
  } ],
  "metadata" : {
    "entityetadata" : [ {
      "entityName" : "Account",
      "fieldMetadata" : [ {

        "name" : "Name",
        "label" : "Account Name"
       } ]
    } ]
  }
}

使用 POST 方法的参数化搜索示例

执行一个 使用 POST 方法进行参数化搜索,以访问所有可用的搜索功能。示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/parameterizedSearch "Authorization: Bearer token" -H "Content-Type: application/json” -d "@search.json”

示例请求正文不需要示例 JSON 文件

{
    "q":"Smith",
    "fields" : ["id", "firstName", "lastName"],
    "sobjects":[{"fields":["id", "NumberOfEmployees"],
	          "name": "Account", 
	          "limit":20},
	         {"name": "Contact"}],
    "in":"ALL",
    "overallLimit":100,
    "defaultLimit":10
}

示例响应正文

{
  "searchRecords" : [ {
    "attributes" : {
      "type" : "Contact",
      "url" : "/services/data/v59.0/sobjects/Contact/003xx000004TraiAAC"
    },
    "Id" : "003xx000004TraiAAC",
    "FirstName" : "Smith",
    "LastName" : "Johnson"
  }, {
    "attributes" : {
      "type" : "Account",
      "url" : "/services/data/v59.0/sobjects/Account/001xx000003DHXnAAO"
    },
    "Id" : "001xx000003DHXnAAO",
    "NumberOfEmployees" : 100
  } ]
}

另见

  • 搜索
  • 参数化搜索

获取默认搜索范围和顺序

使用“搜索范围和顺序”资源检索 已登录用户,包括用户搜索结果中的任何固定对象 页。

在以下示例中,登录用户的默认全局搜索范围包括 网站、想法、案例、商机、客户和用户对象,按以下顺序排列 它们在响应正文中返回。示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/search/scopeOrder -H "Authorization: Bearer token"

示例请求正文不需要示例响应正文

[
  {
    "type":"Site",
    "url":"/services/data/v59.0/sobjects/Site/describe"
  },
  {
    "type":"Idea",
    "url":"/services/data/v59.0/sobjects/Idea/describe"
  },
  {
    "type":"Case",
    "url":"/services/data/v59.0/sobjects/Case/describe"
  },
  {
    "type":"Opportunity",
    "url":"/services/data/v59.0/sobjects/Opportunity/describe"
  },
  {
    "type":"Account",
    "url":"/services/data/v59.0/sobjects/Account/describe"
  },
  {
    "type":"User",
    "url":"/services/data/v59.0/sobjects/User/describe"
  }
]

获取对象的搜索结果布局

使用“搜索结果布局”资源检索每个对象的搜索结果布局配置 在查询字符串中指定。示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/search/layout/?q=Account,Contact,Lead,Asset "Authorization: Bearer token"

示例请求正文不需要示例响应正文

[ { "label" : "Search Results",
    "limitRows" : 25,
    "searchColumns" : [ { "field" : "Account.Name",
          "format" : null,
          "label" : "Account Name",
          "name" : "Name"
        },
        { "field" : "Account.Site",
          "format" : null,
          "label" : "Account Site",
          "name" : "Site"
        },
        { "field" : "Account.Phone",
          "format" : null,
          "label" : "Phone",
          "name" : "Phone"
        },
        { "field" : "User.Alias",
          "format" : null,
          "label" : "Account Owner Alias",
          "name" : "Owner.Alias"
        }
      ]
  },
  { "label" : "Search Results",
    "limitRows" : 25,
    "searchColumns" : [ { "field" : "Contact.Name",
          "format" : null,
          "label" : "Name",
          "name" : "Name"
        },
        { "field" : "Account.Name",
          "format" : null,
          "label" : "Account Name",
          "name" : "Account.Name"
        },
        { "field" : "Account.Site",
          "format" : null,
          "label" : "Account Site",
          "name" : "Account.Site"
        },
        { "field" : "Contact.Phone",
          "format" : null,
          "label" : "Phone",
          "name" : "Phone"
        },
        { "field" : "Contact.Email",
          "format" : null,
          "label" : "Email",
          "name" : "Email"
        },
        { "field" : "User.Alias",
          "format" : null,
          "label" : "Contact Owner Alias",
          "name" : "Owner.Alias"
        }
      ]
  },
  { "label" : "Search Results",
    "limitRows" : 25,
    "searchColumns" : [ { "field" : "Lead.Name",
          "format" : null,
          "label" : "Name",
          "name" : "Name"
        },
        { "field" : "Lead.Title",
          "format" : null,
          "label" : "Title",
          "name" : "Title"
        },
        { "field" : "Lead.Phone",
          "format" : null,
          "label" : "Phone",
          "name" : "Phone"
        },
        { "field" : "Lead.Company",
          "format" : null,
          "label" : "Company",
          "name" : "Company"
        },
        { "field" : "Lead.Email",
          "format" : null,
          "label" : "Email",
          "name" : "Email"
        },
        { "field" : "Lead.Status",
          "format" : null,
          "label" : "Lead Status",
          "name" : "toLabel(Status)"
        },
        { "field" : "Name.Alias",
          "format" : null,
          "label" : "Owner Alias",
          "name" : "Owner.Alias"
        }
      ]
  },
]

查看相关项目

使用“相关项目”资源获取相关项目列表 记录。获取当前用户最相关列表的示例用法 记录

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/relevantItems -H "Authorization: Bearer token"

示例请求正文不需要示例响应正文

[ {
    "apiName" : "Contact",
    "key" : "003",
    "label" : "Contacts",
    "lastUpdatedId" : "135866748",
    "recordIds" : [ "003xx000004TxBA" ]
}, {   "apiName" : "Account",
    "key" : "001",
    "label" : "Accounts",
    "lastUpdatedId" : "193640553",
    "recordIds" : [ "001xx000003DWsT" ]
}, {
    "apiName" : "User",
    "key" : "005",
    "label" : "Users",
    "lastUpdatedId" : "-199920321",
    "recordIds" : [ "005xx000001Svqw", "005xx000001SvwK", "005xx000001SvwA" ]
}, {  "apiName" : "Case",
    "key" : "069",
    "label" : "Cases",
    "lastUpdatedId" : "1033471693",
    "recordIds" : [ "069xx0000000006", "069xx0000000001", "069xx0000000002" ]
} ]

筛选对特定对象的响应的示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/relevantItems?sobjects=Account,User -H "Authorization: Bearer token"

示例请求正文不需要示例响应正文

[ {
    "apiName" : "Account",
    "key" : "001",
    "label" : "Accounts",
    "lastUpdatedId" : "193640553",
    "recordIds" : [ "001xx000003DWsT" ]
}, {
  "apiName" : "User",
    "key" : "005",
    "label" : "Users",
    "lastUpdatedId" : "102959935",
    "recordIds" : [ "005xx000001Svqw", "005xx000001SvwK", "005xx000001SvwA" ]
} ]

将用户的当前相关记录列表与 以前的版本

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/relevantItems?lastUpdatedId=102959935 -H "Authorization: Bearer token"

示例请求正文不需要示例响应标头

lastUpdatedId: 102959935
newResultSetSinceLastQuery: true

示例响应正文

[ {
    "apiName" : "User",
    "key" : "003",
    "label" : "Users",
    "lastUpdatedId" : "102959935",
    "recordIds" : [ "003xx000004TxBA" ]
}, {
    "apiName" : "Account",
    "key" : "001",
    "label" : "Accounts",
    "lastUpdatedId" : "193640553",
    "recordIds" : [ "001xx000003DWsT" ]
}, {
    "apiName" : "Case",
    "key" : "005",
    "label" : "Cases",
  "lastUpdatedId" : "1740766611",
    "recordIds" : [ "005xx000001Svqw", "005xx000001SvwA" ]
} ]

将用户的当前相关记录列表与 特定对象的先前版本

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/relevantItems?mode=MRU&sobjects=Account,Contact&Account.lastUpdatedId=102959935 -H "Authorization: Bearer token"

示例请求正文不需要示例响应正文

[ {
    "apiName" : "Account",
    "key" : "001",
    "label" : "Accounts",
    "lastUpdatedId" : "193640553",
    "recordIds" : [ "001xx000003DWsT" ]
} ]

另见

  • sObject 相关项目

删除 Lightning Experience 事件系列

使用 HTTP DELETE 方法删除序列中的一个或多个 IsRecurrence2 事件。你 可以删除单个事件、特定事件之后的所有事件(包括特定事件)或整个事件 系列。

删除序列中的单个事件

使用 sObject Rows 资源删除事件记录。删除 系列中,指定事件 ID 并使用资源来删除记录。

从系列中删除多个事件或所有事件

若要删除序列中特定事件及以后的所有事件,请指定事件 ID 并使用资源的 DELETE 方法删除记录。调用此方法时, IsRecurrence2 必须为 true,IsRecurrence2Exclusion 必须为 false。

若要删除整个事件系列,请指定该系列中第一个事件的事件 ID 并使用资源的 DELETE 方法删除记录。从系列中删除多个事件或所有事件的示例

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/Event/00Uxx0000000000/fromThisEventOnwards -H "Authorization: Bearer token" -X DELETE

示例请求正文

None needed

成功删除事件后的示例响应正文

{
success: We’re deleting the selected events from the series. Wait for all events to be removed. 
}

考虑

从事件中删除不支持来自以下事件的调用:

  • 发生在 Recurrence2PatternStartDate 的原始值之前。
  • 定义为子事件。

如果事件系列源自 Salesforce 外部,并且事件 ID 为第一次 不可用,则无法删除系列中的所有事件。相反,请从特定 发生。

从富文本区域字段获取图像

使用 sObject 富文本图像获取资源从富文本区域字段中检索图像。在这个例子中,我们 从名为 的潜在客户记录的自定义富文本字段中检索图像。我们假设图像已经 上传到此字段。

LeadPhotoRichText__c

获取镜像引用 ID

在通过请求检索图像之前,必须先从富文本字段中获取图像。使用 sObject Rows 资源检索 潜在顾客记录的字段信息。refid

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/Lead/00Q112222233333 -H "Authorization: Bearer token"

下面是请求的精简输出示例。

{
    "attributes": {
        "type": "Lead",
        "url": "/services/data/v51.0/sobjects/Lead/00Q112222233333"
    },
    "Id": "00Q112222233333",
    "IsDeleted": false,
    "MasterRecordId": null,
    "LastName": "Smith",
    "FirstName": "John",

    ...

    "LeadPhotoRichText__c": "<img alt=\"johnSmithPhoto\" src=\"https://MyDomainName.documentforce.com/servlet/rtaImage?eid=a005e000007Dksm&amp;feoid=00N5e00000djU6Y&amp;refid=0EM5e000000B9LQ\"></img>"
}

从LeadPhotoRichText__c字段中可以看出,图像的 是 。使用这个 值以检索图像。refid0EM5e000000B9LQ

检索图像

使用潜在顾客记录 ID、富文本字段名称和图像检索图像。响应将图像作为编码数据返回,并使用 与上传时使用的文件类型相同。将返回的数据另存为图像文件,并使用 使用参数的适当文件类型。refid–output filename

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/Lead/00Q112222233333/richTextImageFields/LeadPhotoRichText__c/0EMR00000000A8V -H "Authorization: Bearer token" --output "LeadPhoto.jpeg"

插入或更新 Blob 数据

您可以使用 sObject 基本信息、sObject 行或 sObject 要在其中插入或更新二进制大型对象 (blob) 的集合资源 Salesforce,例如图像或 PDF。您可以将任何类型的文件或二进制数据上传到 包含 blob 字段的任何标准对象。

若要插入和更新 blob 数据,请创建多部分请求正文。第一部分 请求正文包含非二进制字段数据,例如新字段的描述或名称 记录。第二部分包含您要上传的文件的二进制数据。这 请求正文必须符合 MIME 多部分内容类型标准。查看更多 信息,请参阅多部分内容类型的 W3C 标准。

如果使用 sObject 基本信息或 sObject 行资源,则 ContentVersion 对象和 对于所有其他符合条件的标准对象,为 500 MB。如果使用 sObject 集合 资源,则单个请求中所有文件的最大总大小为 500 MB。

注意

可以使用非多部分消息插入或更新 blob 数据,但受到限制 到 50 MB 的文本数据或 37.5 MB 的 base64 编码数据。

这些部分提供了如何使用多部分插入或更新 blob 数据的示例 content-type 请求。这些示例的请求正文使用 JSON 格式。

插入包含 Blob 数据的文档

此示例请求和请求正文创建一个 Document 记录,其中包含 PDF 文件的二进制数据。除了文件本身的二进制数据外, request body 还指定其他字段数据,包括 Document 对象所需的 FolderId。

如果您在 Salesforce 中没有新文档记录的文件夹记录,则必须 使用 sObject 基本信息资源创建一个,然后才能遵循此操作 例。确保“文件夹”记录的“类型”字段为 公文。

提示

成功发送请求后,您可以查看新文档 在 Salesforce Classic 中。Salesforce Lightning 不会在用户中显示文档 接口。创建文档的示例请求

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/Document/ -H "Authorization: Bearer token" -H "Content-Type: multipart/form-data; boundary=\"boundary_string\"" --data-binary @NewDocument.json

用于创建文档的示例请求正文此请求正文表示 NewDocument.json 的内容。PDF 的二进制数据 为简洁起见,省略了内容,并替换为“二进制数据” 去这里。实际请求包含完整的二进制文件 内容。

--boundary_string
Content-Disposition: form-data; name="entity_document";
Content-Type: application/json

{  
    "Description" : "Marketing brochure for Q1 2011",
    "Keywords" : "marketing,sales,update",
    "FolderId" : "005D0000001GiU7",
    "Name" : "Marketing Brochure Q1",
    "Type" : "pdf"
}

--boundary_string
Content-Type: application/pdf
Content-Disposition: form-data; name="Body"; filename="2011Q1MktgBrochure.pdf"

Binary data goes here.

--boundary_string--

示例响应正文成功后,新文档的 ID 为 返回。

{
    "id" : "015D0000000N3ZZIA0",
    "errors" : [ ],
    "success" : true
}

错误响应示例

{
    "fields" : [ "FolderId" ],
    "message" : "Folder ID: id value of incorrect type: 005D0000001GiU7",
    "errorCode" : "MALFORMED_ID"
}

使用 Blob 数据更新文档

本示例更新现有 Document 记录。根据 请求正文,可以更新记录的字段,关联二进制数据 有了它,或两者兼而有之。

如果只想更新记录字段,则请求正文不需要 多部分内容类型。更新 Document 对象中的二进制数据的示例请求

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/Document/015D0000000N3ZZIA0 -H "Authorization: Bearer token" -H "Content-Type: multipart/form-data; boundary=\"boundary_string\"" --data-binary @UpdateDocument.json -X PATCH

用于更新 Document 对象中的二进制数据的示例请求正文

此请求正文表示 UpdateDocument.json 的内容。此示例更新 记录的二进制数据,以及“名称”和“关键字”字段。如果您只想更新 二进制数据,您可以删除带有 Name 和 Keywords 字段的代码行。

为简洁起见,省略了 PDF 内容的二进制数据,并且 替换为“更新的文档二进制文件转到此处”。一 实际请求包含完整的二进制内容。

--boundary_string
Content-Disposition: form-data; name="entity_content";
Content-Type: application/json

{  
    "Name" : "Marketing Brochure Q1 - Sales",
    "Keywords" : "sales, marketing, first quarter"
}

--boundary_string
Content-Type: application/pdf
Content-Disposition: form-data; name="Body"; filename="2011Q1MktgBrochure.pdf"

Updated document binary data goes here.

--boundary_string--

用于更新 Document 对象中的字段的示例响应正文无返回错误响应请参阅状态代码和错误响应。

插入 ContentVersion

此示例插入一个新的 ContentVersion。除了文件的二进制数据 本身,此代码还为其他字段(如 ReasonForChange 和 PathOnClient)提供值。这 message 包含 ContentDocumentId,因为 ContentVersion 始终与 ContentDocument 相关联。

提示

ContentVersion 对象不支持更新。因此,你不能 更新 ContentVersion。您只能插入新的 ContentVersion。您可以看到 内容选项卡上的更改结果。插入 ContentVersion 的示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/ContentVersion -H "Authorization: Bearer token" -H "Content-Type: multipart/form-data; boundary=\"boundary_string\"" --data-binary @NewContentVersion.json

用于插入 ContentVersion 的示例请求正文

此请求正文表示文件 NewContentVersion.json 的内容。二进制数据 为简洁起见,省略了 PDF 内容,并替换为 “二进制数据在这里。”实际请求包含 完整的二进制内容。

--boundary_string
Content-Disposition: form-data; name="entity_content";
Content-Type: application/json

{
    "ContentDocumentId" : "069D00000000so2",
    "ReasonForChange" : "Marketing materials updated",
    "PathOnClient" : "Q1 Sales Brochure.pdf"
}

--boundary_string
Content-Type: application/octet-stream
Content-Disposition: form-data; name="VersionData"; filename="Q1 Sales Brochure.pdf"

Binary data goes here.

--boundary_string--

插入 ContentVersion 的示例响应正文

{
    "id" : "068D00000000pgOIAQ",
    "errors" : [ ],
    "success" : true
}

插入 ContentVersion 的错误响应请参阅状态代码和错误响应。

使用 sObject 集合插入 Blob 记录的集合

本示例插入新文档的集合。除了二进制数据 文件本身,此代码还指定其他字段数据,例如每条记录的 Description 和 Name 在集合中。

提示

成功发送请求后,您可以查看新文档 在 Salesforce Classic 中。Salesforce Lightning 不会在用户中显示文档 接口。属性如果将 sObject 集合用于 blob 数据,则必须指定某些 除 in 之外的属性值 请求正文的属性映射。type

参数描述
binaryPartName对于 blob 数据是必需的。的唯一标识符 二进制部分。
binaryPartName别名对于 blob 数据是必需的。中字段的名称 插入或更新二进制数据。

创建文档的示例

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/composite/sobjects/ -H "Authorization: Bearer token" -H "Content-Type: multipart/form-data; boundary=\"boundary_string\"" --data-binary @newdocuments.json

用于创建文档的示例请求正文此代码是 newdocuments.json 的内容。这 为简洁起见,省略了 PDF 内容的二进制数据并进行了替换 替换为“二进制数据在这里”。实际请求包含 完整二进制 内容。

--boundary_string
Content-Disposition: form-data; name="collection"
Content-Type: application/json

{
    "allOrNone" : false,
    "records" :
    [
        {
            "attributes" :
            {
                "type" : "Document",
                "binaryPartName": "binaryPart1",
                "binaryPartNameAlias": "Body"
            },
            "Description" : "Marketing Brochure",
            "FolderId" : "005xx000001Svs4AAC",
            "Name" : "Brochure",
            "Type" : "pdf"
        },
        {
            "attributes" :
            {
                "type" : "Document",
                "binaryPartName": "binaryPart2",
                "binaryPartNameAlias": "Body"
            },
            "Description" : "Pricing Overview",
            "FolderId" : "005xx000001Svs4AAC",
            "Name" : "Pricing",
            "Type" : "pdf"
        }
    ]
}

--boundary_string
Content-Disposition: form-data; name="binaryPart1"; filename="Brochure.pdf"
Content-Type: application/pdf

Binary data goes here.

--boundary_string
Content-Disposition: form-data; name="binaryPart2"; filename="Pricing.pdf"
Content-Type: application/pdf

Binary data goes here.

--boundary_string--

用于创建文档的示例响应正文成功后,新文档的 ID 为 返回。

[
    {
        "id": "015xx00000013QjAAI",
        "errors": [],
        "success": true
    },
    {
        "id": "015xx00000013QkAAI",
        "errors": [],
        "success": true
    }
]

有关更多信息,请参见 sObject 集合。

多部分消息注意事项

以下是多部分消息格式的一些注意事项,当您 插入或更新 blob 数据。边界字符串

  • 分隔多部分请求正文的各个部分。
  • 必须在分段请求的标头中指定。Content-Type
  • 最多可包含 70 个字符。
  • 不能是出现在 请求正文。
  • 包括第一个边界的两个连字符 (–) 前缀 字符串。
  • 包括最后一个边界字符串的两个连字符 (–) 后缀。

Content-Disposition 标头

  • 在请求正文的每个部分中是必需的。
  • 必须作为值 和属性。form-dataname
    • 在请求正文的非二进制部分,使用任何值 对于属性。name
    • 对于单个文档,在请求的二进制部分 body,请使用该属性指定 对象。例如,blob 数据字段的名称 Document 对象是 Body。name
    • 对于使用 sObject 集合插入或更新的文档, 使用属性 在请求正文的每个二进制部分指定一个唯一的 该部件的标识符。引用这些标识符 由请求正文的非二进制部分。name
  • 必须包含二进制部分的属性,该属性表示本地 文件。filename

Content-Type 标头

  • 在多部分请求正文的每个部分中是必需的。
  • 支持 和 内容 多部分请求正文的非二进制部分的类型。application/jsonapplication/xml
  • 支持多部分的二进制部分的任何内容类型 请求正文。

新行必须在标题和数据之间添加一个新行,用于 多部分请求正文。正如您在示例中看到的,一个新行 将 和 标头与 JSON 分开 或二进制数据。Content-TypeContent-Disposition

另见

  • sObject基本信息
  • sObject 行
  • sObject 集合
  • 获取 Blob 数据

获取 Blob 数据

使用 sObject Blob Get 资源获取 给定记录。若要获取 blob 数据,必须存在包含 blob 数据的记录 Salesforce的。

只有某些标准对象具有 blob 字段,例如 Attachment、ContentNote、 ContentVersion、Document、Folder 和 Note。

注意

sObject Blob Get 资源与复合 API 请求不兼容,因为它 返回二进制数据,而不是 JSON 或 XML 格式的数据。相反,请创建单个 sObject Blob 获取检索 blob 数据的请求。

以下示例获取在“插入或更新 Blob 数据”中创建的文档记录的 blob 数据。

从文档记录中检索 blob 数据的示例

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/Document/015D0000000N3ZZIA0/body -H "Authorization: Bearer token"

示例请求正文不需要示例响应正文文档正文内容以二进制形式返回。响应内容类型不是 JSON 或 XML,因为返回的数据是二进制的。您可以将返回的二进制数据保存到一个文件中 存储和访问它。