In den nachfolgenden Erläuterungen wird die NAVAX-Erweiterung E-Document - ebInterface als Beispiel verwendet.
Eigene XML-Schemaart definieren
NAVAX XML-Schemata können von verschiedenen Erweiterungen genutzt werden. Damit für eine Erweiterung eigene XML-Schemata zur Verfügung stehen, muss zuerst eine neue XML-Schemaart über eine enumextension hinzugefügt werden:
Über das Event OnGetMultipleRootRecordsAllowed in Codeunit "NCEX XML Schema Mgt." wird festgelegt, ob die Schemata der Erweiterung auf einem Root-Datensatz basieren, oder ob mehrere Datensätze erlaubt sind.
Bei ebInterface ist z.B. nur ein gebuchter Beleg pro XML-Datei erlaubt. Der Root-Datensatz muss also für ebInterface-Schemata eindeutig sein und darf nicht mehrere gebuchte Belege enthalten.
Weitere Informationen dazu finden Sie unter XML-Schemata, Root-Zeileneinstellungen.
[EventSubscriber(ObjectType::Codeunit, Codeunit::"NCEX XML Schema Mgt.", 'OnGetMultipleRootRecordsAllowed', '', false, false)]
local procedure OnGetMultipleRootRecordsAllowed(SchemaType: Enum "NCEX XML Schema Type"; var MultipleRootRecordsAllowed: Boolean)
begin
if (SchemaType = SchemaType::"NVXEB ebInterface") then
MultipleRootRecordsAllowed := false;
end;
Wichtig
if (SchemaType = SchemaType::"NVXEB ebInterface") then
Diese if-Bedingung entscheidet, für welche XML-Schemaart der Code ausgeführt werden soll und darf auf keinen Fall weggelassen werden.
Der Wert muss mit dem hinzugefügten Wert aus der enumextension übereinstimmen.
XML-Schemata öffnen
Die Seite für die XML-Schemata kann über die Codeunit "NCEX XML Schema Mgt." geöffnet werden. Fügen Sie dafür am besten eine Aktion auf der Einrichtungsseite der Erweiterung hinzu:
action(NVXEBXMLSchemasAction)
{
ApplicationArea = All;
Caption = 'XML Schemas', Comment = 'DEU="XML-Schemata"';
ToolTip = 'View or set up the ebInterface XML Schemas.', Comment = 'DEU="Zeigt die Einstellungen der ebInterface XML-Schemata an, oder richtet sie ein."';
Image = XMLSetup;
trigger OnAction()
var
NCEXXMLSchemaMgt: Codeunit "NCEX XML Schema Mgt.";
begin
NCEXXMLSchemaMgt.OpenXMLSchemas("NCEX XML Schema Type"::"NVXEB ebInterface");
end;
}
XML-Datei erstellen/prüfen
Mit der Methode CreateXMLFile in Codeunit "NCEX XML Schema Mgt." kann die XML-Datei erstellt oder überprüft werden.
Hinweis
Beim Erstellen der XML-Datei wird immer auch eine Prüfung durchgeführt.
procedure CreateXMLFile(SchemaType: Enum "NCEX XML Schema Type"; SchemaCode: Code[20]; RootRecordRef: RecordRef; var TempBlob: Codeunit "Temp Blob"; NCEXXMLExecuteAction: enum "NCEX XML Execute Action"): Boolean
Parameters
Type
Name
Description
NCEX XML Schema Type
SchemaType
Specifies the schema type.
Code
SchemaCode
Specifies the schema code.
RecordRef
RootRecordRef
Specifies the table and the record(s) for the root line of the schema.
Temp Blob
TempBlob
The Temp Blob in which the created file is returned.
NCEX XML Execute Action
NCEXXMLExecuteAction
Specifies which action should be performed.
Returns
Type
Description
Boolean
True if the file was created or checked.
Execute Action
Check
Prüft, ob die XML-Datei mit dem übergebenen RecordRef erstellt werden kann. D.h. ob alle obligatorischen Daten angegeben sind usw.
Create
Prüft und erstellt die XML-Datei mit mit dem übergebenen RecordRef. Die erstellte Datei wird im TempBlob zurückgegeben.
Create and Download
Prüft und erstellt die XML-Datei mit mit dem übergebenen RecordRef. Die erstellte Datei wird danach heruntergeladen.
Real Data Preview
Zeigt eine Vorschau der XML-Datei in einer neuen Seite an.
Reservierte Variablen hinzufügen
Über das Event OnGetAdditionalVariables in Codeunit "NCEX XML Schema Mgt." können eigene reservierte Variablen, also Variablen, die fix in allen Schemata der Erweiterung zur Verfügung stehen sollen, hinzugefügt werden.
Weitere Informationen dazu finden Sie unter XML-Schemata, Variablen.
[EventSubscriber(ObjectType::Codeunit, Codeunit::"NCEX XML Schema Mgt.", 'OnGetAdditionalVariables', '', false, false)]
local procedure OnGetAdditionalVariables(SchemaType: Enum "NCEX XML Schema Type"; var TempNCEXXMLSchemaVariable: Record "NCEX XML Schema Variable" temporary)
var
NCEXXMLSchemaMgt: Codeunit "NCEX XML Schema Mgt.";
NextPositionNo: Integer;
DETAILS_HEADERTxt: Label 'Optional pretext for all details.', Comment = 'DEU="Optionaler Vortext für alle Details."';
DETAILS_FOOTERTxt: Label 'Optional posttext for all details.', Comment = 'DEU="Optionaler Nachtext für alle Details."';
begin
if (SchemaType <> SchemaType::"NVXEB ebInterface") then
exit;
NCEXXMLSchemaMgt.AddAdditionalVariable(TempNCEXXMLSchemaVariable, NextPositionNo, '[DETAILS_HEADER]', DETAILS_HEADERTxt, false);
NCEXXMLSchemaMgt.AddAdditionalVariable(TempNCEXXMLSchemaVariable, NextPositionNo, '[DETAILS_FOOTER]', DETAILS_FOOTERTxt, false);
end;
Reservierte Variablen befüllen
Über das Event OnGetAdditionalVariableValue in Codeunit "NCEX XML Schema Mgt." werden die eigenen reservierte Variablen mit Werten befüllt.
Wichtig
Der Parameter SetVariable muss auf true gesetzt werden, damit der Wert der Variablen verändert bzw. übernommen wird. SetVariable darf aber nicht generell gesetzt werden, da sonst alle Variablen zurückgesetzt werden. SetVariable sollte nur dann gesetzt werden, wenn die Bedingung für das Befüllen der Variable erfüllt ist.
[EventSubscriber(ObjectType::Codeunit, Codeunit::"NCEX XML Schema Mgt.", 'OnGetAdditionalVariableValue', '', false, false)]
local procedure OnGetAdditionalVariableValue(SchemaType: Enum "NCEX XML Schema Type"; Variable: Code[20]; var VariableValue: Text; CurrentRecordRef: RecordRef; var SetVariable: Boolean)
var
SalesInvoiceHeader: Record "Sales Invoice Header";
CRLF: Text[2];
begin
if (SchemaType <> SchemaType::"NVXEB ebInterface") then
exit;
case Variable of
'[DETAILS_HEADER]':
case CurrentRecordRef.Number of
Database::"Sales Invoice Header":
begin
SetVariable := true;
CurrentRecordRef.SetTable(SalesInvoiceHeader);
CRLF[1] := 13;
CRLF[2] := 10;
VariableValue := 'Hello Header!' + CRLF + SalesInvoiceHeader."Posting Description";
end;
end;
'[DETAILS_FOOTER]':
case CurrentRecordRef.Number of
Database::"Sales Invoice Header":
begin
SetVariable := true;
CurrentRecordRef.SetTable(SalesInvoiceHeader);
VariableValue := 'Hello Footer!'
end;
end;
end;
end;
Berechtigungssätze
Für die NAVAX XML-Schemata sind folgende Berechtigungen notwendig: