DMSData XML-Format
Das DMSData-Format ist das primäre XML-Format für den Import, Export und die Bearbeitung von Objekten in enaio®. Es wird von den XML-Import-Jobs der DMS-Engine als Eingabe- und Ausgabeformat verwendet.
Die zugehörige Schema-Datei ist DMSData.xsd.
1. Verwendung
Das DMSData-Format wird von folgenden Jobs verwendet:
| Job | Verwendung |
|---|---|
Neues Objekt (Ordner, Register, Dokument) einfügen |
|
Feldinhalte eines bestehenden Objekts aktualisieren |
|
Objekt löschen |
|
Objekt kopieren |
|
Objekt verschieben |
|
Objekte über den Import-Agenten verarbeiten |
|
Typloses Dokument einem Objekttyp zuordnen |
2. XML-Struktur
Die hierarchische Struktur des DMSData-Formats:
<DMSData query_language="0">
<Archive id="-1" name="" internal_name="" osguid="">
<ObjectType type="FOLDER|REGISTER|DOCUMENT"
id="-1" maintype="-1" cotype="-1" table=""
name="" internal_name="" osguid="">
<Object object_id="-1"
folder_id="-1" folder_type="-1"
register_id="-1" register_type="-1"
maintype="-1" concurrency_timestamp="-1"
variantparent_id="-1"
sourceparent_id="-1" target_type="-1">
<!-- Suchbedingungen (optional, für Query-Operationen) -->
<Search>
<Fields>
<Field name="" internal_name="" dbname="" osguid=""
system="0" field_function="">Wert</Field>
</Fields>
<TableFields>
<TableField name="" internal_name="" dbname="">
<Field name="" internal_name="" dbname="">Wert</Field>
</TableField>
</TableFields>
<MultiFields>
<Field name="" internal_name="" dbname="">Wert</Field>
</MultiFields>
</Search>
<!-- Einfache Felder -->
<Fields>
<Field name="" internal_name="" dbname="" osguid=""
system="0" field_function="">Wert</Field>
</Fields>
<!-- Mehrfachfelder -->
<MultiFields>
<MultiField name="" internal_name="" dbname="">
<Page id="1">
<Value>Wert1</Value>
<Value>Wert2</Value>
</Page>
</MultiField>
</MultiFields>
<!-- Tabellenfelder (Modus 1: zeilenweise) -->
<TableFields>
<TableField name="" internal_name="" dbname="">
<Row line="-1">
<Field name="" internal_name="" dbname="">Wert</Field>
</Row>
</TableField>
</TableFields>
<!-- Tabellenfelder (Modus 2: Spalten/Zeilen-Ergebnis) -->
<TableFields>
<TableField name="" internal_name="" dbname="">
<Columns>
<Column name="" internal_name="" dbname="">Spaltentitel</Column>
</Columns>
<Rows>
<Row line="-1">
<Value field_function="">Wert</Value>
</Row>
</Rows>
</TableField>
</TableFields>
<!-- Notizen -->
<Remarks>
<RemarkText action="INSERT" remark_id="" color="WHITE">Notiztext</RemarkText>
<RemarkObject action="INSERT" object_id="123" object_type="4" color="WHITE"/>
</Remarks>
</Object>
</ObjectType>
</Archive>
</DMSData>
3. Elemente und Attribute
3.1. <DMSData> (Wurzelelement)
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
|
xs:long |
|
Reserviert. Muss |
3.2. <Archive>
Identifiziert das enaio®-Archiv, in dem die Operation ausgeführt wird.
Mindestens eines der Attribute id, name, internal_name oder osguid muss angegeben werden.
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
|
xs:long |
|
Numerische Archiv-ID |
|
xs:string |
— |
Anzeigename des Archivs |
|
xs:string |
— |
Interner (technischer) Name des Archivs |
|
xs:string |
— |
GUID des Archivs |
3.3. <ObjectType>
Identifiziert den Objekttyp innerhalb des Archivs.
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
|
— |
Art des Objekts: |
|
|
xs:long |
|
Numerische ID des Objekttyps. Aufbau: Objekttyp-ID. |
|
xs:short |
|
Haupttyp des Objekttyps. Wertebereich: Objekttyp-ID. |
|
xs:short |
|
Untertyp des Objekttyps (Lowword der Objekttyp-ID). |
|
xs:string |
— |
Datenbanktabellenname des Objekttyps |
|
xs:string |
— |
Anzeigename des Objekttyps |
|
xs:string |
— |
Interner (technischer) Name des Objekttyps |
|
xs:string |
— |
GUID des Objekttyps |
3.4. <Object>
Beschreibt die konkrete Objektinstanz. Enthält Angaben über den Speicherort des Objekts sowie seine Feldinhalte.
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
|
xs:long |
|
ID der Objektinstanz (benötigt für Update/Delete/Copy/Move) |
|
xs:long |
|
ID des übergeordneten Ordners (benötigt für Insert von Registern/Dokumenten) |
|
xs:long |
|
Typ des übergeordneten Ordners |
|
xs:long |
|
ID des übergeordneten Registers (benötigt für Insert von Dokumenten) |
|
xs:long |
|
Typ des übergeordneten Registers |
|
xs:long |
|
Haupttyp des Dokuments. Werte und Bedeutung: Objekttyp-ID. |
|
xs:long |
|
Zeitstempel zur Konflikterkennung bei konkurrierenden Updates |
|
xs:long |
|
ID des Elternobjekts für Variantendokumente |
|
xs:long |
|
ID des Quellobjekts (für Copy/Move-Operationen) |
|
xs:long |
|
Zieltyp (für Copy/Move-Operationen) |
3.5. <Search>
Optionaler Abschnitt innerhalb von <Object> für Suchbedingungen bei Query-Operationen.
Enthält die gleichen Unterelemente wie <Object> selbst (<Fields>, <TableFields>, <MultiFields>),
jedoch ausschließlich zur Spezifikation von Suchbedingungen.
3.6. <Fields> / <Field>
<Fields> enthält eine Liste von <Field>-Elementen für einfache Felder.
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
Textinhalt |
xs:string |
— |
Feldwert |
|
xs:string |
— |
Anzeigename des Felds |
|
xs:string |
— |
Interner (technischer) Name des Felds |
|
xs:string |
— |
Datenbankspaltename des Felds |
|
xs:string |
— |
GUID des Felds |
|
xs:short |
|
Systemfeldkennzeichen ( |
|
— |
Spezielle Feldfunktion: |
Mindestens eines der Attribute name, internal_name, dbname oder osguid muss angegeben werden, um das Feld zu identifizieren. Empfohlen wird internal_name.
|
3.7. <TableFields> / <TableField>
<TableFields> enthält eine Liste von <TableField>-Elementen für Tabellenfelder (Grid-Controls).
Jedes <TableField> wird über field_ident-Attribute identifiziert (wie <Field>) und kann in zwei Modi auftreten:
3.7.1. Modus 1 — Zeilenweise (<Row>)
Wird für Schreiboperationen (Insert/Update) verwendet. Jede Zeile enthält die Feldwerte als <Field>-Elemente.
<TableFields>
<TableField internal_name="invoice_positions">
<Row line="-1">
<Field internal_name="pos_number">1</Field>
<Field internal_name="pos_description">Beratungsleistung</Field>
<Field internal_name="pos_amount">1200.00</Field>
</Row>
<Row line="-1">
<Field internal_name="pos_number">2</Field>
<Field internal_name="pos_description">Reisekosten</Field>
<Field internal_name="pos_amount">350.00</Field>
</Row>
</TableField>
</TableFields>
Das Attribut line der <Row> gibt bei Update-Operationen die 1-basierte Zeilennummer an, deren Werte geändert werden sollen. -1 steht für eine neue Zeile (Append).
<Field> innerhalb von <Row> unterstützt die Attribute name, internal_name, dbname, osguid und field_function (kein system).
3.7.2. Modus 2 — Spalten/Zeilen (<Columns> + <Rows>)
Wird für Leseergebnisse (Query-Antworten) verwendet. Die Spaltenstruktur wird separat von den Datenzeilen beschrieben.
<TableFields>
<TableField internal_name="invoice_positions">
<Columns>
<Column internal_name="pos_number">Pos.-Nr.</Column>
<Column internal_name="pos_description">Bezeichnung</Column>
<Column internal_name="pos_amount">Betrag</Column>
</Columns>
<Rows>
<Row line="1">
<Value>1</Value>
<Value>Beratungsleistung</Value>
<Value>1200.00</Value>
</Row>
</Rows>
</TableField>
</TableFields>
<Column> unterstützt die Attribute name, internal_name, dbname.
<Value> innerhalb von <Rows>/<Row> unterstützt das Attribut field_function (fieldfunctiontypes).
3.8. <MultiFields> / <MultiField>
<MultiFields> enthält eine Liste von <MultiField>-Elementen für Mehrfachfelder.
Jedes <MultiField> enthält <Page>-Elemente (Seiten/Instanzen), die jeweils mehrere <Value>-Einträge tragen.
| Attribut | Typ | Pflicht | Beschreibung |
|---|---|---|---|
|
xs:long |
Ja |
Seiten-ID (1-basiert) |
<MultiFields>
<MultiField internal_name="keywords">
<Page id="1">
<Value>Rechnung</Value>
<Value>2024</Value>
</Page>
</MultiField>
</MultiFields>
3.9. <Remarks>
Enthält Notizen, die dem Objekt zugeordnet sind. Jede Notiz ist entweder ein Textnotiz (<RemarkText>) oder eine Objektreferenz (<RemarkObject>).
3.9.1. <RemarkText>
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
Textinhalt |
xs:string |
— |
Text der Notiz |
|
|
Auszuführende Aktion |
|
|
xs:integer |
— |
ID der Notiz (für UPDATE/DELETE erforderlich) |
|
|
Hintergrundfarbe der Notiz |
3.9.2. <RemarkObject>
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
Textinhalt |
xs:string |
— |
Optionaler Beschreibungstext |
|
|
Auszuführende Aktion |
|
|
xs:integer |
Pflicht |
ID des referenzierten Objekts |
|
xs:integer |
Pflicht |
Typ des referenzierten Objekts (Objekttyp-ID, siehe Objekttyp-ID). |
|
|
Hintergrundfarbe der Notiz |
4. Aufzählungstypen
4.2. fieldfunctiontypes
Steuert die Interpretation des Feldwerts bei bestimmten Systemfeldern.
| Wert | Bedeutung |
|---|---|
|
Feldwert explizit auf NULL setzen |
|
Feldwert ist eine Objekt-ID |
|
Feldwert ist ein Benutzername |
5. Beispiele
5.1. Dokument einfügen (dms.XMLInsert)
Ein neues Dokument wird in ein bekanntes Register eingefügt. Archiv, Objekttyp, übergeordnetes Register sowie die Feldwerte werden angegeben.
<DMSData>
<Archive internal_name="patient">
<ObjectType type="DOCUMENT" internal_name="medical_letter">
<Object register_id="4711" register_type="12" maintype="4">
<Fields>
<Field internal_name="date">2024-03-15</Field>
<Field internal_name="subject">Entlassungsbrief</Field>
<Field internal_name="physician">Dr. Müller</Field>
</Fields>
</Object>
</ObjectType>
</Archive>
</DMSData>
5.2. Felder eines Objekts aktualisieren (dms.XMLUpdate)
Ein bestehendes Objekt wird anhand seiner object_id identifiziert und einzelne Felder werden aktualisiert.
<DMSData>
<Archive internal_name="patient">
<ObjectType type="DOCUMENT" internal_name="medical_letter">
<Object object_id="9823">
<Fields>
<Field internal_name="subject">Entlassungsbrief (korrigiert)</Field>
</Fields>
</Object>
</ObjectType>
</Archive>
</DMSData>
5.3. Objekt löschen (dms.XMLDelete)
Ein Objekt wird anhand seiner object_id gelöscht. Felder müssen nicht angegeben werden.
<DMSData>
<Archive internal_name="patient">
<ObjectType type="DOCUMENT" internal_name="medical_letter">
<Object object_id="9823"/>
</ObjectType>
</Archive>
</DMSData>
5.4. Tabellenfeld mit mehreren Zeilen befüllen (dms.XMLInsert)
<DMSData>
<Archive internal_name="accounting">
<ObjectType type="DOCUMENT" internal_name="invoice">
<Object register_id="100" register_type="5" maintype="4">
<Fields>
<Field internal_name="invoice_number">2024-0042</Field>
<Field internal_name="invoice_date">2024-03-15</Field>
</Fields>
<TableFields>
<TableField internal_name="positions">
<Row>
<Field internal_name="pos_nr">1</Field>
<Field internal_name="description">Beratung</Field>
<Field internal_name="net_amount">1200.00</Field>
</Row>
<Row>
<Field internal_name="pos_nr">2</Field>
<Field internal_name="description">Reisekosten</Field>
<Field internal_name="net_amount">350.00</Field>
</Row>
</TableField>
</TableFields>
</Object>
</ObjectType>
</Archive>
</DMSData>
5.5. Feld auf NULL setzen (dms.XMLUpdate)
Der field_function-Wert NULL weist den Server an, den Feldinhalt explizit zu löschen.
<DMSData>
<Archive internal_name="patient">
<ObjectType type="DOCUMENT" internal_name="medical_letter">
<Object object_id="9823">
<Fields>
<Field internal_name="physician" field_function="NULL"/>
</Fields>
</Object>
</ObjectType>
</Archive>
</DMSData>