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

Business Central SaaS环境下TempBlob生成SHA256哈希不符的解决方案问询

解决Dynamics 365 Business Central SaaS环境下PDF流SHA256哈希校验失败问题

问题场景

在Dynamics 365 Business Central SaaS环境中,通过TempBlob生成PDF文件流并计算SHA256哈希值时,结果始终无法通过接收方的校验。但将该流下载为本地文件后计算的哈希值是符合要求的;本地环境使用File类型变量生成的哈希值则完全正常。

核心原因

调用REPORT.SaveAs将PDF内容写入TempBlob的OutStream后,流的指针停留在了内容末尾。此时直接调用TempBlob.CreateInStream读取,实际读取的是空内容,导致计算出的哈希值错误。而本地File方式是重新打开文件,流指针默认重置到起始位置,因此能正确读取全部PDF内容。

解决方案

在写入OutStream后,必须手动将流指针重置到起始位置,再创建InStream读取内容;或者通过TempBlob.LoadFromStream方法确保内容被正确加载后再读取。

修正后的SaaS环境代码

TempBlob.CreateOutStream(OutStream);

SalesInvoiceHeader2.get('22-XXXXX'); // 示例编号
RecRef.GetTable(SalesInvoiceHeader2);
RecRef.SetRecFilter();
if REPORT.SaveAs(gRecSelection."Report ID", '', ReportFormat::Pdf, OutStream, RecRef) then begin
    // 重置OutStream指针到起始位置
    OutStream.Position(0);
    // 将流内容重新加载到TempBlob(可选,确保内容完整)
    TempBlob.LoadFromStream(OutStream);
    // 创建InStream读取内容
    TempBlob.CreateInStream(InStream);
end;
HashValue := CU_CryptographyMgmt.GenerateHash(Instream, Algorithm::SHA256);

关键修改点

  • 添加OutStream.Position(0):将写入后的流指针重置到开头,确保后续读取能获取全部内容
  • 可选添加TempBlob.LoadFromStream(OutStream):重新加载流内容到TempBlob,进一步避免流状态异常导致的读取问题

验证方式

生成哈希后,可将TempBlob的内容导出为本地文件,对比文件哈希值是否与生成的HashValue一致,确认修复有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:40:25