使用最近查看的信息

本节中的示例使用 REST API 查询和最近查看的资源以编程方式检索和更新最近查看的记录 信息。

  • 查看最近查看的记录
    使用“最近查看的项目”资源可获取最近查看的记录列表。
  • 将记录标记为最近查看
    若要使用 REST API 将记录标记为最近查看,请使用带有 or 子句的 Query 资源。使用 SOQL 将记录标记为最近查看,以确保正确设置了记录的日期和时间等信息。FOR VIEWFOR REFERENCE

查看最近查看的记录

使用“最近查看的项目”资源获取最近查看的记录列表。获取最近查看的两条记录的示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/recent/?limit=2 -H "Authorization: Bearer token"

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

{ 
    "attributes" : 
    { 
        "type" : "Account", 
        "url" : "/services/data/v59.0/sobjects/Account/a06U000000CelH0IAJ" 
    }, 
    "Id" : "a06U000000CelH0IAJ", 
    "Name" : "Acme" 
}, 
{ 
    "attributes" : 
    { 
        "type" : "Opportunity", 
        "url" : "/services/data/v59.0/sobjects/Opportunity/a06U000000CelGvIAJ" 
    }, 
    "Id" : "a06U000000CelGvIAJ", 
    "Name" : "Acme - 600 Widgets" 
}

将记录标记为最近查看

若要使用 REST API 将记录标记为最近查看,请使用带有 or 子句的 Query 资源。使用 SOQL 将记录标记为最近查看,以确保 查看记录的日期和时间等信息正确无误 设置。

FOR VIEWFOR REFERENCE

用于在记录出现以下情况时通知 Salesforce: 从自定义界面(如移动应用程序)或自定义页面查看。在引用记录时使用 自定义界面。每次查看相关记录时,都会引用一条记录。为 有关详细信息,请参阅 SOQL 和 SOSL 参考中的“FOR VIEW”和“FOR REFERENCE”。FOR VIEWFOR REFERENCE执行将一个客户记录标记为 最近浏览

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/query/?q=SELECT+Name+FROM+Account+LIMIT+1+FOR+VIEW -H "Authorization: Bearer token"

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

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

    ]
}

管理用户密码

本节中的示例使用 REST API 资源来管理用户密码,例如 设置或重置密码。

  • 管理用户密码
    使用 sObject 用户密码资源可以设置、重置或获取有关用户密码的信息。使用 HTTP GET 方法获取密码过期状态,使用 HTTP POST 方法设置密码,使用 HTTP DELETE 方法重置密码。

管理用户密码

使用 sObject 用户密码资源设置、重置或获取有关 用户密码。使用 HTTP GET 方法获取密码过期状态,即 HTTP POST 方法设置密码,并使用 HTTP DELETE 方法重置 密码。

关联的会话必须有权访问给定的用户密码 信息。如果会话没有适当的权限,则 HTTP 错误 403 响应 从这些方法返回。

这些方法适用于用户和自助服务用户。用于管理 自助服务用户密码,而不是在 REST API URL 中使用。SelfServiceUserUser

下面是检索用户当前密码过期状态的示例:获取当前密码过期状态的示例用法

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

用于获取当前密码过期状态的示例请求正文不需要用于获取当前密码过期状态的 JSON 示例响应正文

{
    "isExpired" : false
}

用于获取当前密码过期状态的 XML 示例响应正文

<Password>
    <isExpired>false</isExpired>
</Password>

会话权限不足时的错误响应示例

{
    "message" : "You do not have permission to view this record.",
    "errorCode" : "INSUFFICIENT_ACCESS"
}

以下是更改给定用户密码的示例:更改用户密码的示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/User/005D0000001KyEIIA0/password -H "Authorization: Bearer token" —H "Content-Type: application/json" —d @newpwd.json —X POST

文件 newpwd.json 的内容

{
    "NewPassword" : "myNewPassword1234"
}

更改用户密码的示例响应成功更改密码时没有响应正文,HTTP 状态代码 204 返回。新密码不符合组织密码时的错误响应示例 要求

{
    "message" : "Your password must have a mix of letters and numbers.",
    "errorCode" : "INVALID_NEW_PASSWORD"
}

最后,下面是重置用户密码的示例:重置用户密码的示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/User/005D0000001KyEIIA0/password -H "Authorization: Bearer token" —X DELETE

重置用户密码的示例请求正文不需要用于重置用户密码的 JSON 示例响应正文

{
    "NewPassword" : "2sv0xHAuM"
}

用于重置用户密码的 XML 示例响应正文

<Result>
    <NewPassword>2sv0xHAuM</NewPassword>
</Result>

另见

  • sObject 用户密码

使用审批流程和流程规则

本节中的示例使用 REST API 资源来处理审批流程和 流程规则。

  • 获取所有审批流程的列表 使用“流程
    审批”资源获取有关审批的信息。
  • 提交记录以供审批 使用“流程审批”资源提交记录或记录集合以供审
    批。每个调用都接受一组请求。
  • 审批记录 使用“流程审批”资源可以审批记录或记录
    集合。每个调用都接受一组请求。当前用户必须是分配的审批者。
  • 拒绝记录 使用“流程审批”资源拒绝记录或记录
    集合。每个调用都接受一组请求。当前用户必须是分配的审批者。
  • 批量审批
    使用“流程审批”资源进行批量审批。您可以指定不同流程审批请求的集合,以将它们全部批量执行。
  • 获取流程规则列表 使用“流程规则”资源获取有关流程规则
    的信息。
  • 获取特定流程规则 使用“流程规则
    ”资源,并指定要获取其元数据的规则的 和。sObjectNameworkflowRuleId
  • 触发流程规则 使用“流程规则”资源触发流程规则
    。无论评估标准如何,都将评估与指定 ID 关联的所有规则。所有 ID 必须用于同一对象上的记录。

获取所有审批流程的列表

使用“流程审批”资源获取有关审批的信息。示例用法

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

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

{
  "approvals" : {
   "Account" : [ {
     "description" : null,
     "id" : "04aD00000008Py9",
     "name" : "Account Approval Process",
     "object" : "Account",
     "sortOrder" : 1
   } ]
  }
}

提交记录以供审批

使用“流程审批”资源提交记录或记录集合以供审批。每次通话 接受一系列请求。示例用法

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

示例请求正文 submit.json 文件

在以下示例中,提交记录“001D000000I8mIm”以供审批 通过代表提交者跳过其输入标准来处理“PTO_Request_Process” “005D00000015rZy。”

{
"requests" : [{
"actionType": "Submit",
"contextId": "001D000000I8mIm",
"nextApproverIds": ["005D00000015rY9"],
"comments":"this is a test",
"contextActorId": "005D00000015rZy",
"processDefinitionNameOrId" : "PTO_Request_Process",
"skipEntryCriteria": "true"}]
}

示例 JSON 响应正文

[ { 
  "actorIds" : [ "005D00000015rY9IAI" ],
   "entityId" : "001D000000I8mImIAJ",
   "errors" : null,
   "instanceId" : "04gD0000000Cvm5IAC",
   "instanceStatus" : "Pending",
   "newWorkitemIds" : [ "04iD0000000Cw6SIAS" ],
   "success" : true } ]

批准记录

使用“流程审批”资源可以审批记录或记录集合。每次调用都需要一个数组 的请求。当前用户必须是分配的审批者。示例用法

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

示例请求正文 approve.json 文件

{
  "requests" : [{
    "actionType" : "Approve",
    "contextId" : "04iD0000000Cw6SIAS",
    "nextApproverIds" : ["005D00000015rY9"],
    "comments" : "this record is approved"}]
}

示例 JSON 响应正文

[ { 
  "actorIds" : null,
  "entityId" : "001D000000I8mImIAJ",
  "errors" : null,
  "instanceId" : "04gD0000000CvmAIAS",
  "instanceStatus" : "Approved",
  "newWorkitemIds" : [ ],
  "success" : true 
} ]

拒绝记录

使用“流程审批”资源拒绝记录或记录集合。每次调用都需要一个数组 的请求。当前用户必须是分配的审批者。示例用法

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

示例请求正文 reject.json 文件

{
  "requests" : [{
    "actionType" : "Reject",
    "contextId" : "04iD0000000Cw6cIAC",
    "comments" : "This record is rejected."}]
}

示例 JSON 响应正文

[ { 
  "actorIds" : null,
  "entityId" : "001D000000I8mImIAJ",
  "errors" : null,
  "instanceId" : "04gD0000000CvmFIAS",
  "instanceStatus" : "Rejected",
  "newWorkitemIds" : [ ],
  "success" : true 
} ]

批量批准

使用“流程审批”资源执行批量审批。您可以指定不同进程的集合 批准请求将它们全部批量执行。示例用法

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

示例请求正文 bulk.json 文件

{
  "requests" :
  [{
    "actionType" : "Approve",
    "contextId" : "04iD0000000Cw6r",
    "comments" : "approving an account"
    },{
    "actionType" : "Submit",
    "contextId" : "001D000000JRWBd",
    "nextApproverIds" : ["005D00000015rY9"],
    "comments" : "submitting an account"
    },{
    "actionType" : "Submit",
    "contextId" : "003D000000QBZ08",
    "comments" : "submitting a contact"
    }]
}

