Criar um XMLport usando trechos no Visual Studio Code

Concluído(a)

Para criar XMLport no Visual Studio Code, use o trecho txmlport. Ele irá gerar uma estrutura de modelo que você poderá modificar para adequar às suas necessidades.

Um XMLport contém duas seções chamadas schema e requestpage. Na seção esquema, você pode definir a estrutura do XMLport. Você pode usar textelement, tableelement, fieldelement ou fieldattribute para definir os nós. Na seção requestpage, você pode definir o layout e as ações para a página que será exibida para o usuário quando um XMLport for executado. Você pode usar a mesma definição de layout que uma página de cartão.

Trabalhar com o formato XML

O exemplo de código a seguir fornece informações sobre como você pode trabalhar com o formato XML usando o Visual Studio Code e a linguagem de programação AL.

xmlport 50100 MyXmlport
{
    Caption = 'Export Contacts to XML';
    Direction = Export;
    Format = Xml;
    UseRequestPage = false;
    DefaultFieldsValidation = true;

    schema
    {
        textelement(Contacts)
        {
            XmlName = 'Contacts';

            tableelement(Contact; Contact)
            {
                RequestFilterFields = "No.";
                XmlName = 'Contact';

                fieldattribute(No; Contact."No.")
                {
                }
                fieldattribute(ExternalID; Contact."External ID")
                {
                }
                fieldelement(Name; Contact.Name)
                {
                }
                fieldelement("E-Mail"; Contact."E-Mail")
                {
                }
                fieldelement(HomePage; Contact."Home Page")
                {
                }
                textelement(Company)
                {
                    XmlName = 'Company';

                    fieldattribute(CompanyNo; Contact."Company No.")
                    {
                    }
                    fieldelement(CompanyName; Contact."Company Name")
                    {
                    }
                }
            }
        }
    }

    requestpage
    {
        layout
        {
            area(content)
            {
            }
        }

        actions
        {
            area(processing)
            {  
            }
        }
    }
}

Trabalhar com o formato de texto fixo

Ao configurar o XMLport para usar o formato FixedText, verifique se você especificou a propriedade Width de cada nó no XMLport. Veja um exemplo abaixo de como concluir essa ação.

xmlport 50100 MyXmlport
{
    Caption = 'Export Contacts to Fixed Text';
    Direction = Export;
    Format = FixedText;
    TextEncoding = UTF8;
    UseRequestPage = false;

    schema
    {
        textelement(Contacts)
        {
            tableelement(Contact; Contact)
            {
                RequestFilterFields = "No.";

                fieldelement(No; Contact."No.")
                {
                    Width = 10;
                }
                fieldelement(ExternalID; Contact."External ID")
                {
                    Width = 10;
                }
                fieldelement(Name; Contact.Name)
                {
                    Width = 20;
                }
                fieldelement("E-Mail"; Contact."E-Mail")
                {
                    Width = 50;
                }
                fieldelement(HomePage; Contact."Home Page")
                {
                    Width = 50;
                }
                fieldelement(CompanyNo; Contact."Company No.")
                {
                    Width = 10;
                }
                fieldelement(CompanyName; Contact."Company Name")
                {
                    Width = 20;
                }
            }
        }
    }
}

Trabalhar com o formato de texto variável

Ao configurar o XMLport para usar o formato VariableText, você pode usar o FieldSeparator para especificar a cadeia de caracteres usada para separar campos. O valor padrão é uma vírgula (,).

  • <None>: nenhum separador de campo

  • <NewLine>: combinação de caracteres CR e LF

  • <CR/LF>: primeiro um CR e depois um LF

  • <CR>: valor ASCII 13

  • <LF>: valor ASCII 10

  • <Tab>: use uma guia para separar os campos

  • Outras strings: a cadeia de caracteres literal inserida

xmlport 50100 MyXmlport
{
    Caption = 'Export Contacts to XML';
    Direction = Export;
    Format = VariableText;
    FieldSeparator = ',';
    TextEncoding = UTF8;
    ...
}

A propriedade RecordSeparator é usada para indicar o que acontece no fim de um registro. Ela tem os mesmos valores que a FieldSeparator. O valor padrão é <NewLine>.

xmlport 50100 MyXmlport
{
    Caption = 'Export Contacts to XML';
    Direction = Export;
    Format = VariableText;
    FieldSeparator = ',';
    RecordSeparator = '<NewLine>';
    TextEncoding = UTF8;
    ...
}

A FieldDelimiter é usada para definir a cadeia de caracteres usada para delimitar um campo.

xmlport 50100 MyXmlport
{
    Caption = 'Export Contacts to XML';
    Direction = Export;
    Format = VariableText;
    FieldSeparator = ',';
    FieldDelimiter = '"';
    TextEncoding = UTF8;
    ...
}

Se você obter dados de diferentes tabelas no Business Central e quiser usá-los em um XMLport, utilize o campo TableSeparator para obter diferentes conjuntos de nós.

Um exemplo típico de fontes de dados diferentes em um XMLport é quando você quer importar ou exportar um arquivo de texto com cabeçalho. Você pode usar a tabela Inteiros para criar um cabeçalho e, então, utilizar a propriedade TableSeparator para separar os dois elementos da tabela. A função OnBeforePassVariable é usada para obter a legenda de um campo, e você pode usar essa legenda como o cabeçalho no documento de texto.

xmlport 5050 "Export Contact"
{
    Caption = 'Export Contact';
    Direction = Export;
    Format = VariableText;
    TableSeparator = '<NewLine>';
    TextEncoding = UTF8;
    UseRequestPage = false;

    schema
    {
        textelement(Root)
        {
            tableelement(Integer; Integer)
            {
                XmlName = 'ContactHeader';
                SourceTableView = sorting(Number) where(Number = const(1));
                textelement(ContNoTitle)
                {
                    trigger OnBeforePassVariable()
                    begin
                        ContNoTitle := Contact.FieldCaption("No.");
                    end;
                }
                textelement(ContNameTitle)
                {
                    trigger OnBeforePassVariable()
                    begin
                        ContNameTitle := Contact.FieldCaption(Name);
                    end;
                }
                textelement("ContE-MailTitle")
                {
                    trigger OnBeforePassVariable()
                    begin
                        "ContE-MailTitle" := Contact.FieldCaption("E-Mail");
                    end;
                }
            }
            tableelement(Contact; Contact)
            {
                RequestFilterFields = "No.";
                XmlName = 'Contact';
                fieldelement(No; Contact."No.")
                {
                }
                fieldelement(Name; Contact.Name)
                {
                }
                fieldelement("E-Mail"; Contact."E-Mail")
                {
                }
            }
        }
    }
}