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

关于BC Deep Insert触发及响应处理的技术咨询

针对Business Central Deep Insert API的问题解答

问题1:无额外标记字段触发最后一行插入后的代码执行

OnClosePage触发器在API调用场景下不会触发,因为API请求不会像客户端那样打开/关闭页面。推荐用以下两种方案:

方案1:利用OnAfterInsertRecord结合计数判断最后一条

在API页面的全局变量中声明计数变量,在OnOpenPage中获取待插入的总记录数,每次插入后计数递增,当达到总数时执行收尾代码:

var
    TotalRecords: Integer;
    InsertedCount: Integer;

trigger OnOpenPage();
begin
    TotalRecords := Rec.Count();
    InsertedCount := 0;
end;

trigger OnAfterInsertRecord();
begin
    InsertedCount += 1;
    if InsertedCount = TotalRecords then begin
        // 执行你的代码单元
        MyCodeUnit.Run();
    end;
end;

方案2:使用OnAfterPostDataEvent(更可靠)

这个事件会在所有记录插入/提交完成后触发,无需判断是否为最后一条,直接执行收尾逻辑:

trigger OnAfterPostDataEvent(Response: HttpResponseMessage);
begin
    // 插入完成后执行代码单元
    MyCodeUnit.Run();
    // 可选:修改响应内容
    Response.Content('Deep Insert 完成,已执行收尾逻辑');
end;

问题2:触发/处理响应文本及状态

完全可以自定义API响应,常用的触发点是OnAfterPostDataEvent和OnSendResponse,也可以在OnError中处理错误响应:

  • 设置状态码:Response.SetStatusCode(201)(成功创建)或Response.SetStatusCode(400)(请求错误)
  • 设置响应文本:Response.Content('自定义响应内容')
  • 错误场景处理示例:
trigger OnError(Message: Text; var IsHandled: Boolean);
begin
    IsHandled := true;
    Response.SetStatusCode(400);
    Response.Content('插入失败:' + Message);
end;

问题3:Deep Insert工作机制及相关文档

Business Central的Deep Insert允许一次性插入主记录及其关联的子记录(比如销售订单+订单行),核心流程是API解析嵌套JSON,按关联关系依次插入主、子记录。

关键可利用的触发器包括:

  • OnOpenPage:请求开始时触发,可初始化变量或校验请求
  • OnAfterInsertRecord:每条记录插入后触发
  • OnAfterModifyRecord:记录修改后触发(如果是更新场景)
  • OnAfterPostDataEvent:所有数据提交完成后触发
  • OnSendResponse:准备发送响应前触发,可最终调整响应内容

官方文档中关于API开发的章节会详细说明这些触发点的使用场景,重点关注“Deep Insert”和“API页面触发器”相关内容。

内容的提问来源于stack exchange,提问作者Dmytro Yudin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:57:38