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

13 KiB
Raw Permalink Blame History

API 文档 - 删除操作

元数据

  • 需求编号003-05
  • 创建时间2026-02-06
  • 创建人AI Assistant
  • 状态:已完成
  • 版本v1.0.0

API 概述

本文档描述了 Salesforce Metadata API 删除操作相关的 REST API 接口,包括元数据删除、批量删除和删除历史查询功能。

核心功能

  1. 元数据删除:根据元数据类型和完整名称删除单个或多个元数据
  2. 批量删除:支持批量删除不同类型的元数据,自动分批处理(每批 10 个)
  3. 删除历史查询:查询删除操作的历史记录

技术栈

  • Spring Boot 2.7.x
  • Spring Security权限控制
  • MyBatis Plus数据持久化
  • Salesforce Metadata API

基础路径

/salesforce/metadata/delete

接口列表

接口 1删除元数据

功能描述

根据元数据类型和完整名称列表删除元数据。支持一次删除多个同类型的元数据(最多 10 个,超过会自动分批处理)。

请求方式

POST

请求路径

/salesforce/metadata/delete/{type}

权限要求

  • 权限标识:salesforce:metadata:delete
  • 使用 @PreAuthorize("@ss.hasPermi('salesforce:metadata:delete')") 控制

请求参数

路径参数
参数名 类型 必填 说明 示例
type String 元数据类型 CustomObjectApexClassApexTrigger
请求体参数
参数名 类型 必填 说明 示例
fullNames String[] 元数据完整名称列表 ["MyCustomObject__c", "AnotherObject__c"]

请求示例

POST /salesforce/metadata/delete/CustomObject
Content-Type: application/json

["MyCustomObject__c", "AnotherObject__c"]

响应参数

成功响应HTTP 200
参数名 类型 说明 示例
code Integer 状态码200 表示成功 200
msg String 提示信息 "操作成功"
data Array 删除结果列表 见下方示例
删除结果对象DeleteResultVo
参数名 类型 说明 示例
fullName String 元数据完整名称 "MyCustomObject__c"
success Boolean 是否删除成功 true
errors Array 错误消息数组(失败时) ["Entity is not found"]

成功响应示例

{
  "code": 200,
  "msg": "操作成功",
  "data": [
    {
      "fullName": "MyCustomObject__c",
      "success": true,
      "errors": null
    },
    {
      "fullName": "AnotherObject__c",
      "success": false,
      "errors": ["Entity is not found"]
    }
  ]
}

失败响应示例

{
  "code": 500,
  "msg": "Salesforce 连接失败: Connection refused"
}

接口 2批量删除元数据

功能描述

批量删除不同类型的元数据。支持一次提交多个删除请求,每个请求包含元数据类型和完整名称列表。系统会自动对每个请求进行分批处理(每批 10 个)。

请求方式

POST

请求路径

/salesforce/metadata/delete/batch

权限要求

  • 权限标识:salesforce:metadata:delete
  • 使用 @PreAuthorize("@ss.hasPermi('salesforce:metadata:delete')") 控制

请求参数

请求体参数DeleteRequest 数组)
参数名 类型 必填 说明 示例
type String 元数据类型 CustomObjectApexClass
fullNames String[] 元数据完整名称列表 ["Object1__c", "Object2__c"]

请求示例

POST /salesforce/metadata/delete/batch
Content-Type: application/json

[
  {
    "type": "CustomObject",
    "fullNames": ["MyCustomObject__c", "AnotherObject__c"]
  },
  {
    "type": "ApexClass",
    "fullNames": ["MyApexClass", "AnotherClass"]
  }
]

响应参数

成功响应HTTP 200
参数名 类型 说明 示例
code Integer 状态码200 表示成功 200
msg String 提示信息 "批量删除完成,成功 3 个,失败 1 个"
data Object 批量删除结果 见下方示例
批量删除结果对象
参数名 类型 说明 示例
totalCount Integer 总删除数量 4
successCount Integer 成功数量 3
failureCount Integer 失败数量 1
results Array 详细删除结果列表 DeleteResultVo 数组

成功响应示例

{
  "code": 200,
  "msg": "批量删除完成,成功 3 个,失败 1 个",
  "data": {
    "totalCount": 4,
    "successCount": 3,
    "failureCount": 1,
    "results": [
      {
        "fullName": "MyCustomObject__c",
        "success": true,
        "errors": null
      },
      {
        "fullName": "AnotherObject__c",
        "success": false,
        "errors": ["Entity is not found"]
      },
      {
        "fullName": "MyApexClass",
        "success": true,
        "errors": null
      },
      {
        "fullName": "AnotherClass",
        "success": true,
        "errors": null
      }
    ]
  }
}

失败响应示例

{
  "code": 500,
  "msg": "批量删除失败: 参数校验失败"
}

接口 3获取删除历史

功能描述

查询元数据删除操作的历史记录,支持限制返回数量。

请求方式

GET

请求路径

/salesforce/metadata/delete/history

权限要求

  • 权限标识:salesforce:metadata:delete:query
  • 使用 @PreAuthorize("@ss.hasPermi('salesforce:metadata:delete:query')") 控制

请求参数

查询参数
参数名 类型 必填 说明 默认值 范围
limit Integer 返回记录数量限制 10 1-100

请求示例

GET /salesforce/metadata/delete/history?limit=20

响应参数

成功响应HTTP 200
参数名 类型 说明 示例
code Integer 状态码200 表示成功 200
msg String 提示信息 "操作成功"
data Array 删除历史记录列表 见下方示例
删除历史记录对象DataiMetadataDelete
参数名 类型 说明 示例
id Long 记录 ID 1
metadataType String 元数据类型 CustomObject
fullName String 元数据完整名称 MyCustomObject__c
success Integer 是否成功0-否1-是) 1
errorMessage String 错误消息(失败时) null
deleteTime Date 删除时间 2026-02-06 10:30:00
userId Long 操作用户 ID 1
createBy String 创建者 admin
createTime Date 创建时间 2026-02-06 10:30:00

