Creazione di un oggetto XMLport usando i frammenti in Visual Studio Code
Per creare un XMLport in Visual Studio Code è possibile usare il frammento txmlport, che genererà una struttura di modello modificabile in base alle esigenze.
Un XMLport contiene due sezioni chiamate schema e requestpage. Nella sezione schema è possibile definire la struttura di XMLport. È possibile usare textelement, tableelement, fieldelement o fieldattribute per definire i nodi. Nella sezione requestpage è possibile definire il layout e le azioni per la pagina che viene visualizzata all'utente quando è in esecuzione un XMLport. È possibile utilizzare la stessa definizione di layout di una pagina scheda.
Utilizzo del formato XML
L'esempio di codice che segue fornisce informazioni su come utilizzare il formato XML tramite Visual Studio Code e il linguaggio di programmazione 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)
{
}
}
}
}
Utilizzo di un formato Fixed Text
Quando si configura XMLport per usare il formato FixedText, assicurarsi di specificare la proprietà Width per ogni nodo in XMLport. Un esempio di come completare questa azione è evidente nell'esempio di codice che segue.
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;
}
}
}
}
}
Utilizzo di un formato di testo variabile
Quando si configura XMLport per usare il formato VariableText, è possibile utilizzare FieldSeparator per specificare la stringa in grado di separare i campi. Il valore predefinito è una virgola (,).
<None>: nessun separatore di campo
<NewLine>: combinazione di caratteri CR e LF
<CR/LF>: prima un CR seguito da un LF
<CR>: valore ASCII 13
<LF>: valore ASCII 10
<Tab>: usare una tabulazione per separare i campi
Altre stringhe: la stringa letterale inserita
xmlport 50100 MyXmlport
{
Caption = 'Export Contacts to XML';
Direction = Export;
Format = VariableText;
FieldSeparator = ',';
TextEncoding = UTF8;
...
}
La proprietà RecordSeparator viene utilizzata per indicare l'azione alla fine di un record. Ha gli stessi valori della proprietà FieldSeparator. Il valore predefinito è <NewLine>.
xmlport 50100 MyXmlport
{
Caption = 'Export Contacts to XML';
Direction = Export;
Format = VariableText;
FieldSeparator = ',';
RecordSeparator = '<NewLine>';
TextEncoding = UTF8;
...
}
La proprietà FieldDelimiter viene utilizzata per impostare la stringa utilizzata per delimitare un campo.
xmlport 50100 MyXmlport
{
Caption = 'Export Contacts to XML';
Direction = Export;
Format = VariableText;
FieldSeparator = ',';
FieldDelimiter = '"';
TextEncoding = UTF8;
...
}
Se si ottengono dati da diverse tabelle in Business Central e si desidera utilizzarli in un XMLport, è possibile usare il campo TableSeparator per ottenere diversi set di nodi.
L'importazione o l'esportazione di un file di testo con un'intestazione è un tipico esempio di origini dati diverse in un XMLport. È possibile usare la tabella Integer per creare un'intestazione, quindi usare la proprietà TableSeparator per separare i due elementi della tabella. La funzione OnBeforePassVariable viene utilizzata per ottenere la didascalia di un campo ed è possibile utilizzare tale didascalia come intestazione nel documento di testo.
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")
{
}
}
}
}
}