datai/datai-scenes/datai-scene-salesforce/docs/api-docs/2026-02-06-003-08-api.md

12 KiB
Raw Permalink Blame History

API 文档 - 描述和列出元数据

元数据

  • 需求编号003-08
  • 需求名称:描述和列出元数据
  • 创建时间2026-02-06
  • 创建人AI Assistant
  • 状态:已完成

API 概述

本文档描述了"描述和列出元数据"功能的 REST API 接口。该功能基于 Salesforce Metadata API提供了以下核心能力

  1. 描述元数据DescribeMetadata:获取当前 Salesforce Org 支持的所有元数据类型信息
  2. 列出元数据ListMetadata:获取指定元数据类型下的具体成员列表,支持分批处理
  3. 查询历史History Query:查询元数据操作的执行历史,支持审计和追溯

基础信息

  • 基础路径/salesforce/metadata
  • Content-Typeapplication/json
  • 认证方式:基于 Session 的认证(通过 MetadataConnectionFactory 管理)

接口列表

接口 1描述元数据

功能描述:获取当前 Salesforce Org 支持的所有元数据类型信息,包括元数据对象的类型、目录、子类型等详细信息。

请求方式GET

请求路径/salesforce/metadata/describe

请求参数

参数名 类型 必填 说明
apiVersion Double API 版本号,如 59.0。如果不传,使用 Salesforce 默认版本

响应参数

参数名 类型 说明
code Integer 状态码200 成功,其他失败)
msg String 提示信息
data Object 描述元数据结果DescribeMetadataResult

DescribeMetadataResult 结构

参数名 类型 说明
metadataObjects Array 元数据对象列表DescribeMetadataObject[]
metadataObjectsWithMns Array 带命名空间的元数据对象列表DescribeMetadataObject[]
namespacePrefix String 命名空间前缀
serverVersion String 服务器版本

DescribeMetadataObject 结构

参数名 类型 说明
childXmlNames Array 子 XML 名称列表String[]
directoryName String 目录名称
inFolder Boolean 是否在文件夹中
metaFile Boolean 是否有元文件
suffix String 文件后缀
xmlName String XML 名称

成功示例

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "metadataObjects": [
      {
        "childXmlNames": [],
        "directoryName": "objects",
        "inFolder": false,
        "metaFile": false,
        "suffix": "object",
        "xmlName": "CustomObject"
      },
      {
        "childXmlNames": [],
        "directoryName": "classes",
        "inFolder": false,
        "metaFile": true,
        "suffix": "cls",
        "xmlName": "ApexClass"
      }
    ],
    "metadataObjectsWithMns": [],
    "namespacePrefix": null,
    "serverVersion": "59.0"
  }
}

失败示例

{
  "code": 500,
  "msg": "列出元数据失败: 连接超时",
  "data": null
}

错误码

  • DESCRIBE_001获取 Metadata 连接失败
  • DESCRIBE_002描述元数据失败
  • DESCRIBE_008未知错误

接口 2列出元数据

功能描述获取指定元数据类型及文件夹下的具体元数据成员列表。支持批量查询Service 层会自动分批处理(每次最多 3 个查询)。

请求方式POST

请求路径/salesforce/metadata/list

请求参数

参数名 类型 必填 说明
queries Array 查询列表ListMetadataQuery[]),至少包含一个查询

ListMetadataQuery 结构

参数名 类型 必填 说明
type String 元数据类型,如 "CustomObject", "ApexClass", "ApexTrigger" 等
folder String 文件夹名称,用于查询文件夹内的元数据(如文档、报表等)

响应参数

参数名 类型 说明
code Integer 状态码200 成功,其他失败)
msg String 提示信息
data Array 列出元数据结果列表ListMetadataResult[]

ListMetadataResult 结构

参数名 类型 说明
fullName String 完整名称
type String 类型
createdById String 创建者 ID
createdByName String 创建者名称
createdDate String 创建日期ISO 8601 格式)
lastModifiedById String 最后修改者 ID
lastModifiedByName String 最后修改者名称
lastModifiedDate String 最后修改日期ISO 8601 格式)
manageableState String 可管理状态

成功示例

{
  "code": 200,
  "msg": "操作成功",
  "data": [
    {
      "fullName": "Account",
      "type": "CustomObject",
      "createdById": "005xx000001X9YZAA0",
      "createdByName": "Admin User",
      "createdDate": "2023-01-15T08:30:00.000Z",
      "lastModifiedById": "005xx000001X9YZAA0",
      "lastModifiedByName": "Admin User",
      "lastModifiedDate": "2023-06-20T14:22:00.000Z",
      "manageableState": "unmanaged"
    },
    {
      "fullName": "Contact",
      "type": "CustomObject",
      "createdById": "005xx000001X9YZAA0",
      "createdByName": "Admin User",
      "createdDate": "2023-01-15T08:35:00.000Z",
      "lastModifiedById": "005xx000001X9YZAA0",
      "lastModifiedByName": "Admin User",
      "lastModifiedDate": "2023-06-20T14:25:00.000Z",
      "manageableState": "unmanaged"
    }
  ]
}

失败示例

{
  "code": 500,
  "msg": "查询列表不能为空",
  "data": null
}

错误码

  • DESCRIBE_003参数校验失败查询列表为空、元数据类型为空等
  • DESCRIBE_006列出元数据失败
  • DESCRIBE_008未知错误

接口 3获取元数据查询历史

功能描述:查询元数据描述和列出操作的执行历史,支持按操作类型筛选和限制返回数量。

