{{indexmenu_n>1}}  ===== Typ-Editor ===== Der Typ-Editor erlaubt das Erstellen und Bearbeiten [[programmierung:typbibliotheken:systemverwaltetetypen|systemverwalteter Typen]]. Hierbei kann analog zum [[transformation:mappings:details|Mapping-Editor]] eine Typdefinition anhand einer Vorlage (z.B. XSD) erzeugt werden. Zusätzlich ist es aber auch möglich Strukturen gänzlich manuell zu definieren. Die so erstellte Struktur kann anschließend über die Punkte des Kontextmenüs (Baumstruktur) erweitert und über die Detail-Ansicht auf der rechten Seite editiert werden. {{:images:typeeditor_de.png?1000|}} {{:images:sign_warning.png?nolink|}}**Hinweis:** Für das erzeugen von Datentypen mit dem Typ-Editor gilt zu beachten, dass die [[https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/|C#-Schlüsselwörter]] __nicht als Datenelementnamen verwendet werden dürfen!__ ==== Erstellen von Typdefinitionen ==== Typdefinitionen systemverwalteter Typen können neben der manuellen Erstellung aus einer Reihe von Vorlagen erstellt werden: \\ * Anhand eines bestehenden Mapping-Objekts aus einer vorhandenen DLL * Anhand eines XML-Dokuments * Anhand einer XSD * Anhand einer Datenbanktabelle Bei der manuellen Erstellung ist der Unterschied zwischen einfachen komplexen und Felddefinitionen zu beachten. \\ Einfache Felddefinitionen repräsentieren hierbei Felder mit primitiven Datentypen, wohingegen komplexe Felder eine Reihe von beliebigen Felddefinitionen beinhalten bzw. Listen von Felddefinitionen darstellen können. ==== Referenzen ==== Wenn ein komplexes Feld die gleiche Liste von Felddefinitionen darstellt, empfielt es sich Referenzen zu verwenden. Eine Änderung der Struktur würde sich in allen Elementen wiederspiegeln, die diese Referenz gesetzt haben. Um Referenzen zu aktivieren befolgen Sie folgende Schritte: - Den richtigen Pfad bestimmen. Angefangen vom Wurzelelement werden alle Elemente mit einem Punkt verbunden. Z.B. Invoice.OrderReference.DocumentReference - Den resultierenden Pfad in 'Referenz Pfad' eintragen. - 'Referenz verwenden' aktivieren. Wenn dies nicht funktioniert, so ist der 'Referenz Pfad' falsch oder das Ziel ist kein komplexes Feld. Wird die Referenz deaktiviert, so wird die referenzierte Struktur kopiert. ==== Bearbeiten von Typdefinitionen ==== Innerhalb der Baumstruktur können die Elemente der Typ-Definition über die Aktionen des Kontextmenüs oder deren Tastenkürzel modifiziert und per Drag-and-Drop verschoben werden. Wird ein Element auf diese Weise auf einer einfache Felddefinition gedroppt, wird das Element nach dem Zielelement platziert. Wird es stattdessen auf einer komplexen Felddefinition gedroppt wird es innerhalb dieser platziert. Dieses Verhalten kann durch gedrückt halten der Shift-Taste insofern verändert werden, dass das Element immer vor dem Zielelement platziert wird, unabhängig von dessen Ausprägung. Die weiteren Eigenschaften der Felddefinition können in der rechten oberen Detail-Ansicht parametriert werden. === Allgemeine Eigenschaften === ^GENERATED src="eBiss.ManagedTypes.Resources.MetaProperty.de" changed=""^^ ^Eigenschaften^^ ^Name^Beschreibung^ |**Name**|Name der Eigenschaft| |**Öffentlicher Name**|Alternativer Name welcher bei der Erkennung von Nachrichteninhalten (eingehen) und bei der Erstellung von Nachrichten (ausgehend) verwendet wird| |**Öffentlichen Namen im Mapping verwenden**|Ermöglicht die Verwendung des 'öffentliche Namens' im Mapping Kontext| |**Beschreibung**|Die Beschreibung| |**Pflichtfeld**|Falls gesetz, dann werden Daten zu dem Feld erwartet| === Eigenschaften einfacher Felddefinitionen === ^GENERATED src="eBiss.ManagedTypes.Resources.SimpleProperty.de" changed=""^^ ^Eigenschaften^^ ^Name^Beschreibung^ |**Name**|Name der Eigenschaft| |**Öffentlicher Name**|Alternativer Name welcher bei der Erkennung von Nachrichteninhalten (eingehen) und bei der Erstellung von Nachrichten (ausgehend) verwendet wird| |**Öffentlichen Namen im Mapping verwenden**|Ermöglicht die Verwendung des 'öffentliche Namens' im Mapping Kontext| |**Beschreibung**|Die Beschreibung| |**Pflichtfeld**|Falls gesetz, dann werden Daten zu dem Feld erwartet| |**Typ**|Primitiver Feld-Typ| |**Größe**|Größenbegrenzung eines Textfeldes (Anzahl der Zeichen). Nicht erforderlich für Nicht-Textfelder, es sei denn, das Feld wird über eine CSV-Datei mit festen Längenangaben eingelesen.| |**Bei Überlauf**|Aktion bei Überlauf eines Textfelds| === Eigenschaften komplexer Felddefinitionen === ^GENERATED src="eBiss.ManagedTypes.Resources.ComplexProperty.de" changed=""^^ ^Eigenschaften^^ ^Name^Beschreibung^ |**Name**|Name der Eigenschaft| |**Basisklasse**| |**Öffentlicher Name**|Alternativer Name welcher bei der Erkennung von Nachrichteninhalten (eingehen) und bei der Erstellung von Nachrichten (ausgehend) verwendet wird| |**Öffentlichen Namen im Mapping verwenden**|Ermöglicht die Verwendung des 'öffentliche Namens' im Mapping Kontext| |**Beschreibung**|Die Beschreibung| |**Pflichtfeld**|Falls gesetz, dann werden Daten zu dem Feld erwartet| |**Referenz Pfad**|Pfad zu einer anderen Definition, welche als Referenz verwendet werden soll| |**Liste**|Das Element ist eine Liste der untergeordneten Strukturen| |**Min. Anzahl von Elementen**|Minimale Anzahl von erforderten Positionen innerhalb der Liste| |**Max. Anzahl von Elementen**|Maximale Anzahl von erlaubten Positionen innerhalb der Liste | |**Referenz verwenden**| In der Unteren rechten Detail-Ansicht können die Definitionen über die gegeben Felder hinaus mittels Attributen weiter parametriert werden. Wobei hier erneut auf der rechten Seite die Attribute weiter parametriert werden können. Um Attribute zu einer Felddefinition hinzuzufügen oder diese zu entfernen, können die Einträge des Kontextmenüs bzw. deren Tastenkürzel verwendet werden. === XPath berechnete Felddefinitionen === Mit Hilfe der //XPath berechneten Felddefinition// kann ein beliebiges Feld erzeugt werden. \\ Durch eine Bedingung (XPath Ausdruck) wird dem Feld ein bestimmter Wert zugewiesen. \\ Dies kann hilfreich sein, wenn z.B. innerhalb der Kopf-Ebene die Quellobjekt-Struktur eine Liste beinhaltet. \\ In einem einfachen Feld innerhalb einer der Listen ist z.B. eine Information, welche man mit einem MapFrame-Attribut (z.B. Sender) versehen möchte. \\ So könnte man in diesem Fall ein XPath berechnetes Feld erzeugen, worauf man das MapFrame-Attribut legt. \\ Dies kann wie folgt aussehen: {{:programmierung:typbibliotheken:example_xpath_berechnete_felddefinition.png|}} {{:images:sign_warning.png|}} **Achtung:** Der XPath Ausdruck kann im Map-Debugger getestet werden, wobei die XPath-Expression ab der Stelle an der das Property definiert ist, im Mapping zum Test eingefügt werden kann. ==== Weitere Aktionen ==== Bei der Verwendung von XSDs oder DB-Tabellen als Vorlage für eine Objektdefinition ergeben sich weitere Bearbeitungsmöglichkeiten. So können weitere Elemente direkt aus der jeweiligen Quelle hinzugefügt oder bestehende mit Definitionen aus einer XSD oder DB-Tabellen differenziert abgeglichen werden. Der Abgleich kann auch über den Menüpunkt "Objektdefinition" am oberen Rand des Editors vollständig, über die ganze Struktur, durchgeführt werden. ==== Objektdefinitionen aus der Datenbank ==== Bei Objektdefinitionen die von Datenbank-Tabellen abgeleitet werden, müssen zunächst in einem Dialog der Verbindungstyp und Connection String für die entsprechende Datenbank angegeben werden. Falls ein Standard-Systempartner für den aktuellen Knoten definiert wurde, für den Variablen mit den Namen "ebiss.dbadapter.connectionstring" und "ebiss.dbadapter.connectiontype" definiert sind (siehe [[howtos:dbadapter:start|]]) werden die Werte dieser Variablen verwendet um die Felder des Dialogs automat. vorzubelegen. \\ Soll die erzeugte Objektdefinition in Verbindung mit dem DB Adapter verwendet werden, ist es zudem wichtig, dass Feld "Verwendung" des [[programmierung:typbibliotheken:systemverwaltetetypen|systemverwalteten Typs]] korrekt zu setzen. {{:images:sign_warning.png?nolink|}}**Hinweis:** Bis auf weiteres unterstützt eBiss nur einen Namespace innerhalb einer Datenbank, weil der Datenbank "Connection-String" keine Möglichkeit bietet den Namensraum auszuwählen, wird i.d.R. der Standardnamensraum des SQL Users verwendet. (Die Liste der auswählbaren Tabellen zeigt aber Tabellen aller Namensräumen innerhalb der Datenbank an.) Nachfolgend finden Sie Beispiele für gängige Verbindungsarten bzw. Verbindungstypen: === MSSQL === Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword; System.Data.SqlClient.SqlConnection === MySql === Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword; MySql.Data.MySqlClient.MySqlConnection === SQLite === Data Source=c:\mydb.db;Version=3; System.Data.SQLite.SQLiteConnectionction === Oracle === user id=SYSTEM;password=;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=))(CONNECT_DATA=(SERVICE_NAME=))) Oracle.ManagedDataAccess.Client.OracleConnection oder Oracle.DataAccess.Client.OracleConnection ==== Ansichten (Views) ==== Ansichten als Basis für Typdefinitionen werden nur für die oben aufgelisteten Datenbank-Adapter unterstützt. ==== Debugging ==== Eine vorliegende Typdefinition kann über das Erzeugen von Test-Daten oder das Laden bestehender Nachrichtendaten geprüft werden. \\ Zudem sind der Export gefüllter Strukturen und das Erzeugen von Einzelassemblies zum weiteren Debugging möglich. ===== Themen ===== {{indexmenu>programmierung:typbibliotheken:typeditor.#1|navbar}}