练习 - 读取和写入文件
应用场景
您是 CRONUS International Ltd. 的开发人员,正在学习如何在 Business Central 中处理文件。 您希望能够上传物料的照片。
任务
创建一个新扩展。
创建一个 codeunit。
创建一个函数,用于在“物料”表的图片字段中上传图像。
创建一个 PageExtension,使之包含能够运行上传函数的操作。
步骤
启动 Visual Studio Code。
选择视图 > 扩展 (Ctrl+Shift+X)。
在在市场中搜索扩展搜索框中输入 AL 语言。
选择绿色的安装按钮。
创建新 AL 扩展项目。 选择视图 > 命令面板... (Ctrl+Shift+P)。
在搜索框中输入 AL: Go!,然后从列表中选择命令。
接受建议的路径(或输入其他路径)。
选择目标平台。
选择 Microsoft 云沙盒作为开发终结点。
下载应用程序符号。 选择视图 > 命令面板... (Ctrl+Shift+P)。
在搜索框中输入 AL: Download symbols,然后从列表中选择命令。
如果需要,请提供您的组织凭据(Microsoft 365 帐户或 Microsoft Entra ID 帐户)。
打开 app.json 文件,将名称字段更改为读取和写入文件。 将发布者更改为 Cronus International Ltd。
删除 HelloWorld.al 文件。
选择文件 > 新建文件,然后选择文件 > 保存立即保存本文件。 指定文件名 ImageManagement.CodeUnit.al。
使用代码片段在该文件中创建一个新的 codeunit。 输入 tcodeunit,然后按 Tab。
将 ID 更改为 50110,将名称更改为图像管理。
创建名为 ImportItemPicture 的新全局过程。
使用以下过程创建以下变量:
> PicInStream: InStream; > FromFileName: Text; > OverrideImageQst: Label 'The existing picture will be replaced. Continue?';
在 ImportItemPicture 过程中为“物料”表添加一个参数。
将代码添加到 ImportItemPicture 函数,用于在“物料”表的图片字段中导入图片。
procedure ImportItemPicture(Item: Record Item) var PicInStream: InStream; FromFileName: Text; OverrideImageQst: Label 'The existing picture will be replaced. Continue?'; begin with Item do begin if Picture.Count() > 0 then if not Confirm(OverrideImageQst) then exit; if File.UploadIntoStream('Import', '', 'All Files (*.*)|*.*', FromFileName, PicInStream) then begin Clear(Picture); Picture.ImportStream(PicInStream, FromFileName); Modify(true); end; end; end;
选择文件 > 新建文件,然后选择文件 > 保存立即保存本文件。 指定文件名 ItemCardPictureExtension.PageExt.al。
使用代码片段在此文件中创建一个新的页面扩展。 输入 tpageext,然后按 Tab。
将 ID 更改为 50110,将名称更改为物料卡图片扩展。
更改对象以扩展物料卡页面。
在操作部分,添加名为 ImportItemPicture 的新操作。 将标题设置为导入物料图片。 本操作应作为函数组中的最后一项操作添加。
在 OnAction 触发器中,创建名为 ImageManagement 的变量,Codeunit 类型为图像管理。 调用 ImportItemPicture 过程,然后将当前记录 (Rec) 作为参数传递。
actions { // Add changes to page actions here addlast(Functions) { action(ImportItemPicture) { Caption = 'Import Item Picture'; ApplicationArea = All; Image = Import; ToolTip = 'Import Item Picture'; trigger OnAction() var ImageManagement: Codeunit ImageManagement; begin ImageManagement.ImportItemPicture(Rec); end; } } }
打开 launch.json 文件,将 startupObjectId 更改为 31,即物料列表。
将扩展发布到沙盒。 选择视图 > 命令面板... (Ctrl+Shift+P)。
在搜索框中输入 AL: 发布(或者按 F5 快捷键),然后从列表中选择命令。
从列表中打开一个随机物料,如果要测试导入功能,请在函数组中选择导入物料图片操作。