请求方式GET

请求路径/salesforce/metadata/describe/history

请求参数

参数名 类型 必填 说明
operationType String 操作类型,可选值:"describe"(描述元数据)、"list"(列出元数据)
limit Integer 返回数量限制,默认 10最大 100

响应参数

参数名 类型 说明
code Integer 状态码200 成功,其他失败)
msg String 提示信息
data Array 查询历史列表DataiMetadataDescribe[]

DataiMetadataDescribe 结构

参数名 类型 说明
id Long 记录 ID
operationType String 操作类型describe/list
queryContent String 查询内容JSON 格式)
resultCount Integer 结果数量
status String 状态Success/Failed
errorMessage String 错误信息
serverVersion String 服务器版本
namespacePrefix String 命名空间前缀
metadataObjectCount Integer 元数据对象数量
queryTime String 查询时间ISO 8601 格式)
createTime String 创建时间ISO 8601 格式)

成功示例

{
  "code": 200,
  "msg": "操作成功",
  "data": [
    {
      "id": 1,
      "operationType": "describe",
      "queryContent": null,
      "resultCount": null,
      "status": "Success",
      "errorMessage": null,
      "serverVersion": "59.0",
      "namespacePrefix": null,
      "metadataObjectCount": 250,
      "queryTime": "2026-02-06T10:30:00.000+08:00",
      "createTime": "2026-02-06T10:30:00.000+08:00"
    },
    {
      "id": 2,
      "operationType": "list",
      "queryContent": "[{\"type\":\"CustomObject\"}]",
      "resultCount": 50,
      "status": "Success",
      "errorMessage": null,
      "serverVersion": null,
      "namespacePrefix": null,
      "metadataObjectCount": null,
      "queryTime": "2026-02-06T10:35:00.000+08:00",
      "createTime": "2026-02-06T10:35:00.000+08:00"
    }
  ]
}

失败示例

{
  "code": 500,
  "msg": "无效的操作类型,必须是 describe 或 list",
  "data": null
}

错误码

  • DESCRIBE_003参数校验失败无效的操作类型
  • DESCRIBE_008未知错误

错误码列表

错误码 错误信息 说明
DESCRIBE_001 获取 Metadata 连接失败 无法获取 Salesforce Metadata 连接,可能是认证失败或网络问题
DESCRIBE_002 描述元数据失败 调用 Salesforce describeMetadata API 失败
DESCRIBE_003 参数校验失败 请求参数不符合要求(如查询列表为空、元数据类型为空、无效的操作类型等)
DESCRIBE_004 记录查询历史失败 写入数据库失败
DESCRIBE_005 获取查询历史失败 从数据库查询历史记录失败
DESCRIBE_006 列出元数据失败 调用 Salesforce listMetadata API 失败
DESCRIBE_007 记录列出元数据历史失败 写入数据库失败
DESCRIBE_008 未知错误 其他未预期的错误

使用示例

示例 1描述元数据

请求

curl -X GET "http://localhost:8080/salesforce/metadata/describe?apiVersion=59.0"

响应

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "metadataObjects": [
      {
        "xmlName": "CustomObject",
        "directoryName": "objects",
        "suffix": "object",
        "inFolder": false,
        "metaFile": false
      }
    ],
    "serverVersion": "59.0"
  }
}

示例 2列出元数据单个查询

请求

curl -X POST "http://localhost:8080/salesforce/metadata/list" \
  -H "Content-Type: application/json" \
  -d '[{"type": "CustomObject"}]'

响应

{
  "code": 200,
  "msg": "操作成功",
  "data": [
    {
      "fullName": "Account",
      "type": "CustomObject",
      "createdByName": "Admin User",
      "lastModifiedByName": "Admin User"
    }
  ]
}

示例 3列出元数据多个查询自动分批

请求

curl -X POST "http://localhost:8080/salesforce/metadata/list" \
  -H "Content-Type: application/json" \
  -d '[
    {"type": "CustomObject"},
    {"type": "ApexClass"},
    {"type": "ApexTrigger"},
    {"type": "VisualforcePage"}
  ]'

说明:虽然请求包含 4 个查询,但 Service 层会自动分批处理(每次最多 3 个),对调用方透明。

示例 4获取查询历史

请求

curl -X GET "http://localhost:8080/salesforce/metadata/describe/history?operationType=list&limit=5"

响应

{
  "code": 200,
  "msg": "操作成功",
  "data": [
    {
      "id": 1,
      "operationType": "list",
      "queryContent": "[{\"type\":\"CustomObject\"}]",
      "resultCount": 50,
      "status": "Success",
      "queryTime": "2026-02-06T10:30:00.000+08:00"
    }
  ]
}

注意事项

  1. 分批处理listMetadata 接口支持批量查询,但 Salesforce API 限制每次调用最多包含 3 个查询。Service 层会自动分批处理,对调用方透明。

  2. 查询历史:每次 describeMetadata 和 listMetadata 操作都会自动记录到数据库,包括操作类型、查询内容、结果数量、状态等信息。

  3. 错误处理:所有接口都遵循统一的错误处理规范,返回包含错误码和错误信息的 JSON 响应。

  4. 性能考虑

    • describeMetadata 操作会返回大量元数据类型信息,建议在应用启动时缓存结果
    • listMetadata 操作涉及外部 API 调用,响应时间取决于查询的复杂度和数据量
    • 查询历史接口默认返回 10 条记录,最大支持 100 条

相关文档