datai-vue/doc/salesforce/task/ObjectUpdateTask.md

7.0 KiB
Raw Blame History

ObjectUpdateTask - 对象自动更新任务

任务信息

  • 任务名称: ObjectUpdateTask
  • Bean 名称: objectUpdateTask
  • 类路径: com.datai.integration.task.ObjectUpdateTask
  • 执行方法: autoUpdateObjects(String targetOrgType)autoUpdateObjects()
  • 模块归属: Salesforce 集成 - 定时任务
  • 创建日期: 2026-01-16
  • 最后更新: 2026-01-16

功能描述

自动扫描所有对象,判断是否满足更新条件,并调用相应的更新方法,将本地数据库中的对象数据更新到目标系统(如 Sandbox 环境或生产环境)。

执行条件

更新条件

  1. isUpdateable = true(可更新)

    • 对象必须在 Salesforce 中可更新
  2. totalRows > 0(对象有本地数据)

    • 对象在本地数据库中有数据需要更新
  3. 对象配置完整

    • api 不为空
    • label 不为空

方法参数

autoUpdateObjects(String targetOrgType)

参数名 类型 必填 描述 示例 默认值
targetOrgType String 目标ORG类型 "Sandbox", "Production" "Sandbox"

autoUpdateObjects()

无参数使用默认目标ORG类型 "Sandbox"。

执行流程

开始
  ↓
检查 targetOrgType 参数
  ↓
参数为空?
  ├─ 是 → 使用默认值 "Sandbox"
  │
  └─ 否 → 使用传入的参数值
  ↓
查询所有对象
  ↓
遍历每个对象
  ↓
判断是否满足更新条件
  ↓
满足条件?
  ├─ 是 → 调用 updateObjectDataToTarget(id, targetOrgType)
  │         ↓
  │       记录成功/失败
  │         ↓
  │       继续下一个对象
  │
  └─ 否 → 跳过,记录日志
            ↓
          继续下一个对象
  ↓
输出统计信息
  ↓
结束

执行结果统计

任务执行完成后,会输出以下统计信息:

统计项 描述
扫描对象数 共扫描的对象总数
成功更新数 成功更新的对象数量
跳过数 不满足更新条件被跳过的对象数量
失败数 更新失败的对象数量

日志输出

INFO 级别

开始执行对象自动更新任务目标ORG类型: Sandbox
目标ORG类型为空使用默认值: Sandbox
开始更新对象数据到目标系统对象ID: 1, API: Account, 目标ORG类型: Sandbox
对象数据更新成功对象ID: 1, API: Account
对象自动更新任务完成,共扫描 10 个对象,成功更新 8 个,跳过 2 个,失败 0 个

DEBUG 级别

对象不满足更新条件跳过更新对象ID: 2, API: Contact

ERROR 级别

更新对象数据失败对象ID: 3, API: Opportunity
执行对象自动更新任务失败

异常处理

任务级别异常

  • 捕获所有异常,记录错误日志
  • 不影响其他对象的更新操作
  • 任务继续执行直到所有对象处理完成

对象级别异常

  • 捕获单个对象更新失败的异常
  • 记录错误日志包含对象ID和API
  • 增加失败计数,继续处理下一个对象

配置示例

Quartz 任务配置

INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, status, remark)
VALUES (
  '对象自动更新任务',
  'DEFAULT',
  'objectUpdateTask.autoUpdateObjects',
  '0 0 4 * * ?',
  '0',
  '每天凌晨4点执行对象自动更新任务使用默认目标ORG类型Sandbox'
);

使用自定义目标ORG类型

如果需要更新到不同的目标ORG可以修改 invoke_target 字段:

UPDATE sys_job
SET invoke_target = 'objectUpdateTask.autoUpdateObjects("Production")'
WHERE job_name = '对象自动更新任务';

Cron 表达式说明

字段 说明
0 第0秒
0 第0分
4 凌晨4点
* 每天
* 每月
? 不指定

注意事项

  1. 执行时间建议

    • 建议在对象插入任务之后执行如凌晨4点
    • 确保本地数据库已有最新数据
    • 避免与实时同步任务冲突
  2. 目标ORG类型

    • 默认使用 "Sandbox" 环境
    • 更新到生产环境前,务必在 Sandbox 环境充分测试
    • 可以通过参数指定不同的目标ORG类型
  3. 对象配置要求

    • 确保对象的 api 和 label 字段不为空
    • 确保对象可更新isUpdateable = true
    • 确保对象有本地数据totalRows > 0
  4. 性能考虑

    • 对象数量较多时,任务执行时间可能较长
    • 建议监控任务执行时间,必要时调整执行频率
    • 考虑分批更新以避免API限流
  5. 数据一致性

    • 更新前确保本地数据与目标系统数据一致
    • 建议在更新前进行数据校验
    • 记录更新失败的记录,便于后续处理
    • 注意更新操作可能会覆盖目标系统中的数据
  6. 更新策略

    • 建议先在 Sandbox 环境测试更新逻辑
    • 确认更新结果无误后再执行到生产环境
    • 考虑使用增量更新策略,只更新变更的数据

相关接口

相关文档

测试信息

测试环境

  • 环境: 开发环境
  • 版本: v1.0

测试用例

测试场景 输入参数 预期结果 实际结果 状态
正常更新默认ORG 无参数 成功更新满足条件的对象到Sandbox 成功更新满足条件的对象到Sandbox 通过
正常更新自定义ORG "Production" 成功更新满足条件的对象到Production 成功更新满足条件的对象到Production 通过
跳过不可更新的对象 isUpdateable = false 跳过该对象 跳过该对象 通过
跳过无数据的对象 totalRows = 0 跳过该对象 跳过该对象 通过
更新失败 目标系统不可用 记录失败,继续下一个对象 记录失败,继续下一个对象 通过

实现细节

  • 使用 @Component("objectUpdateTask") 注解注册为 Spring Bean
  • 使用 @Slf4j 注解进行日志记录
  • 使用 @Autowired 注入 IDataiIntegrationObjectService
  • 提供两个重载方法无参方法使用默认目标ORG类型有参方法使用指定的目标ORG类型
  • 遍历所有对象,逐个判断更新条件
  • 调用 objectService.updateObjectDataToTarget(id, targetOrgType) 执行更新
  • 记录详细的日志信息,便于问题排查