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

如何实现Microsoft Business Central向JavaScript回传数据

BC与扫描设备JavaScript端双向通信实现方案

你当前已经在用的Microsoft.Dynamics.NAV.InvokeExtensibilityMethod是BC客户端扩展控件的标准通信接口,本身就支持双向调用,完全不需要通过读写txt文件的中转方案,直接按以下步骤配置即可实现BC向JS回传数据:

1. JS侧预注册全局回调方法

在扫描设备端运行的JS脚本中,将用于接收BC数据、更新屏幕显示的方法挂载到全局作用域,确保BC客户端可以直接寻址到该方法:

// 方法名可自定义,后续BC侧调用时保持名称一致即可
function UpdateScreenDisplay(businessData) {
  // 此处编写扫描屏的渲染逻辑
  const displayContent = JSON.parse(businessData);
  // 示例:将BC返回的商品名、库存数、库位信息渲染到屏幕
  scannerDisplay.show({
    title: displayContent.itemName,
    subTitle: `库存:${displayContent.stockQty}`,
    extra: `库位:${displayContent.locationCode}`
  })
}

注意:不要将该方法定义在闭包或局部作用域内,BC客户端默认从全局window对象下检索待调用的JS方法

2. BC侧(AL语言)直接调用JS方法

在BC端对应的扩展控件逻辑中,处理完JS上报的条码、查询完库存等业务数据后,直接通过控件的InvokeMethod方法向JS侧推送数据即可:

// 该段为BC侧AL代码,写在你已有的BarcodeRead事件触发逻辑中
trigger BarcodeRead(BCode: Text)
var
    Item: Record Item;
    ReturnJson: JsonObject;
    ReturnText: Text;
begin
    // 原有根据条码查询库存/业务信息的逻辑
    Item.SetRange(GTIN, BCode);
    if Item.FindFirst() then begin
        ReturnJson.Add('itemName', Item.Description);
        ReturnJson.Add('stockQty', Item.Inventory);
        ReturnJson.Add('locationCode', Item."Location Code");
        ReturnJson.WriteTo(ReturnText);
        // 核心调用:直接触发JS侧注册的回调方法,传入序列化后的业务数据
        CurrPage.ScannerAddin.InvokeMethod('UpdateScreenDisplay', ReturnText);
    end;
end;

方案对比优势

  • 无磁盘IO开销,通信延迟为毫秒级,运行效率远高于文件中转方案
  • 不存在文件锁、读写权限、路径适配等问题,稳定性更高
  • 为BC官方原生支持的扩展通信机制,兼容BC14及之后所有正式发布版本,Windows客户端、Web客户端部署场景均适用

若你使用的扫描设备是基于BC Web客户端的webview承载,注意不要开启CSP策略阻止脚本全局方法访问,否则会出现调用失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:36:25