成功响应示例

{
  "code": 200,
  "msg": "操作成功",
  "data": [
    {
      "id": 1,
      "metadataType": "CustomObject",
      "fullName": "MyCustomObject__c",
      "success": 1,
      "errorMessage": null,
      "deleteTime": "2026-02-06 10:30:00",
      "userId": 1,
      "createBy": "admin",
      "createTime": "2026-02-06 10:30:00"
    },
    {
      "id": 2,
      "metadataType": "ApexClass",
      "fullName": "MyApexClass",
      "success": 0,
      "errorMessage": "Entity is not found",
      "deleteTime": "2026-02-06 10:35:00",
      "userId": 1,
      "createBy": "admin",
      "createTime": "2026-02-06 10:35:00"
    }
  ]
}

失败响应示例

{
  "code": 500,
  "msg": "获取删除历史失败"
}

错误码

系统错误码

错误码 说明 场景
200 操作成功 请求处理成功
500 操作失败 服务器内部错误
401 未授权 用户未登录或 Token 过期
403 禁止访问 用户没有权限
404 资源不存在 请求的资源不存在

业务错误码

错误码 说明 场景 解决方案
DELETE_001 Salesforce 连接失败 连接 Salesforce 时发生异常 检查网络连接和 Salesforce 配置
DELETE_002 删除元数据失败 调用 Salesforce API 删除失败 检查元数据是否存在,查看错误详情
DELETE_003 批量删除失败 批量删除过程中发生错误 检查请求参数,查看具体错误信息
DELETE_004 参数校验失败 请求参数不符合要求 检查参数是否为空,格式是否正确

数据模型

DeleteRequest删除请求

@Data
@Schema(description = "删除请求")
public class DeleteRequest implements Serializable {
    private static final long serialVersionUID = 1L;

    @NotBlank(message = "元数据类型不能为空")
    @Schema(description = "元数据类型", required = true, example = "CustomObject")
    private String type;

    @NotEmpty(message = "元数据名称列表不能为空")
    @Schema(description = "元数据完整名称列表", required = true, example = "[\"MyCustomObject__c\", \"AnotherObject__c\"]")
    private String[] fullNames;
}

DeleteResultVo删除结果

@Data
@Schema(description = "删除结果")
public class DeleteResultVo implements Serializable {
    private static final long serialVersionUID = 1L;

    @Schema(description = "元数据完整名称", example = "MyCustomObject__c")
    private String fullName;

    @Schema(description = "是否删除成功", example = "true")
    private boolean success;

    @Schema(description = "错误消息数组", example = "[\"Entity is not found\"]")
    private String[] errors;
}

DataiMetadataDelete删除历史实体

@Data
public class DataiMetadataDelete implements Serializable {
    private static final long serialVersionUID = 1L;

    private Long id;
    private String metadataType;
    private String fullName;
    private Integer success;
    private String errorMessage;
    private Date deleteTime;
    private Long userId;
    private String createBy;
    private Date createTime;
    private String updateBy;
    private Date updateTime;
    private Integer delFlag;
}

调用示例

JavaScript 调用示例

单个删除

const response = await fetch('/salesforce/metadata/delete/CustomObject', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  },
  body: JSON.stringify(['MyCustomObject__c'])
});

const result = await response.json();
console.log(result);

批量删除

const response = await fetch('/salesforce/metadata/delete/batch', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  },
  body: JSON.stringify([
    { type: 'CustomObject', fullNames: ['Object1__c', 'Object2__c'] },
    { type: 'ApexClass', fullNames: ['Class1', 'Class2'] }
  ])
});

const result = await response.json();
console.log(result);

查询历史

const response = await fetch('/salesforce/metadata/delete/history?limit=10', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + token
  }
});

const result = await response.json();
console.log(result);

Java 调用示例

单个删除

@RestController
public class DeleteExample {
    
    @Autowired
    private RestTemplate restTemplate;
    
    public void deleteMetadata() {
        String url = "http://localhost:8080/salesforce/metadata/delete/CustomObject";
        
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.setBearerAuth(token);
        
        String[] fullNames = {"MyCustomObject__c"};
        HttpEntity<String[]> entity = new HttpEntity<>(fullNames, headers);
        
        ResponseEntity<AjaxResult> response = restTemplate.exchange(
            url, HttpMethod.POST, entity, AjaxResult.class);
        
        System.out.println(response.getBody());
    }
}

注意事项

1. 权限控制

  • 所有接口都需要有效的 JWT Token
  • 删除操作需要 salesforce:metadata:delete 权限
  • 历史查询需要 salesforce:metadata:delete:query 权限

2. 分批处理

  • Salesforce Metadata API 每次最多删除 10 个元数据
  • 系统会自动对超过 10 个的请求进行分批处理
  • 分批处理是串行执行,单个失败不影响其他批次

3. 异步日志

  • 删除操作的历史记录是异步写入数据库的
  • 可能会有短暂的延迟(通常 < 1 秒)
  • 不影响主业务流程的响应时间

4. 错误处理

  • 建议客户端对所有可能的错误码进行处理
  • 对于批量删除,建议检查每个结果的 success 字段
  • 对于失败的删除,可以根据 errors 字段进行针对性处理

5. 性能考虑

  • 批量删除时,如果数量很大,可能需要较长时间
  • 建议客户端设置合理的超时时间(如 60 秒)
  • 对于超大量删除,建议分批调用接口

相关文档