示例 JSON 响应正文

[ { 
  "actorIds" : null,
  "entityId" : "001D000000I8mImIAJ",
  "errors" : null,
  "instanceId" : "04gD0000000CvmZIAS",
  "instanceStatus" : "Approved",
  "newWorkitemIds" : [ ],
  "success" : true 
  }, {
  "actorIds" : null,
  "entityId" : "003D000000QBZ08IAH",
  "errors" : null,
  "instanceId" : "04gD0000000CvmeIAC",
  "instanceStatus" : "Approved",
  "newWorkitemIds" : [ ],
  "success" : true
  }, {
  "actorIds" : [ "005D00000015rY9IAI" ],
  "entityId" : "001D000000JRWBdIAP",
  "errors" : null,
  "instanceId" : "04gD0000000CvmfIAC",
  "instanceStatus" : "Pending",
  "newWorkitemIds" : [ "04iD0000000Cw6wIAC" ],
  "success" : true
} ]

获取流程规则列表

使用“流程规则”资源获取有关流程规则的信息。示例用法

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

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

{
  "rules" : {
    "Account" : [ {
      "actions" : [ {
        "id" : "01VD0000000D2w7",
        "name" : "ApprovalProcessTask",
        "type" : "Task"
      } ],
      "description" : null,
      "id" : "01QD0000000APli",
      "name" : "My Rule",
      "namespacePrefix" : null,
      "object" : "Account"
    } ]
  }
}

获取特定进程规则

使用“流程规则”资源并指定 和 要获取其元数据的规则。sObjectNameworkflowRuleId示例用法

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/process/rules/Account/01QD0000000APli -H "Authorization: Bearer token"

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

{
  "actions" : [ {
    "id" : "01VD0000000D2w7",
    "name" : "ApprovalProcessTask",
    "type" : "Task"
    } ],
    "description" : null,
    "id" : "01QD0000000APli",
    "name" : "My Rule",
    "namespacePrefix" : null,
    "object" : "Account"
}

触发流程规则

使用“流程规则”资源触发流程规则。与指定 ID 关联的所有规则都将 无论评估标准如何,都要进行评估。所有 ID 必须用于同一记录 对象。示例用法

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

示例请求正文 rules.json 文件

{
  "contextIds" : [
    "001D000000JRWBd",
    "001D000000I8mIm",
    "001D000000I8aaf"]
}

示例 JSON 响应正文

{
  "errors" : null,
  "success" : true
}

使用事件监视

这些示例使用 REST API 事件监视数据,其中包含对 评估组织的使用趋势和用户行为。通过闪电网络访问事件监控 平台 SOAP API 和 REST API,通过 EventLogFile 对象。因此,您可以集成 使用您自己的后端存储和数据集市记录数据,以关联来自多个组织的数据,以及 跨不同的系统。

注意

有关可用于事件监控的受支持事件类型,请参阅 Salesforce 和 Lightning 的对象参考 平台:EventLogFile 对象。

  • 在极少数情况下,如果 24 小时内未生成日志文件, 请联系 Salesforce 客户支持。
  • 日志数据是只读的。您无法插入、更新或删除日志数据。
  • 要确定为您的组织生成了哪些文件,请使用 EventType 字段。
  • 事件实时生成日志数据。但是,每日日志文件会在 事件发生后第二天的非高峰时段。因此,每日日志文件数据为 活动结束后至少 1 天内不可用。对于每小时日志文件,具体取决于事件 交付和最终处理时间,预计事件将在 3-6 小时内发生 日志文件中可用的事件。但是,这可能需要更长的时间。
  • 仅当某一类型的事件(由 EventType 字段表示)在一天或一小时内发生时,才会生成日志文件。如果没有发生任何事件, 不会生成文件。
  • 日志文件在组织中的 CreatedDate后 30 天内可用 具有事件监控许可证,之后将自动删除。在所有开发人员中 版本组织、日志文件的有效期为 1 天。
  • 所有事件监控日志都通过 EventLogFile 对象向 API 公开。但是,除了通过事件之外,无法通过用户界面进行访问 监视 Analytics 应用。
  • 日志文件不计入组织的数据或文件存储分配。
  • 事件监视日志文件不是用户活动的记录系统。他们是一个来源 真相,但它们并不持久。在 Salesforce 站点切换、实例刷新或 可能会发生计划外的系统中断、数据丢失。例如,如果 Salesforce 将 生产组织实例,则事件日志文件中可能存在数据缺口。Salesforce 使 为保持事件日志文件数据完整性和避免数据而做出的商业合理努力 损失。当 Salesforce 执行站点切换或实例刷新时,它使用自动 复制事件日志的进程。
  • 提供每小时一次的事件日志文件,供您在 加速基础。但是,您可能无法每小时获取所有事件日志数据 事件日志文件,尤其是在站点切换、实例刷新或计划外系统期间 中断。要获得完整数据,请使用每日日志文件。
  • 如果事件传输失败需要很长时间才能从中恢复,则会重新传输日志文件 以确保它们至少交付一次。因此,潜在日志文件可以 有时包含重复的事件数据。当应用程序使用潜在日志文件时, 确保您的应用程序处理重复的事件传递。
  • 交付每日增量日志文件时,新文件会将原始文件替换为 该日期的完整可用日志集。为了确保您看到的最多 最近的日志文件,请选中 CreatedDate 字段。
  • 我们建议您始终查询 EventLogFile 对象以获取新的日志文件,以确保 你也包括潜在的。若要标识新创建的日志文件,请使用 EventLogFile CreatedDate 字段。每小时和每天的增量日志下发 不同。有关详细信息,请参阅每小时和 24 小时事件日志之间的差异。

本部分中的所有查询和示例都需要启用 View 事件日志文件和 API 用户权限。具有“查看所有数据”权限的用户还可以查看事件监控 数据。

  • 使用 REST
    描述事件监视 使用 sObject Describe 资源检索对象的所有元数据,包括有关字段、URL 和子关系的信息。
  • 使用 REST
    查询事件监视数据 使用 Query 资源从记录中检索字段值。在 fields 参数中指定要检索的字段,并使用资源的方法。GET
  • 从记录
    中获取事件监视内容 使用 sObject Blob Retrieve 资源检索给定记录的 BLOB 数据。
  • 将 cURL 与 REST
    结合使用下载大型事件日志文件 您可能有一些事件日志文件大于工具可以处理的范围。命令行工具(如 cURL)是使用 sObject Blob Get 对象下载大于 100 MB 的文件的一种方法
  • 删除事件监视数据 可以删除包含用户日志数据
    的事件日志文件。删除日志文件有助于您遵守数据保护和隐私法规,并控制其他人可以访问的信息。不能从事件日志中删除单个行。相反,您必须删除包含用户活动的整个日志文件。
  • 查询或查看每小时事件日志文件
    若要加速查看组织中的事件,请以每小时为增量获取最近活动的事件日志文件。每小时一次的事件日志文件可以让你更快地了解安全异常和自定义代码性能问题。

描述使用 REST 进行事件监视

使用 sObject Describe 资源检索对象的所有元数据,包括有关字段的信息。 URL 和子关系。例可以使用 REST API 来描述事件日志文件。使用 GET 请求,例如 这:

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

原始响应示例

