You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现从Business Central到Azure SQL的增量数据提取?

Business Central Web Service 增量数据获取方案

作为熟悉NAV转用BC的开发者,你可以通过以下几种实用方式实现Web Service增量数据加载,避免全量同步的低效:

1. 利用系统自带的修改时间戳字段

BC标准表大多内置了LastModifiedDateTime字段(记录最后修改的UTC时间),这是最直接的增量同步方式:

  • 每次同步前记录上次同步的结束时间戳,查询时通过OData过滤条件只拉取该时间之后变更的数据
  • 示例OData查询语句:
    GET /ODataV4/Company('CRONUS%20USA%2C%20Inc.')/Customer?$filter=LastModifiedDateTime gt 2024-05-01T00:00:00Z
    
  • 自定义表需手动添加该字段,并在表的OnModify触发器中设置自动更新:
    trigger OnModify();
    begin
        LastModifiedDateTime := CurrentDateTime();
    end;
    
  • 局限性:无法直接捕获删除操作,需结合其他方式补充。

2. 启用变更日志(Change Log)功能

BC的变更日志可以精准追踪数据的新增、修改、删除操作,适合需要完整数据生命周期同步的场景:

  • 先在系统管理模块配置要跟踪的表和字段(路径:系统管理 > 变更日志 > 变更日志设置)
  • 通过Change Log Entry表的Web Service获取变更记录,根据Entry Type字段区分操作类型(新增/修改/删除),再同步对应表的数据
  • 优势:能覆盖删除操作,还可查看具体变更的字段内容
  • 注意事项:合理配置跟踪范围,避免日志数据过多占用存储和影响性能。

3. 自定义同步标记字段

如果有特殊业务规则(比如需按批次同步),可以给目标表添加自定义字段实现增量标记:

  • 例如添加布尔型字段IsSynced,同步前查询?$filter=IsSynced eq false,同步完成后通过Web Service更新该字段为true
  • 或添加SyncCompletedDateTime字段,记录同步完成时间,下次只拉取未标记该时间的记录
  • 注意:需处理并发修改场景,避免同步冲突。

4. 分页+时间戳组合优化

当增量数据量较大时,配合OData分页参数避免请求超时:

  • 用$top限制单次返回的记录数,$skip跳过已拉取的记录,结合时间戳过滤:
    GET /ODataV4/Company('CRONUS%20USA%2C%20Inc.')/Customer?$filter=LastModifiedDateTime gt 2024-05-01T00:00:00Z&$top=1000
    
  • 记录每次分页拉取的最后一条记录的LastModifiedDateTime,作为下一页查询的起始条件,确保数据不遗漏。

额外注意事项

  • 权限配置:确保Web Service用户拥有目标表的读取权限,以及变更日志的访问权限(若使用该方案)
  • 时区统一:LastModifiedDateTime采用UTC时间,同步时需统一时区转换,避免因时间差导致漏取数据
  • 边界测试:验证同一时间多条数据修改、删除操作的捕获逻辑,以及自定义字段触发器的有效性。

内容的提问来源于stack exchange,提问作者Mayuran Parathalingam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:10:25