在 AL 代码中使用 XMLports

已完成

虽然您可以将 XMLports 集成到用户界面中,但用户直接导出和导入数据的实际情况不经常出现。 AL 编程语言提供了多个函数来帮助您以编程方式控制 XMLports 的行为。

除了从外部文件导入数据和将数据导出到外部文件之外,XMLports 还提供流式传输功能来帮助您直接访问数据,而不管源类型或目标类型如何。 程序员不必了解特定源或目标的技术功能,可以始终如一地轻松访问它们。

有时候,XMLport 以及源或目标的方向无法由您预先确定,不能让用户去选择,并且必须在运行期间以编程方式进行控制。 在这些情况下,您可以使用 AL 函数动态确定 XMLport 将导入还是导出数据,以及哪些流将用作源或目标。

支持通过 XMLports 进行流式传输的 AL 函数为:

  • SetSource - 指定要用作数据导入源的 InStream 变量。

  • SetDestination - 指定要用作数据导出目标的 OutStream 变量。

  • Import - 使用 SetSource 函数从指定变量导入数据。

  • Export - 使用 SetDestination 函数将数据导出至指定变量。

以下代码示例演示了代码中正运行的 XMLport Export ContactSetDestination 函数用于设置 OutStream 变量。 Temp Blob codeunit 用于将 OutStream 转换为 InStream,后者可用于提示用户以 XML 文件形式下载导出内容。 您还可以使用本 InStream 将 XMLport 数据发送到外部 Web 服务。

pageextension 50100 ContactList extends "Contact List"
{
    layout
    {
        // Add changes to page layout here
    }

    actions
    {
        // Add changes to page actions here
        addlast("F&unctions")
        {
            action(ExportContact)
            {
                ApplicationArea = All;
                Caption = 'Export Contact(s)';
                ToolTip = 'Export Contact(s)';
                Image = ExportContact;

                trigger OnAction()
                var
                    FileManagement: Codeunit "File Management";
                    TempBlob: Codeunit "Temp Blob";
                    XmlExportContact: XmlPort "Export Contact";
                    InStr: InStream;
                    OutStr: OutStream;
                    FileName: Text;
                begin
                    begin
                        FileName := 'ExportContacts.xml';

                        TempBlob.CreateOutStream(OutStr);
                        XmlExportContact.SetDestination(OutStr);
                        XmlExportContact.Export();

                        TempBlob.CreateInStream(InStr);
                        File.DownloadFromStream(InStr, 'Download XML Export', '',
                                                FileManagement.GetToFilterText('', FileName),
                                                FileName);
                    end;
                end;
            }
        }
    }

    var
        myInt: Integer;
}