{ 
   "actionOverrides" : [ ],
   "activateable" : false,
   "childRelationships" : [ ],
   "compactLayoutable" : false,
   "createable" : false,
   "custom" : false,
   "customSetting" : false,
   "deletable" : false,
   "deprecatedAndHidden" : false,
   "feedEnabled" : false,
   "fields" : [ {
     "autoNumber" : false,
     "byteLength" : 18,
     "calculated" : false,
     "calculatedFormula" : null,
     "cascadeDelete" : false,
     "caseSensitive" : false,
     "controllerName" : null,
     "createable" : false,
     ...
}

使用 REST 查询事件监控数据

使用查询资源 从记录中检索字段值。指定要在 fields 参数并使用 资源。

GET您可以使用 REST API 查询事件监控数据。检索事件监视记录 根据 LogDate 和 EventType,使用 GET 像这样请求:

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/query?q=SELECT+Id+,+EventType+,+LogFile+
,+LogDate+,+LogFileLength+FROM+EventLogFile+WHERE+
LogDate+>+Yesterday+AND+EventType+=+'API' -H "Authorization: Bearer token"

原始响应示例

{ 
   "totalSize" : 4,
   "done" : true,
   "records" : [ {
     "attributes" : {
       "type" : "EventLogFile",
       "url" : "/services/data/v59.0/sobjects/EventLogFile/0ATD000000001bROAQ"     }
     "Id" : "0ATD000000001bROAQ",
     "EventType" : "API",
     "LogFile" : "/services/data/v59.0/sobjects/EventLogFile/0ATD000000001bROAQ/LogFile",
     "LogDate" : "2014-03-14T00:00:00.000+0000",
     "LogFileLength" : 2692.0
    }, {
     "attributes" : {
       "type" : "EventLogFile",
       "url" : "/services/data/v59.0/sobjects/EventLogFile/0ATD000000001SdOAI"     },
       "Id" : "0ATD000000001SdOAI",
       "EventType" : "API",
       "LogFile" : "/services/data/v59.0/sobjects/EventLogFile/0ATD000000001SdOAI/LogFile",
       "LogDate" : "2014-03-13T00:00:00.000+0000",
       "LogFileLength" : 1345.0
   }, {
       "attributes" : {
        "type" : "EventLogFile",
        "url" : "/services/data/v59.0/sobjects/EventLogFile/0ATD000000003p1OAA"     },
        "Id" : "0ATD000000003p1OAA",
        "EventType" : "API",
        "LogFile" : "/services/data/v59.0/sobjects/EventLogFile/0ATD000000003p1OAA/LogFile",
        "LogDate" : "2014-06-21T00:00:00.000+0000",
        "LogFileLength" : 605.0   },
 {     "attributes" : {
       "type" : "EventLogFile",
       "url" : "/services/data/v59.0/sobjects/EventLogFile/0ATD0000000055eOAA"     },
       "Id" : "0ATD0000000055eOAA",
       "EventType" : "API",
       "LogFile" : "/services/data/v59.0/sobjects/EventLogFile/0ATD0000000055eOAA/LogFile",
       "LogDate" : "2014-07-03T00:00:00.000+0000",
       "LogFileLength" : 605.0
     } ]
}

从记录中获取事件监视内容

使用 sObject Blob 检索资源以检索给定记录的 BLOB 数据。例可以使用 REST API 检索 BLOB 数据以进行事件监视。使用 GET 与此类似的请求:

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

示例响应正文事件监视内容以二进制形式返回。请注意,响应 内容类型不会是 JSON 或 XML,因为返回的数据是 二元的。

HTTP/1.1 200 OK
Date: Tue, 06 Aug 2013 16:46:10 GMT
Sforce-Limit-Info: api-usage=135/5000
Content-Type: application/octetstream
Transfer-Encoding: chunked
"EVENT_TYPE", "ORGANIZATION_ID", "TIMESTAMP","USER_ID", "CLIENT_IP",
"URI", "REFERRER_URI", "RUN_TIME"
"URI", "00DD0000000K5xD", "20130728185606.020", "005D0000001REDy",
"10.0.62.141", "/secur/contentDoor", "https-//login-salesforce-com/",
"11"
"URI", "00DD0000000K5xD", "20130728185556.930", "005D0000001REI0",
"10.0.62.141", "/secur/logout.jsp", "https-//MyDomainName-my-salesforce-com/00O/o",
"54"
"URI", "00DD0000000K5xD", "20130728185536.725", "005D0000001REI0",
"10.0.62.141", "/00OD0000001ckx3",
"https-//MyDomainName-my-salesforce-com/00OD0000001ckx3", "93"

使用带有 REST 的 cURL 下载大型事件日志文件

您可能有一些事件日志文件大于工具可以处理的范围。一个 命令行工具(如 cURL)是下载大于 100 MB 的文件的一种方法,使用 sObject Blob Get 对象示例:使用“X-PrettyPrint”标头和“-o”标志输出大文件 转换为.csv格式此命令将文件下载到计算机上的下载文件夹中。

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/EventLogFile/0AT30000000000uGAA/LogFile
-H "Authorization: Bearer token" -H "X-PrettyPrint:1" -o ~/downloads/outputLogFile.csv

建议在下载大型事件日志文件时使用压缩。请参阅压缩标头。

删除事件监控数据

您可以删除包含用户日志数据的事件日志文件。删除日志文件 帮助您遵守数据保护和隐私法规并控制信息 其他人可以访问。不能从事件日志中删除单个行。相反,您必须 删除包含用户活动的整个日志文件。若要删除事件日志文件,请在安装程序中启用删除,并创建一个权限集 包括“删除事件监控记录”用户权限,并分配此权限 权限集。(或者,您可以将用户权限分配给 自定义配置文件。然后,这些用户可以通过以下方式查询和删除 EventLogFile 记录 在REST或SOAP中使用查询和删除资源。

delete()

注意

您无法从事件中删除单个行 原木。由于事件日志以 blob 格式存储在数据库中,因此必须 删除包含用户活动的整个日志文件。

  1. 在“设置”的“快速查找”框中,输入“事件”,然后 选择事件监控设置
  2. 启用删除事件监视数据。此操作记录在安装程序中 审计跟踪。“删除事件监控记录”用户权限现在可用于 分配给权限集。(或者,您可以分配用户权限 添加到自定义配置文件。
  3. 在“设置”的“快速查找”框中,输入“权限”,然后 ,然后选择“权限集”。
  4. 创建包含“删除事件监视记录”用户的权限集 权限,然后保存权限集。
  5. 在“设置”的“快速查找”框中,输入用户,然后 选择“用户”。
  6. 选择要授予删除事件监控权限的用户 数据。
  7. 在此用户的“权限集分配”部分中,分配权限 设置,然后单击保存。此操作记录在安装程序中 审计跟踪。分配了此权限集(或任何自定义配置文件,包括 删除事件监控记录用户权限)现在可以删除事件 监控数据。后续步骤将介绍如何使用 API 删除 数据。
  8. 若要查找包含要删除的用户活动的日志,请查询 EventLogFile 对象。有关详细信息,请参阅查询事件监控数据 休息。
  9. 记下返回日志的 ID。
  10. 使用 sObject Rows 资源删除记录。指定记录 ID,并使用 DELETE 方法。有关详细信息,请参阅删除 记录。

查询或查看每小时事件日志文件

若要加速查看组织中的事件,请每小时获取一次事件日志文件 最近活动的增量。每小时事件日志文件可让您更快地了解 安全异常和自定义代码性能问题。

用户权限 需要
要访问 API 和查询日志文件,请执行以下操作:启用 API 并查看事件日志文件
要查看事件日志文件,请执行以下操作:查看所有数据

例子

假设你是一名安全分析师,负责监视异常用户行为。通过拉动更多 频繁更新您的安全系统,您可以收到可疑事件的警报 在几个小时内发生,而不是一两天后。

在另一个示例中,假设您是一名开发人员。您已经确定了一系列 Apex 组织中的失败,并且您希望主动重构 Apex 代码以改进 性能。您可以查看每小时的日志文件,以查明问题并修复您的代码 数小时后,您的最终用户才开始抱怨性能不佳。

考虑

  • 每小时事件日志文件与事件监控分析应用程序的集成是 不能利用的。
  • 根据事件传递和最终处理时间,事件应 从事件发生开始需要三到六个小时才能在日志中显示 文件。但是,这可能需要更长的时间。
  • 当处理出现延迟且特定小时的事件日志到达时 稍后,将为事件/日期/小时创建一个新的日志文件,并仅列出 新事件。使用创建日期和增量序列号 标识新的日志文件。始终使用最近处理的事件日志 特定日期的文件。但是,如果事件日志文件已经 拉入第三方应用程序时,它们可能需要在 该应用程序。如果同时启用了每小时日志和每日日志,则每日日志始终具有序列 数字为 0,因为每个每日间隔只有一个文件。创建日期 指示文件的生成时间。如果 CreatedDate 在最后一个之后 事件日志文件下载时,有新事件需要处理。有关最佳做法,请在 WHERE 子句中使用 CreatedDate 来选择日志 在上次下载的事件日志文件之后创建。例如,如果最后一个 下载的文件是在 2018 年 2 月 1 日中午 12 点,要查找下一个日志文件,请使用 +CreatedDate+>+“2018-02-01T12:00:00Z”。
  • 在站点切换、实例刷新或 计划外系统中断。但是,在站点切换和实例刷新期间, Salesforce 通过以下方式做出商业上合理的努力来避免此类数据丢失 使用自动化过程复制事件日志。
  • 如果 24 小时内未生成日志文件,请联系 Salesforce 支持。
  • 查询每小时事件日志文件 查询每小时事件日志文件的方式与查询 24 小时日志文件
    的方式相同。
  • 每小时事件日志和 24 小时事件日志
    之间的差异 除了 24 小时日志文件外,您大约每小时都会收到一次事件日志文件。查看两个日志之间的差异,以便可以筛选文件以分析所需的事件数据。

查询每小时事件日志文件

查询每小时事件日志文件的方式与查询 24 小时日志的方式相同 文件。

假设您是管理员。您的首席安全官要求您确定谁 修改了过去两个小时内的特定客户和商机。您查询每小时 使用 EventLogFile 对象查看页面请求的 URI 事件日志文件,以及 请求状态。由于 EventLogFile 还返回 24 小时日志文件,因此请使用此 SOQL 语法来筛选出 24 小时日志文件。

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/query?​q=SELECT+Id+,​+EventType+,​+Interval+,+LogDate+,​+LogFile+​FROM+EventLogFile+​WHERE+EventType+=+'URI'+​AND+Interval+=+'Hourly' -H "Authorization: Bearer token"

在查询中,确保仅 每小时返回一次事件日志文件数据。或者,可以使用 Sequence 筛选出 24 小时事件日志文件 ()。若要同时获取每小时和 24 小时文件,请使用 .Interval=HourlySequence!=0Sequence>=0

如果您的沙盒组织具有 URI 事件,您会在查询结果中看到日志文件记录。您可以 此外,下载事件日志文件以查看 CSV 文件中的数据。查看更多 信息,请参阅 Trailhead:下载和 可视化事件日志文件

每小时和 24 小时事件日志之间的差异

除了 24 小时日志文件外,您大约每小时都会收到一次事件日志文件。 查看两个日志之间的差异,以便可以筛选文件以分析事件 您想要的数据。

每小时日志文件24小时日志文件
为每小时的活动生成一个或多个文件。每 24 小时活动生成一个文件。
在 API 中可用。您可以手动将数据导入第三方可视化 应用程序。在 API 中可用,并与 Event Monitoring Analytics 应用程序集成,以及 第三方可视化应用程序。
EventLogFile 对象中的关键值为:间隔 – 每小时CreatedDate – 创建日志文件的时间戳。 使用此字段标识新文件。LogDate – 时间戳,用于标记以下时间间隔的开始时间 事件发生了。例如,对于上午 11:00 到中午 12:00 之间发生的事件 在 2016 年 3 月 7 日,此字段的值为 2016-03-07T11:00:00.000Z。序列 (Sequence) – 1+。当事件添加到 创建最新事件日志文件后的同一小时。该值在 随后的一小时。另请参阅有关每小时事件日志的这些注意事项。EventLogFile 对象中的关键值为:间隔 – 每天CreatedDate – 创建日志文件的时间戳。 使用此字段标识新文件。LogDate – 时间戳,用于标记以下时间间隔的开始时间 事件发生了。例如,对于 2016 年 3 月 7 日发生的事件,此字段的 值为 2016-03-07T00:00:00.000+0000。序列 (Sequence) – 0
当传送每小时增量日志文件时,包含该小时新日志的文件 已创建。对于每个新文件,“序列”字段都会递增。当交付每日增量日志文件时,一个新文件将替换原始文件 以及该日期的完整可用日志集。“CreatedDate”字段已更新。

注意

与 24 小时事件监控一样,过去 30 年的每小时事件日志数据可用 日。

使用复合资源

本节中的示例使用复合资源来改进应用程序的 通过最小化客户端和服务器之间的往返次数来提高性能。

  • 在单个 API 调用中执行依赖请求 以下示例使用 Composite 资源在单个调用
    中执行多个依赖请求。首先,它创建一个帐户并检索其信息。接下来,它使用客户数据和复合资源的引用 ID 功能来创建联系人,并根据客户数据填充其字段。然后,它使用请求字符串中的查询参数检索有关帐户所有者的特定信息。最后,如果元数据自特定日期以来已被修改,则检索帐户元数据。composite.json 文件包含复合请求和子请求数据。
  • 更新客户,创建联系人,并将其与联结对象
    链接 下面的示例使用 Composite 资源更新客户的某些字段,创建联系人,并将这两条记录与名为 .所有这些请求都在一次调用中执行。composite.json 文件包含复合请求和子请求数据。AccountContactJunction
  • 在单个请求中更新记录并获取其字段值 使用复合批处理资源在单个 API 调用中执行多个请求。
  • 更新插入帐户并创建联系人
    以下示例使用 Composite 资源更新插入客户并创建链接到该客户的联系人。所有这些请求都在一次调用中执行。composite.json 文件包含复合请求和子请求数据。
  • 创建嵌套记录
    使用 sObject Tree 资源创建共享根记录类型的嵌套记录。例如,在单个请求中,您可以创建一个帐户及其子联系人,并创建一个第二个帐户及其子帐户和联系人。处理请求后,将创建记录,并通过 ID 自动链接父子。在请求数据中,提供记录层次结构、必填字段值和可选字段值、每条记录的类型以及每条记录的引用 ID,然后使用资源的 POST 方法。如果请求成功,响应正文将包含所创建记录的 ID。否则,响应仅包含导致错误的记录的引用 ID 和错误信息。
  • 创建多条记录 虽然资源可用于创建嵌套记录,但您也可以创建多个相同类型的不相关记录
    。在单个请求中,您最多可以创建 200 条记录。在请求数据中,为每条记录提供必填字段值和可选字段值、每条记录的类型以及每条记录的引用 ID,然后使用资源的 POST 方法。如果请求成功,响应正文将包含所创建记录的 ID。否则,响应仅包含导致错误的记录的引用 ID 和错误信息。
  • 使用复合图 复合图
    提供了一种执行复合请求的增强方法,复合请求在单个调用中执行一系列 REST API 请求。
  • 使用复合图 此示例演示如何使用复合图
    。它还演示了一个请求如何使用多个复合图。
  • 复合请求和集合请求
    中的 allOrNone 参数 如果复合请求使用 sObject 集合,则有两个或多个参数可以交互,一个在复合请求上,一个在各个 sObject 集合子请求上。allOrNone

在单个 API 调用中执行依赖请求

以下示例使用 Composite 资源执行多个依赖 在一次调用中完成所有请求。首先,它创建一个帐户并检索其信息。 接下来,它使用帐户数据和复合资源的引用 ID 功能来 创建联系人并根据客户数据填充其字段。然后它检索 在请求中使用查询参数提供有关帐户所有者的特定信息 字符串。最后,如果元数据自特定日期以来被修改,它将检索 帐户元数据。composite.json 文件包含复合 请求和子请求数据。在单个 API 调用中执行依赖请求

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

请求正文 composite.json 文件

{
    "allOrNone" : true,
    "compositeRequest" : [{
        "method" : "POST",
        "url" : "/services/data/v59.0/sobjects/Account",
        "referenceId" : "NewAccount",
        "body" : {  
            "Name" : "Salesforce",
            "BillingStreet" : "Landmark @ 1 Market Street",
            "BillingCity" : "San Francisco",
            "BillingState" : "California",
             "Industry" : "Technology"
        }
    },{
        "method" : "GET",
        "referenceId" : "NewAccountInfo",
        "url" : "/services/data/v59.0/sobjects/Account/@{NewAccount.id}"
    },{
        "method" : "POST",
        "referenceId" : "NewContact",
        "url" : "/services/data/v59.0/sobjects/Contact",
        "body" : {  
            "lastname" : "John Doe",
            "Title" : "CTO of @{NewAccountInfo.Name}",
            "MailingStreet" : "@{NewAccountInfo.BillingStreet}",
            "MailingCity" : "@{NewAccountInfo.BillingAddress.city}",
            "MailingState" : "@{NewAccountInfo.BillingState}",
            "AccountId" : "@{NewAccountInfo.Id}",
            "Email" : "jdoe@salesforce.com",
            "Phone" : "1234567890"
        }
    },{
        "method" : "GET",
        "referenceId" : "NewAccountOwner",
        "url" : "/services/data/v59.0/sobjects/User/@{NewAccountInfo.OwnerId}?fields=Name,companyName,Title,City,State"
    },{
        "method" : "GET",
        "referenceId" : "AccountMetadata",
        "url" : "/services/data/v59.0/sobjects/Account/describe",
        "httpHeaders" : {
            "If-Modified-Since" : "Tue, 31 May 2016 18:13:37 GMT"
        }
    }]
}

成功执行复合请求后的响应正文

{
    "compositeResponse" : [{
        "body" : {
            "id" : "001R00000033JNuIAM",
            "success" : true,
            "errors" : [ ]
        },
        "httpHeaders" : {
          "Location" : "/services/data/v59.0/sobjects/Account/001R00000033JNuIAM"
        },
        "httpStatusCode" : 201,
        "referenceId" : "NewAccount"
    },{
        "body" : {
            all the account data
        },
        "httpHeaders" : {
            "ETag" : "\"Jbjuzw7dbhaEG3fd90kJbx6A0ow=\"",
            "Last-Modified" : "Fri, 22 Jul 2016 20:19:37 GMT"
        },
        "httpStatusCode" : 200,
        "referenceId" : "NewAccountInfo"
    },{
        "body" : {
            "id" : "003R00000025REHIA2",
            "success" : true,
            "errors" : [ ]
        },
        "httpHeaders" : {
            "Location" : "/services/data/v59.0/sobjects/Contact/003R00000025REHIA2"
        },
        "httpStatusCode" : 201,
        "referenceId" : "NewContact"
    },{
        "body" : {
            "attributes" : {
            "type" : "User",
            "url" : "/services/data/v59.0/sobjects/User/005R0000000I90CIAS"
            },
            "Name" : "Jane Doe",
            "CompanyName" : "Salesforce",
            "Title" : Director,
            "City" : "San Francisco",
            "State" : "CA",
            "Id" : "005R0000000I90CIAS"
        },
        "httpHeaders" : { },
        "httpStatusCode" : 200,
        "referenceId" : "NewAccountOwner"
    },{
        "body" : null,
        "httpHeaders" : {
            "ETag" : "\"f2293620\"",
            "Last-Modified" : "Fri, 22 Jul 2016 18:45:56 GMT"
         },
        "httpStatusCode" : 304,
        "referenceId" : "AccountMetadata"
    }]
}

更新帐户,创建联系人,并将其与联结链接 对象

以下示例使用 Composite 资源更新 帐户,创建联系人,并将这两条记录与名为 的联结对象链接。所有这些请求都在 一个电话。composite.json 文件包含复合请求 和子请求数据。

AccountContactJunction更新帐户,创建联系人,并将其与联结对象链接

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

请求正文 composite.json 文件

{
    "allOrNone" : true,
    "compositeRequest" : [{
        "method" : "PATCH",
        "url" : "/services/data/v59.0/sobjects/Account/001xx000003DIpcAAG",
        "referenceId" : "UpdatedAccount",
        "body" : {  
            "Name" : "Salesforce",
            "BillingStreet" : "Landmark @ 1 Market Street",
            "BillingCity" : "San Francisco",
            "BillingState" : "California",
            "Industry" : "Technology"
        }
    },{
        "method" : "POST",
        "referenceId" : "NewContact",
        "url" : "/services/data/v59.0/sobjects/Contact/",
        "body" : {  
            "lastname" : "John Doe",
            "Phone" : "1234567890"
        }
    },{
        "method" : "POST",
        "referenceId" : "JunctionRecord",
        "url" : "/services/data/v59.0/sobjects/AccountContactJunction__c",
        "body" : {  
            "accountId__c" : "001xx000003DIpcAAG",
            "contactId__c" : "@{NewContact.id}"
        }
    }]
}

成功执行复合请求后的响应正文

{
  "compositeResponse" : [{
    "body" : null,
    "httpHeaders" : { },
    "httpStatusCode" : 204,
    "referenceId" : "UpdatedAccount"
  }, {
    "body" : {
      "id" : "003R00000025R22IAE",
      "success" : true,
      "errors" : [ ]
    },
    "httpHeaders" : {
      "Location" : "/services/data/v59.0/sobjects/Contact/003R00000025R22IAE"
    },
    "httpStatusCode" : 201,
    "referenceId" : "NewContact"
  }, {
    "body" : {
      "id" : "a00R0000000iN4gIAE",
      "success" : true,
      "errors" : [ ]
    },
    "httpHeaders" : {
      "Location" : "/services/data/v59.0/sobjects/AccountContactJunction__c/a00R0000000iN4gIAE"
    },
    "httpStatusCode" : 201,
    "referenceId" : "JunctionRecord"
  }]
}

更新记录并在单个中获取其字段值 请求

使用复合批处理资源在单个 API 中执行多个请求 叫。

以下示例更新帐户的名称并获取该帐户的一些字段 单个请求中的值。batch.json 文件包含 子请求数据。更新记录并在单个中查询其名称和帐单邮政编码 请求

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

请求正文 batch.json 文件

{
"batchRequests" : [
    {
    "method" : "PATCH",
    "url" : "v59.0/sobjects/account/001D000000K0fXOIAZ",
    "richInput" : {"Name" : "NewName"}
    },{
    "method" : "GET",
    "url" : "v59.0/sobjects/account/001D000000K0fXOIAZ?fields=Name,BillingPostalCode"
    }]
}

成功执行子请求后的响应正文

{
   "hasErrors" : false,
   "results" : [{
      "statusCode" : 204,
      "result" : null
      },{
      "statusCode" : 200,
      "result": {
         "attributes" : {
            "type" : "Account",
            "url" : "/services/data/v59.0/sobjects/Account/001D000000K0fXOIAZ"
         },
         "Name" : "NewName",
         "BillingPostalCode" : "94105",
         "Id" : "001D000000K0fXOIAZ"
      }
   }]
}

另见

  • 复合批次

更新插入帐户并创建联系人

以下示例使用 Composite 资源更新插入帐户并创建一个 链接到该帐户的联系人。所有这些请求都在一次调用中执行。composite.json 文件包含复合请求和子请求 数据。更新插入帐户并创建联系人

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

请求正文 composite.json 文件

{
    "allOrNone" : true,
    "compositeRequest": [{
        "method": "PATCH",
        "url": "/services/data/v59.0/sobjects/Account/ExternalAcctId__c/ID12345",
        "referenceId": "NewAccount",
        "body": {
            "Name": "Acme"
        }
    },{
        "method" : "POST",
        "url" : "/services/data/v59.0/sobjects/Contact",
        "referenceId" : "newContact",
        "body" : {
            "LastName" : "Harrison",
            "AccountId" : "@{NewAccount.id}"
        }
    }]
}

成功执行复合请求后的响应正文

{
    "compositeResponse" : [{
        "body" : {
            "id" : "0016g00000Wqu1EAAR",
            "success" : true,
            "errors" : [ ],
            "created" : true
        },
        "httpHeaders" : {
            "Location" : "/services/data/v59.0/sobjects/Account/0016g00000Wqu1EAAR"
        },
        "httpStatusCode" : 201,
        "referenceId" : "NewAccount"
    },{
        "body" : {
            "id" : "0036g00000WKnfLAAT",
            "success" : true,
            "errors" : [ ]
        },
        "httpHeaders" : {
            "Location" : "/services/data/v59.0/sobjects/Contact/0036g00000WKnfLAAT"
        },
        "httpStatusCode" : 201,
        "referenceId" : "newContact"
    }]
}

另见

  • 按外部 ID 划分的 sObject 行

创建嵌套记录

使用 sObject 树资源创建共享根记录类型的嵌套记录。 例如,在单个请求中,您可以创建一个帐户及其子联系人, 第二个帐户及其子帐户和联系人。一旦请求 处理后,将创建记录,并通过 ID 自动链接父子。 在请求数据中,您提供记录层次结构、必填字段和可选字段值, 每条记录的类型,以及每条记录的引用 ID,然后使用 资源。如果请求是 成功的。否则,响应仅包含导致 错误和错误信息。

下面的示例创建两组嵌套记录。第一组包括一个 帐户和两个子项联系记录。第二组包括一个帐户,一个子 客户记录和 1 个子联系人记录。记录数据在 newrecords.json 中提供。创建两个新帐户及其子记录的示例

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/composite/tree/Account/ -H "Authorization: Bearer token -H "Content-Type: application/json" -d "@newrecords.json"

用于创建两个请求正文 newrecords.json 文件的示例 新帐户及其子记录

{
"records" :[{
    "attributes" : {"type" : "Account", "referenceId" : "ref1"},
    "name" : "SampleAccount1",
    "phone" : "1234567890",
    "website" : "www.salesforce.com",
    "numberOfEmployees" : "100",
    "industry" : "Banking",
    "Contacts" : {
      "records" : [{
         "attributes" : {"type" : "Contact", "referenceId" : "ref2"},
         "lastname" : "Smith",
         "Title" : "President",
         "email" : "sample@salesforce.com"
         },{
         "attributes" : {"type" : "Contact", "referenceId" : "ref3"},
         "lastname" : "Evans",
         "title" : "Vice President",
         "email" : "sample@salesforce.com"
         }]
      }
    },{
    "attributes" : {"type" : "Account", "referenceId" : "ref4"},
    "name" : "SampleAccount2",
    "phone" : "1234567890",
    "website" : "www.salesforce.com",
    "numberOfEmployees" : "52000",
    "industry" : "Banking",
    "childAccounts" : {
      "records" : [{
        "attributes" : {"type" : "Account", "referenceId" : "ref5"},
        "name" : "SampleChildAccount1",
        "phone" : "1234567890",
        "website" : "www.salesforce.com",
        "numberOfEmployees" : "100",
        "industry" : "Banking"
        }]
      },
    "Contacts" : {
      "records" : [{
        "attributes" : {"type" : "Contact", "referenceId" : "ref6"},
        "lastname" : "Jones",
        "title" : "President",
        "email" : "sample@salesforce.com"
        }]
      }
  }]
}

成功创建记录和关系后的示例响应正文

{
    "hasErrors" : false,
    "results" : [{
     "referenceId" : "ref1",
     "id" : "001D000000K0fXOIAZ"
     },{
     "referenceId" : "ref4",
     "id" : "001D000000K0fXPIAZ"
     },{
     "referenceId" : "ref2",
     "id" : "003D000000QV9n2IAD"
     },{
     "referenceId" : "ref3",
     "id" : "003D000000QV9n3IAD"
     },{
     "referenceId" : "ref5",
     "id" : "001D000000K0fXQIAZ"
     },{
     "referenceId" : "ref6",
     "id" : "003D000000QV9n4IAD"
     }]
}

处理请求后,将使用父子项创建所有六条记录 请求中指定的关系。

另见

  • sObject 树

创建多条记录

虽然该资源可用于创建嵌套记录,但您可以 此外,创建多个相同类型的不相关记录。在单个请求中,您可以 创建多达 200 条记录。在请求数据中,提供必需和可选 每条记录的字段值、每条记录的类型以及每条记录的引用 ID,以及 然后使用资源的 POST 方法。响应正文将包含 如果请求成功,则创建记录。否则,响应仅包含 导致错误的记录的引用 ID 和错误信息。

以下示例创建四个新帐户。记录数据在 newrecords.json 中提供。创建四个新帐户的示例

curl https://MyDomainName.my.salesforce.com/services/data/v59.0/composite/tree/Account/ -H "Authorization: Bearer token -H "Content-Type: application/json" -d "@newrecords.json"

用于创建四个的请求正文 newrecords.json 文件示例 新账户

{
"records" :[{
    "attributes" : {"type" : "Account", "referenceId" : "ref1"},
    "name" : "SampleAccount1",
    "phone" : "1111111111",
    "website" : "www.salesforce.com",
    "numberOfEmployees" : "100",
    "industry" : "Banking"   
    },{
    "attributes" : {"type" : "Account", "referenceId" : "ref2"},
    "name" : "SampleAccount2",
    "phone" : "2222222222",
    "website" : "www.salesforce2.com",
    "numberOfEmployees" : "250",
    "industry" : "Banking"
    },{
    "attributes" : {"type" : "Account", "referenceId" : "ref3"},
    "name" : "SampleAccount3",
    "phone" : "3333333333",
    "website" : "www.salesforce3.com",
    "numberOfEmployees" : "52000",
    "industry" : "Banking"
    },{
    "attributes" : {"type" : "Account", "referenceId" : "ref4"},
    "name" : "SampleAccount4",
    "phone" : "4444444444",
    "website" : "www.salesforce4.com",
    "numberOfEmployees" : "2500",
    "industry" : "Banking"
    }]
}

成功创建记录后的示例响应正文

{
    "hasErrors" : false,
    "results" : [{
     "referenceId" : "ref1",
     "id" : "001D000000K1YFjIAN"
     },{
     "referenceId" : "ref2",
     "id" : "001D000000K1YFkIAN"
     },{
     "referenceId" : "ref3",
     "id" : "001D000000K1YFlIAN"
     },{
     "referenceId" : "ref4",
     "id" : "001D000000K1YFmIAN"     
     }]
}

另见

  • sObject 树

使用复合图

复合图提供了一种增强的方法来执行复合请求,这些请求执行 单个调用中的一系列 REST API 请求。

  • 常规复合请求允许您执行一系列 REST API 单个调用中的请求。您可以将一个请求的输出用作 输入到后续请求中。
  • 复合图扩展了常规的复合请求,允许您将 复杂而完整的一系列相关对象和记录。
  • 复合图还使您能够确保一组给定请求中的步骤是 要么全部完成,要么全部未完成。如果使用此选项,则不会 必须检查哪些请求成功。
  • 常规复合请求的子请求限制为 25 个。复合图增加了这一点 限制为 500。

定义复合图

通常,图形是连接节点的集合。

在复合的背景下 图操作,节点是复合子请求。例如,节点可以是 像这样复合子请求:

{
    "url" : "/services/data/v59.0/sobjects/Account/",
    "body" : {
        "name" : "Cloudy Consulting"
    },
    "method" : "POST",
    "referenceId" : "reference_id_account_1"
}

每个节点都有一个端点,表示 记录。

复合图形请求仅支持这些 URL。

网址支持的 HTTP 方法
/services/data/vXX.X/sobjects/sObject发布请参阅 sObject Basic 信息。
/services/data/vXX.X/sobjects/sObject/id删除、获取、修补请参见sObject 行。
/services/data/vXX.X/sobjects/sObject/customFieldName/externalId删除、获取、修补、发布请参见按外部 ID 划分的 sObject 行。

复合图可以定向,这意味着某些节点使用 来自其他节点的信息。例如,创建联系人的节点可以使用 用于将联系人与客户链接的 Account 节点的 ID。

为 例:

{
   "graphs": [{
      "graphId": "graph1",
      "compositeRequest": [{
            "body": {
               "name": "Cloudy Consulting"
            },
            "method": "POST",
            "referenceId": "reference_id_account_1",
            "url": "/services/data/v59.0/sobjects/Account/"
         },
         {
            "body": {
               "FirstName": "Nellie",
               "LastName": "Cashman",
               "AccountId": "@{reference_id_account_1.id}"
            },
            "method": "POST",
            "referenceId": "reference_id_contact_1",
            "url": "/services/data/v59.0/sobjects/Contact/"
         }
      ]
   }]
}

在 JSON 中定义复合图

复合图定义在 JSON是这样的:

{
    "graphId" : "graphId",
    graph
}

换句话说,像这样,每个都是复合子请求:

compositeSubrequest

{
    "graphId" : "graphId",
    "compositeRequest" : [
        compositeSubrequest,
        compositeSubrequest,
        ...
    ]
}

这些参数使您能够在查看响应时识别图形。他们需要 不能是数字,但它们必须遵循以下限制:

graphId

  • 它们在每个复合图操作中必须是唯一的。
  • 它们必须以字母数字字符开头。
  • 它们的长度必须少于 40 个字符。
  • 它们不能包含句点 (’.’)。

单个复合图请求可以使用一个或多个复合图。 请参阅使用复合图。

示例:创建客户、联系人、市场活动、商机、潜在顾客和 具有复合图请求的 CampaignMembers

此示例显示了执行以下操作的复合图:

  1. 创建帐户 1.
  2. 创建账户 2 作为账户 1 的子项。
  3. 创造:
    1. 联系人 1,链接到帐户 2。
    2. 联系人 2,向联系人 1 报告。
    3. 向联系人 2 报告的联系人 3。
  4. 创建广告系列。
  5. 创建一个链接到客户 2 和营销活动的机会。
  6. 创建潜在客户。
  7. 创建链接到潜在客户和营销活动的 CampaignMember。

此图的 JSON 为:

{
   "graphId" : "1",
   "compositeRequest" : [
      {
         "url" : "/services/data/v59.0/sobjects/Account/",
         "body" : {
           "name" : "Cloudy Consulting",
           "description" : "Parent account"
         },
         "method" : "POST",
         "referenceId" : "reference_id_account_1"
      },
      {
         "url" : "/services/data/v59.0/sobjects/Account/",
         "body" : {
           "name" : "Easy Spaces",
           "description" : "Child account",
          ."ParentId" : "@{reference_id_account_1.id}"
         },
         "method" : "POST",
         "referenceId" : "reference_id_account_2"
      },
      {
         "url" : "/services/data/v59.0/sobjects/Contact/",
         "body" : {
           "FirstName" : "Sam",
           "LastName" : "Steele",
           "AccountId" : "@{reference_id_account_2.id}"
         },
         "method" : "POST",
         "referenceId" : "reference_id_contact_1"
      },
      {
         "url" : "/services/data/v59.0/sobjects/Contact/",
         "body" : {
           "FirstName" : "Charlie",
           "LastName" : "Dawson",
           "ReportsToId" : "@{reference_id_contact_1.id}"
         },
         "method" : "POST",
         "referenceId" : "reference_id_contact_2"
      },
      {
         "url" : "/services/data/v59.0/sobjects/Contact/",
         "body" : {
           "FirstName" : "Nellie",
           "LastName" : "Cashman",
           "ReportsToId" : "@{reference_id_contact_2.id}"
         },
         "method" : "POST",
         "referenceId" : "reference_id_contact_3"
      },
      {
         "url" : "/services/data/v59.0/sobjects/Campaign/",
         "body" : {
           "name" : "Spring Campaign"
         },
         "method" : "POST",
         "referenceId" : "reference_id_campaign"
      },
      {
         "url" : "/services/data/v59.0/sobjects/Opportunity/",
         "body" : {
           "name" : "Opportunity",
           "stageName" : "Value Proposition",
           "closeDate" : "2025-12-31",
           "CampaignId" : "@{reference_id_campaign.id}",
           "AccountId" : "@{reference_id_account_2.id}"
         },
         "method" : "POST",
         "referenceId" : "reference_id_opportunity"
      },
      {
         "url" : "/services/data/v59.0/sobjects/Lead/",
         "body" : {
           "FirstName" : "Belinda",
           "LastName" : "Mulroney",
           "Company" : "Klondike Quarry",
           "Email" : "bmulroney@example.com"
         },
         "method" : "POST",
         "referenceId" : "reference_id_lead"
      },
      {
         "url" : "/services/data/v59.0/sobjects/CampaignMember/",
         "body" : {
           "CampaignId" : "@{reference_id_campaign.id}",
           "LeadId" : "@{reference_id_lead.id}"
         },
         "method" : "POST",
         "referenceId" : "reference_id_campaignmember"
      }
    ]
}

示例:获取有关资源的详细信息,然后在复合图中使用它们 请求

此示例演示如何对资源使用 GET,然后使用该资源的属性 资源。

{
   "graphs" : [
      {
         "graphId" : "graph1",
         "compositeRequest" : [
            {
               "method" : "GET",
               "url" : "/services/data/v59.0/sobjects/Account/001R0000003fSRrIAM",
               "referenceId" : "refAccount"
            },
            {
               "body" : {
                  "name" : "Amazing opportunity for @{refAccount.Name}",
                  "StageName" : "Stage 1",
                  "CloseDate" : "2025-06-01T23:28:56.782Z",
                  "AccountId" : "@{refAccount.Id}"
               },
               "method" : "POST",
               "url" : "/services/data/v59.0/sobjects/Opportunity",
               "referenceId" : "newOpportunity"
            }
         ]
      }
   ]
}

图形深度

  • 没有父节点的节点被视为深度为 1。
  • 另一个节点的深度是图中最大边数 深度 1 到该节点。当一个节点之间出现边时,两个节点之间会出现边 使用来自另一个节点的属性(如 )。@{reference_account.id}

AllOrNone 参数

在标准复合材料中 操作,则对发生错误时发生的情况的唯一控制是参数。如果值为 ,则整个复合请求为 回滚。如果值为 ,则 执行不依赖于失败子请求的其余子请求。 不执行依赖子请求,这可能会导致已处理和 未处理的记录。allOrNonetruefalse

复合图的优点是,每个图都保证完成所有 子请求成功或完全回滚。换言之,该参数是隐式的 考虑用于每个图形。一个 复合图形请求从不会导致已处理和未处理的混合 记录。allOrNonetrue

为确保图形独立,请遵循以下规则。

  1. 一个图中的子请求不能引用另一个图中的子请求。
  2. 一个复合图操作中的每个图都必须是独立的。如果一个图形 无法成功处理,这不能阻止其他图形 操作。

最佳实践

一般做法是使图形尽可能小。例如,它更多 拥有 50 个具有 10 个节点的图形而不是具有 500 个节点的 1 个图形是有效的。 保持图形较小有两个优点:

  • 如果图形中的某个项目失败,则仅回滚该图形中的项目。这更容易 识别和处理较小图形中的错误。
  • 服务器可以更快、更多地处理多个更小的图形 有效。

示例:提交复合图作业

有关如何提交复合图作业的示例,请参阅使用复合图。

使用复合图

此示例演示如何使用复合图。它还演示了一个请求如何使用多个复合图。

  • 常规复合请求允许您执行一系列 REST API 单个调用中的请求。您可以将一个请求的输出用作 输入到后续请求中。
  • 复合图扩展了常规的复合请求,允许您将 复杂而完整的一系列相关对象和记录。
  • 复合图还使您能够确保一组给定请求中的步骤是 要么全部完成,要么全部未完成。如果使用此选项,则不会 必须检查哪些请求成功。
  • 常规复合请求的子请求限制为 25 个。复合图增加了这一点 限制为 500。

创建请求:

curl -X POST curl https://MyDomainName.my.salesforce.com/services/data/v59.0/composite/graph -H "Authorization: Bearer token" -H "Content-Type: application/json" --data @data.json

其中,该文件包含 图。请求正文的一般格式为:data.json

{
  "graphs": [
    {
      "graphId": "graphId",
      "compositeRequest": [
        compositeSubrequest,
        compositeSubrequest,
        ...
      ]
    },
    {
      "graphId": "graphId",
      "compositeRequest": [
        compositeSubrequest,
        compositeSubrequest,
        ...
      ]
    },
    ...
  ]
}

其中 是复合子请求 结果。compositeSubrequest

例如,两个复合图形请求分别创建一个帐户,然后创建相关记录:

{
    "graphs" : [
        {
            "graphId" : "1",
            "compositeRequest" : [
                {
                    "url" : "/services/data/v59.0/sobjects/Account/",
                    "body" : {
                        "name" : "Cloudy Consulting"
                    },
                    "method" : "POST",
                    "referenceId" : "reference_id_account_1"
                },
                {
                    "url" : "/services/data/v59.0/sobjects/Contact/",
                    "body" : {
                        "FirstName" : "Nellie",
                        "LastName" : "Cashman",
                        "AccountId" : "@{reference_id_account_1.id}"
                    },
                    "method" : "POST",
                    "referenceId" : "reference_id_contact_1"
                },
                {
                    "url" : "/services/data/v59.0/sobjects/Opportunity/",
                    "body" : {
                        "CloseDate" : "2024-05-22",
                        "StageName" : "Prospecting",
                        "Name" : "Opportunity 1",
                        "AccountId" : "@{reference_id_account_1.id}"
                    },
                    "method" : "POST",
                    "referenceId" : "reference_id_opportunity_1"
                }
            ]
        },
        {
            "graphId" : "2",
            "compositeRequest" : [
                {
                    "url" : "/services/data/v59.0/sobjects/Account/",
                    "body" : {
                        "name" : "Easy Spaces"
                    },
                    "method" : "POST",
                    "referenceId" : "reference_id_account_2"
                },
                {
                    "url" : "/services/data/v59.0/sobjects/Contact/",
                    "body" : {
                        "FirstName" : "Charlie",
                        "LastName" : "Dawson",
                        "AccountId" : "@{reference_id_account_2.id}"
                    },
                    "method" : "POST",
                    "referenceId" : "reference_id_contact_2"
                }
            ]
        }
    ]
}

响应是:

{
   "graphs" : [
      {
         "graphId" : "1",
         "graphResponse" : {
            "compositeResponse" : [
               {
                  "body" : {
                     "id" : "001R00000064wc7IAA",
                     "success" : true,
                     "errors" : [ ]
                  },
                  "httpHeaders" : {
                     "Location" : "/services/data/v59.0/sobjects/Account/001R00000064wc7IAA"
                  },
                  "httpStatusCode" : 201,
                  "referenceId" : "reference_id_account_1"
               },
               {
                  "body" : {
                     "id" : "003R000000DDMlTIAX",
                     "success" : true,
                     "errors" : [ ]
                  },
                  "httpHeaders" : {
                     "Location" : "/services/data/v59.0/sobjects/Contact/003R000000DDMlTIAX"
                  },
                  "httpStatusCode" : 201,
                  "referenceId" : "reference_id_contact_1"
               },
               {
                  "body" : {
                     "id" : "006R0000003FPYxIAO",
                     "success" : true,
                     "errors" : [ ]
                  },
                  "httpHeaders" : {
                     "Location" : "/services/data/v59.0/sobjects/Opportunity/006R0000003FPYxIAO"
                  },
                  "httpStatusCode" : 201,
                  "referenceId" : "reference_id_opportunity_1"
               }
            ]
         },
         "isSuccessful" : true
      },
      {
         "graphId" : "2",
         "graphResponse" : {
            "compositeResponse" : [
               {
                  "body" : {
                     "id" : "001R00000064wc8IAA",
                     "success" : true,
                     "errors" : [ ]
                  },
                  "httpHeaders" : {
                     "Location" : "/services/data/v59.0/sobjects/Account/001R00000064wc8IAA"
                  },
                  "httpStatusCode" : 201,
                  "referenceId" : "reference_id_account_2"
               },
               {
                  "body" : {
                     "id" : "003R000000DDMlUIAX",
                     "success" : true,
                     "errors" : [ ]
                  },
                  "httpHeaders" : {
                     "Location" : "/services/data/v59.0/sobjects/Contact/003R000000DDMlUIAX"
                  },
                  "httpStatusCode" : 201,
                  "referenceId" : "reference_id_contact_2"
               }
            ]
         },
         "isSuccessful" : true
      }
   ]
}

有关更多信息,请参阅使用复合图。

allOrNone(全部或无)复合请求和集合请求中的参数

如果 Composite 请求使用 sObject 集合,则有两个或多个参数可以交互,一个在 Composite 请求上,另一个在 每个 sObject 集合子请求。

allOrNone

  • 如果 Composite 请求已设置为 ,则 all-or-none 行为也适用于每个 sObject 集合子请求,覆盖子请求中的值。allOrNonetrueallOrNone
  • 如果 Composite 请求已设置为 ,则每个 sObject Collections 子请求的行为 根据其值 .allOrNonefalseallOrNone

例如,考虑此作业会发生什么情况,其中复合请求包含两个项:sObject 集合请求和创建联系人的请求。sObject 的 集合请求尝试创建两个帐户,其中一个失败,因为已经存在具有相同信息的现有帐户。

POST https://MyDomainName.my.salesforce.com/services/data/v59.0/composite -H "Authorization: Bearer token"

{
   "allOrNone" : outerFlag,
   "collateSubrequests" : false,
   "compositeRequest" : [
      {
         "method" : "POST",
         "url" : "/services/data/v59.0/composite/sobjects",
         "body" : {
            "allOrNone" : innerFlag,
            "records" : [
               {
                  "attributes" : { "type" : "Account" },
                  "Name" : "Northern Trail Outfitters",
                  "BillingCity" : "San Francisco"
               },
               {
                  "attributes" : { "type" : "Account" },
                  "Name" : "Easy Spaces",
                  "BillingCity" : "Calgary"
               }
            ]
         },
         "referenceId" : "newAccounts"
      },
      {
         "method" : "POST",
         "url" : "/services/data/v59.0/sObject/Contact",
         "body" : {
                "FirstName" : "John",
                "LastName" : "Smith"
         },
         "referenceId" : "newContact"
      }
   ]
}

和参数是 either 或 ,这会导致四种可能的情况。outerFlaginnerFlagtruefalse

案例 1:outerFlag = false,innerFlag = false

在本例中,两个请求均未设置为 ,因此两者都未设置为 。 请求已回滚。一个帐户已创建,另一个帐户失败。allOrNonetrue

案例 2:outerFlag = false,innerFlag = true

在本例中,内部 sObject 集合请求已设置为 ,因此会回滚。外部 Composite 请求不会回滚。allOrNonetrue

案例 3:outerFlag = true,innerFlag = true

在这种情况下,两者 requests 已设置为 ,因此它们都会回滚。allOrNonetrue

案例 4:outerFlag = true,innerFlag = false响应正文 这种情况是:

{
   "compositeResponse" : [
      {
         "body" : [
            {
               "id" : "001R00000066cndIAA",
               "success" : true,
               "errors" : [ ]
            },
            {
               "success" : false,
               "errors" : [
                  {
                     "statusCode" : "DUPLICATES_DETECTED",
                     "message" : "Use one of these records?",
                     "fields" : [ ]
                  }
               ]
            }
         ],
         "httpHeaders" : { },
         "httpStatusCode" : 200,
         "referenceId" : "collection1"
      },
      {
         "body" : [
            {
               "errorCode" : "PROCESSING_HALTED",
               "message" : "The transaction was rolled back since another operation in the same transaction failed."
            }
         ],
         "httpHeaders" : { },
         "httpStatusCode" : 400,
         "referenceId" : "newContact"
      }
   ]
}

在 在这种情况下,内部 sObject 集合请求已设置为 ,因此不会立即回滚。 但是,外部 Composite 请求已设置为 因此会回滚,这也会回滚 内部 sObject 集合请求。allOrNonefalseallOrNonetrue

注意

即使响应 sObject Collections 请求的正文显示了第一个 Account 的创建,即 Composite 请求被回滚的事实 表示帐户创建已回滚。最终结果是不会创建新帐户。“success” : true

为 sObjects REST API 生成 OpenAPI 3.0 文档 (测试版)

在此测试版中,您可以为 sObjects REST API 生成 OpenAPI 文档。

注意

此功能是一项测试版服务。客户可自行决定是否试用此类测试版服务。对测试版服务的任何使用均受协议和条款中提供的适用测试版服务条款的约束。

使用此测试版功能,您可以生成一个 OpenAPI 文档,该文档表示 六个 sObjects REST 反映您的自定义和配置的 API 资源。

支持的版本

此测试版功能适用于启用了 API 的 Developer Edition、Partner Developer Edition、沙盒和临时组织。

关于文档

OpenAPI 文档遵循 OpenAPI 规范的 3.0.1 版。有关详细信息,请参阅 https://www.openapis.org。

注意

此测试版 OpenAPI 文档可能会发生变化。请勿基于此 OpenAPI 文档构建生产集成。

OpenAPI 文档涵盖的内容

本 OpenAPI 文档介绍了这些 REST API 资源,您可以使用这些资源来检索、创建和更新对象数据。

  1. /services/data/v59.0/sobjects
    • 列出数据的可用对象及其元数据。提供组织编码和查询中允许的最大批大小。
    • 请参阅描述 全球。
  2. /services/data/v59.0/sobjects/sObject
    • 描述指定对象的单个元数据。可以创建对象记录。例如,使用 GET 方法检索 Account 对象的元数据,或者 使用 POST 方法创建一个 Account 对象。
    • 请参阅 sObject Basic 信息。
  3. /services/data/v59.0/sobjects/{sObject}/describe
    • 描述 sObject 的所有级别的单个元数据
    • 请参阅 sObject 描述。
  4. /services/data/v59.0/sobjects/sObject/{id}
    • 根据指定的对象 ID 访问记录。检索、更新或删除记录。可以检索字段值。使用 GET 方法检索记录或字段, DELETE 方法用于删除记录,PATCH 方法用于更新记录。
    • 请参阅 sObject 行。
  5. /services/data/v59.0/sobjects/{sObject}/deleted
    • 检索 sObject 的时间跨度内单个已删除记录的列表
    • 请参阅 sObject 被删除。
  6. /services/data/vXX.X/sobjects/{sObject}/{id}/{blobField}
    • 从单个记录中检索指定的 blob 字段,并将其作为二进制数据返回
    • 请参阅 sObject Blob Get。

启用 Beta 版

若要启用此测试版,请按照下列步骤操作。您必须具有“修改所有数据”或“自定义应用程序”权限。

  1. 在“设置”的“快速查找”框中,输入 ,然后选择“用户界面”。User Interface
  2. 在“用户界面”页面上,选择“启用 Salesforce Platform REST API、OpenAPI 3.0 规范生成(测试版)”。注意选择此项表示您接受 协议和条款中提供的测试版服务条款。

生成 OpenAPI 文档

开启 beta 功能后,按照以下步骤生成 OpenAPI 文档。

  1. 发送 POST 请求 自https://MyDomainName.my.salesforce.com/services/data/vXX.X/async/specifications/oas3注意这 API 版本 56.0 中的过程与早期 API 版本中的过程进行了更改。此步骤现在使用 POST 请求而不是 GET 请求。中的 API 版本 此 POST 请求 必须为 54.0 或更高。XX.X如果服务器在处理请求时遇到错误,它会报告“失败”状态并返回 4xx 或 5xx 状态。请求正文必须是{ "resources" : [ selectors ] }哪里可以selectors
    • “*”(获取所有资源)
    • 或者,以下一个或多个选择器(仅获取 OpenAPI 文档的特定部分)
      • “/services/data/v59.0/sobjects”
      • “/services/data/v59.0/sobjects/sObject其中可以是您在组织中有权访问的任何标准或自定义对象的名称sObject
      • “/services/data/v59.0/sobjects/sObject/{id}”
      • “/services/data/v59.0/sobjects/sObject/deleted”
      • “/services/data/v59.0/sobjects/{sObject}/deleted”
      • “/services/data/v59.0/sobjects/sObject/describe”
      • “/services/data/v59.0/sobjects/{sObject}/describe”
      • “/services/data/v59.0/sobjects/{sObject}/{id}/{blobField}”
      注意{blobField}、 和 必须输入 按照字面。它们不是变量。{id}{sObject}注意不要在选择器的末尾添加尾部斜杠,例如,检索 无。“/services/data/v59.0/sobjects/”注意对于 和 选择器,可以使用字面名称或对象名称。对于所有对象,这些请求的响应正文都是相同的。/describe/deleted{sObject}注意中的 API 版本 选择器必须是最新版本 v59.0。(这确实 不需要与步骤 1 中的 POST 请求或步骤 3 中的 GET 请求相同。例如{ "resources" : ["*"] }{ "resources" : [ "/services/data/v59.0/sobjects", "/services/data/v59.0/sobjects/Contact", "/services/data/v59.0/sobjects/Lead", "/services/data/v59.0/sobjects/Lead/{id}", "/services/data/v59.0/sobjects/{sObject}/deleted", "/services/data/v59.0/sobjects/Account/describe", "/services/data/v59.0/sobjects/{sObject}/{id}/{blobField}" ] }
  2. 假设可以无错误地解析请求,则服务器使用 HTTP 状态代码 202 (Accepted) 和包含 URI 的 JSON 响应正文进行响应,您可以在其中获取 OpenAPI 文档。例如:HTTP/1.1 202 Accepted { "href" : "/v59.0/async/specifications/oas3/NTByUjAwMDAwMDAwMDBh" }此 URI 的最后一部分(在此示例中)是 OpenAPI 的定位器 ID 公文。NTByUjAwMDAwMDAwMDBh
  3. 将 GET 请求发送到追加了定位器 ID 的同一 URI。为 例:https://MyDomainName.my.salesforce.com/services/data/vXX.X/​async/​specifications/​oas3/​NTByUjAwMDAwMDAwMDBh这 此 GET 请求中的 API 版本必须为 54.0 或更高版本。XX.X
    1. 如果服务器尚未完成 OpenAPI 文档的准备工作,它将使用 202(已接受)状态代码和状态消息“未启动”或“正在进行”进行响应。为 例:HTTP/1.1 202 Accepted { "status" : "In Progress" }
    2. 如果服务器已完成,它将以 200 (OK) 状态进行响应,并在响应正文中返回 OpenAPI 文档。例如:HTTP/1.1 200 OK{ "openapi": "3.0.1", "info": { "title": "Lightning Platform REST API", "description": "REST API provides you with programmatic access to your data in Salesforce. The flexibility and scalability of REST API make it an excellent choice for integrating Salesforce into your applications and for performing complex operations on a large scale. You can use REST API tools to create, manipulate, and search data in Salesforce by sending HTTP requests to endpoints in Salesforce. Depending on where you send requests, you access and operate on different pieces of information, called resources. Resources include records, query results, metadata, and more. ", "version": "59.0 }, "servers": [ ... ], "security": [ ... ], "paths": { "/sobjects": { ... }, "/sobjects/Contact": { ... }, "/sobjects/Lead": { ... }, "/sobjects/Lead/{id}": { ... }, "/sobjects/{sObject}/deleted": { ... }, "/sobjects/{sObject}/describe": { ... }, "/sobjects/{sObject}/{id}/{blobField}": { ... } }, "components": { ... } }

生成 OpenAPI 文档后,可以在 48 小时内使用相同的定位器 ID 再次检索 OpenAPI 文档。48 小时后,使用该定位器 ID 将生成 404 (未找到)错误。

每个用户只能每 6 小时生成一个新的 OpenAPI 文档。如果您在最后一次通话后 6 小时内再次致电 生成,即使使用不同的请求正文,API 也会返回相同的定位器 ID。/async/specifications/oas3

如果选择的资源与任何受支持的资源都不匹配,或者选择的资源无权访问,则请求不会失败,但 OpenAPI 文档将不包含该资源,其路径在 OpenAPI 文档中将不可见。

提供反馈

要向我们提供反馈,请登录 Trailhead,然后加入 OpenAPI 规范 Salesforce REST API 开拓者社区。

您的反馈很有价值,可以帮助我们发现存在的问题并激发未来的变革。我们正在寻找一般印象、改进建议、错误和反馈 好吧,这个 OpenAPI 文档与您的 OpenAPI 用例保持一致。