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

如何在Business Central中将BLOB格式PDF文件设为可下载URL?

在Business Central中实现PDF文件同域名访问的方案

一、修复自定义API方案(推荐)

你之前尝试的HttpResponseMessage无法直接设置二进制响应体,是因为Business Central的自定义API中返回该类型仅支持JSON/文本内容。正确的做法是使用API页面的Response对象输出二进制流,示例代码如下:

page 50100 "PDF Document API"
{
    PageType = API;
    APIPublisher = '你的发布者ID';
    APIGroup = '你的API组';
    APIVersion = 'v1.0';
    EntityName = 'pdfDocument';
    EntitySetName = 'pdfDocuments';
    SourceTable = "你的PDF存储表"; // 替换为实际存储PDF的表名

    layout
    {
        area(content)
        {
        }
    }

    actions
    {
        area(processing)
        {
            action(GetPDFContent)
            {
                APIPublisher = '你的发布者ID';
                APIGroup = '你的API组';
                APIVersion = 'v1.0';
                HttpMethod = GET;
                Route = 'pdfDocuments({id})/content';
                Isolated = true;

                trigger OnAction()
                var
                    InStr: InStream;
                begin
                    // 从表中读取PDF流
                    Rec.Data.CreateInStream(InStr);
                    // 设置响应头
                    Response.ContentType := 'application/pdf';
                    Response.AddHeader('Content-Disposition', 'inline; filename="Invoice.pdf"');
                    // 输出流到响应
                    Response.WriteFromStream(InStr);
                end;
            }
        }
    }
}

部署后,通过访问/api/v1.0/companies({companyId})/pdfDocuments({recordId})/content即可获取PDF文件,该地址与Business Central同域名,不会触发CORS错误。

二、替代方案:使用内置媒体资源表

如果自定义API的方式不适用,可将PDF存储到Business Central内置的Media表,通过标准API端点访问:

1. 将PDF存入Media表

procedure SavePDFToMedia()
var
    MediaRec: Record Media;
    InStr: InStream;
begin
    Rec.Data.CreateInStream(InStr);
    // 导入PDF到Media表
    MediaRec.ImportStream(InStr, 'Invoice.pdf', 'application/pdf');
    MediaRec.Insert();
    // 记录MediaRec.Id,后续用于生成访问URL
end;

2. JS控件中访问PDF

使用标准媒体资源API地址:

/api/v2.0/companies({companyId})/media({mediaId})/$value

该地址同样属于Business Central同域名,直接在JS控件中通过此URL加载PDF即可。

三、其他替代方案

若你有同域名的外部存储服务(如配置了自定义域名的Azure Blob存储),可将PDF上传至该存储,直接通过存储URL访问。但此方式需要额外的存储配置,优先级低于前两种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:10:04