练习 - 读取和写入文件

已完成

应用场景

您是 CRONUS International Ltd. 的开发人员,正在学习如何在 Business Central 中处理文件。 您希望能够上传物料的照片。

任务

  • 创建一个新扩展。

  • 创建一个 codeunit。

  • 创建一个函数,用于在“物料”表的图片字段中上传图像。

  • 创建一个 PageExtension,使之包含能够运行上传函数的操作。

步骤

  1. 启动 Visual Studio Code。

  2. 选择视图 > 扩展 (Ctrl+Shift+X)。

  3. 在市场中搜索扩展搜索框中输入 AL 语言

  4. 选择绿色的安装按钮。

  5. 创建新 AL 扩展项目。 选择视图 > 命令面板... (Ctrl+Shift+P)。

  6. 在搜索框中输入 AL: Go!,然后从列表中选择命令。

  7. 接受建议的路径(或输入其他路径)。

  8. 选择目标平台。

  9. 选择 Microsoft 云沙盒作为开发终结点。

  10. 下载应用程序符号。 选择视图 > 命令面板... (Ctrl+Shift+P)。

  11. 在搜索框中输入 AL: Download symbols,然后从列表中选择命令。

  12. 如果需要,请提供您的组织凭据(Microsoft 365 帐户或 Microsoft Entra ID 帐户)。

  13. 打开 app.json 文件,将名称字段更改为读取和写入文件。 将发布者更改为 Cronus International Ltd

  14. 删除 HelloWorld.al 文件。

  15. 选择文件 > 新建文件,然后选择文件 > 保存立即保存本文件。 指定文件名 ImageManagement.CodeUnit.al

  16. 使用代码片段在该文件中创建一个新的 codeunit。 输入 tcodeunit,然后按 Tab

  17. ID 更改为 50110,将名称更改为图像管理

  18. 创建名为 ImportItemPicture 的新全局过程。

  19. 使用以下过程创建以下变量:

    > PicInStream: InStream;
    > FromFileName: Text;
    > OverrideImageQst: Label 'The existing picture will be replaced. Continue?';
    
  20. 在 ImportItemPicture 过程中为“物料”表添加一个参数。

  21. 将代码添加到 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; 
    
  22. 选择文件 > 新建文件,然后选择文件 > 保存立即保存本文件。 指定文件名 ItemCardPictureExtension.PageExt.al

  23. 使用代码片段在此文件中创建一个新的页面扩展。 输入 tpageext,然后按 Tab

  24. ID 更改为 50110,将名称更改为物料卡图片扩展

  25. 更改对象以扩展物料卡页面。

  26. 在操作部分,添加名为 ImportItemPicture 的新操作。 将标题设置为导入物料图片。 本操作应作为函数组中的最后一项操作添加。

  27. 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;
            }
        }
    } 
    
    
  28. 打开 launch.json 文件,将 startupObjectId 更改为 31,即物料列表

  29. 将扩展发布到沙盒。 选择视图 > 命令面板... (Ctrl+Shift+P)。

  30. 在搜索框中输入 AL: 发布(或者按 F5 快捷键),然后从列表中选择命令。

  31. 从列表中打开一个随机物料,如果要测试导入功能,请在函数组中选择导入物料图片操作。