datai/datai-scenes/datai-scene-salesforce/docs/changelog/2026-02-02-005-changelog.md

219 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 变更日志 - 描述功能
## 元数据
- 需求编号001-05
- 创建时间2026-02-02
- 创建人AI Assistant
- 版本号v1.0.0
- 关联需求:[描述功能](../requirements/sub/2026-01-28-001-05-描述功能.md)
## 变更概述
实现 Salesforce Partner API 的描述功能,包括 DescribeGlobal、DescribeSObject、DescribeSObjects、DescribeLayout、DescribeTabs、DescribeQuickActions 六个核心功能。提供 RESTful API 接口,支持获取 Salesforce 对象的元数据信息,包括字段定义、布局信息、标签页信息、快速操作信息等。
## 变更内容
### 新增功能
- 实现 DescribeGlobal 功能:
- 获取所有可用的 Salesforce 对象列表
- 返回对象的基本信息(名称、标签、是否可创建、是否可更新等)
- 支持按对象类型过滤
- 实现 DescribeSObject 功能:
- 获取单个对象的详细元数据信息
- 返回字段定义(类型、长度、精度、必填性等)
- 返回子对象列表
- 返回记录类型信息
- 返回支持的 SOQL 功能
- 实现 DescribeSObjects 功能:
- 批量获取多个对象的元数据信息
- 支持最多 100 个对象同时描述
- 使用批量 API 提高效率
- 返回每个对象的详细元数据
- 实现 DescribeLayout 功能:
- 获取对象的页面布局信息
- 返回字段布局(编辑布局、详情布局等)
- 返回按钮布局
- 返回相关列表布局
- 支持按记录类型获取布局
- 实现 DescribeTabs 功能:
- 获取所有可用的标签页列表
- 返回标签页的基本信息名称、标签、图标、URL等
- 返回标签页关联的对象类型
- 返回标签页的显示顺序
- 实现 DescribeQuickActions 功能:
- 获取快速操作的定义信息
- 返回快速操作的字段列表
- 返回快速操作的布局信息
- 返回快速操作的可用性规则
- 支持按对象类型过滤
### 新增文档
- [需求文档](../requirements/sub/2026-01-28-001-05-描述功能.md) - 描述功能需求文档
- [设计文档](../design/2026-02-02-005-描述功能-设计.md) - 描述功能技术方案设计
- [决策记录](../decisions/2026-02-02-005-ADR-描述功能技术选型.md) - 描述功能技术选型决策记录
- [提示词](../prompts/2026-02-02-005-prompt-描述功能.md) - 描述功能代码生成提示词
- [变更日志](./2026-02-02-005-changelog.md) - 本文档
### 新增代码文件15 个)
#### DTO 类4 个)
- `datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/DescribeSObjectDto.java` - 描述单个对象请求 DTO
- `datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/DescribeSObjectsDto.java` - 描述多个对象请求 DTO
- `datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/DescribeLayoutDto.java` - 描述对象布局请求 DTO
- `datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/DescribeQuickActionsDto.java` - 描述快速操作请求 DTO
#### VO 类5 个)
- `datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/DescribeGlobalResultVo.java` - DescribeGlobal 结果 VO
- `datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/DescribeSObjectResultVo.java` - DescribeSObject 结果 VO
- `datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/DescribeLayoutResultVo.java` - DescribeLayout 结果 VO
- `datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/DescribeTabResultVo.java` - DescribeTabs 结果 VO
- `datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/DescribeQuickActionResultVo.java` - DescribeQuickActions 结果 VO
#### Service 层2 个)
- `datai-salesforce-partner/src/main/java/com/datai/partner/service/IPartnerDescribeService.java` - 描述服务接口6 个方法)
- `datai-salesforce-partner/src/main/java/com/datai/partner/service/impl/PartnerDescribeServiceImpl.java` - 描述服务实现
#### Controller1 个)
- `datai-salesforce-partner/src/main/java/com/datai/partner/controller/PartnerDescribeController.java` - 描述控制器6 个 REST API 接口)
#### 工具类1 个)
- `datai-salesforce-partner/src/main/java/com/datai/partner/util/DescribeResultConverter.java` - 描述结果转换工具类
#### 单元测试1 个)
- `datai-salesforce-partner/src/test/java/com/datai/partner/service/impl/PartnerDescribeServiceImplTest.java` - 描述服务单元测试18 个测试用例)
### REST API 接口6 个)
- `GET /partner/describe/global` - 描述所有可用对象
- `POST /partner/describe/sobject` - 描述特定对象
- `POST /partner/describe/sobjects` - 描述多个对象
- `POST /partner/describe/layout` - 描述对象布局
- `GET /partner/describe/tabs` - 描述标签页
- `POST /partner/describe/quick-actions` - 描述快速操作
## 影响范围
### 模块级别
- **模块**`datai-salesforce-partner`
- **功能**Salesforce 元数据描述功能
- **文件**15 个新文件4 个 DTO + 5 个 VO + 2 个 Service + 1 个 Controller + 1 个工具类 + 1 个单元测试 + 1 个变更日志)
### 功能级别
- 新增 6 个 REST API 接口
- 新增 6 个 Service 方法
- 新增 18 个单元测试用例
- 支持字段信息处理(类型、长度、精度、必填性等)
- 支持 Picklist 字段处理(选项值、默认值、有效性规则)
- 支持关系字段处理(引用对象、关系名称、级联删除)
- 支持布局信息处理(字段布局、按钮布局、相关列表)
- 支持批量描述优化DescribeSObjects 批量 API
### 依赖关系
- 依赖 `datai-salesforce-auth` 模块的 `SessionManager` 获取会话信息
- 依赖 `datai-salesforce-common` 模块的异常处理体系
- 依赖 `partner.jar` 的 Salesforce Partner API 客户端
- 依赖 `PartnerConnectionFactory` 获取连接
## 技术实现
### 核心特性
1. **描述结果转换**:使用 `DescribeResultConverter` 将 Salesforce 描述结果转换为 `Map<String, Object>` 格式
2. **字段信息处理**:支持字段类型、长度、精度、必填性等属性
3. **Picklist 字段处理**:支持选项值、默认值、有效性规则
4. **关系字段处理**:支持引用对象、关系名称、级联删除
5. **布局信息处理**:支持字段布局、按钮布局、相关列表
6. **批量描述优化**:使用 `DescribeSObjects` 批量 API 提高效率
7. **完整的异常处理**:使用 `SalesforceOperationException` 统一处理异常
8. **日志记录**:使用 SLF4J 记录操作日志
9. **固定使用 source org 类型**:所有连接均使用 `getConnection("source")`
### 代码规范
- 遵循 Spring Boot 3.x 和 Spring Security 6.x 规范
- 遵循若依框架规范
- 使用 Lombok 简化代码
- 使用 Swagger 注解生成 API 文档
- 使用 Jakarta Validation 进行参数验证
- 单元测试覆盖率不低于 80%
## 测试覆盖
### 单元测试18 个测试用例)
- `describeGlobalSuccess` - 测试 DescribeGlobal 成功场景
- `describeGlobalWithFilter` - 测试 DescribeGlobal 带过滤条件场景
- `describeGlobalConnectionException` - 测试 DescribeGlobal 连接异常场景
- `describeSObjectSuccess` - 测试 DescribeSObject 成功场景
- `describeSObjectWithFieldDetails` - 测试 DescribeSObject 带字段详情场景
- `describeSObjectNotFound` - 测试 DescribeSObject 对象不存在场景
- `describeSObjectsSuccess` - 测试 DescribeSObjects 成功场景
- `describeSObjectsWithMultipleObjects` - 测试 DescribeSObjects 多个对象场景
- `describeSObjectsPartialFailure` - 测试 DescribeSObjects 部分失败场景
- `describeLayoutSuccess` - 测试 DescribeLayout 成功场景
- `describeLayoutWithRecordType` - 测试 DescribeLayout 带记录类型场景
- `describeLayoutNotFound` - 测试 DescribeLayout 布局不存在场景
- `describeTabsSuccess` - 测试 DescribeTabs 成功场景
- `describeTabsWithFilter` - 测试 DescribeTabs 带过滤条件场景
- `describeQuickActionsSuccess` - 测试 DescribeQuickActions 成功场景
- `describeQuickActionsWithObjectType` - 测试 DescribeQuickActions 带对象类型场景
- `describeQuickActionsNotFound` - 测试 DescribeQuickActions 快速操作不存在场景
- `describeResultConverterTest` - 测试描述结果转换器
## 相关文档
- [需求文档](../requirements/sub/2026-01-28-001-05-描述功能.md)
- [设计文档](../design/2026-02-02-005-描述功能-设计.md)
- [决策记录](../decisions/2026-02-02-005-ADR-描述功能技术选型.md)
- [提示词](../prompts/2026-02-02-005-prompt-描述功能.md)
- [会话记录](../sessions/2026-01-28-001-session.md)
## 注意事项
1. **DescribeGlobal 限制**
- 返回所有用户有权限访问的对象
- 不包含系统内部对象
- 结果按对象名称字母顺序排序
2. **DescribeSObject 限制**
- 只返回用户有权限查看的字段
- 包含字段的详细元数据信息
- 支持递归获取子对象信息
3. **DescribeSObjects 限制**
- 最多支持 100 个对象同时描述
- 批量 API 提高效率
- 部分失败时返回成功和失败的结果
4. **DescribeLayout 限制**
- 需要指定对象类型
- 可选指定记录类型
- 返回所有布局类型(编辑、详情等)
5. **DescribeTabs 限制**
- 返回所有用户可见的标签页
- 包含自定义标签页
- 按显示顺序排序
6. **DescribeQuickActions 限制**
- 支持按对象类型过滤
- 返回快速操作的完整定义
- 包含字段和布局信息
## 后续优化建议
1. **性能优化**
- 考虑添加 Describe 结果缓存机制
- 优化批量描述的分批策略
- 考虑异步处理大批量描述请求
2. **功能扩展**
- 支持自定义字段的元数据获取
- 支持验证规则的元数据获取
- 支持工作流规则的元数据获取
3. **安全性增强**
- 添加字段级别的权限检查
- 添加对象级别的权限检查
- 记录敏感操作的审计日志