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 — Felder, die
jede gespeicherte Seite eines Dokuments einzeln indexieren. Jedes <MultiField> enthält
<Page>-Elemente, deren id die laufende Nummer der Datei am Objekt ist (1 bis
FileProperties/@count), mit den Indexwerten als <Value>.
Mehrfachfelder sind nur an Dokumenten zulässig. Fachliche Beschreibung und die Einschränkungen
ihres Einsatzes: <MultiFields> im
DMSContent-Format.
| Attribut | Typ | Pflicht | Beschreibung |
|---|---|---|---|
|
xs:long |
Ja |
Laufende Nummer der Datei am Objekt (1-basiert, höchstens |
<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 |
Ob eine Verknüpfungsnotiz mit Beschreibungstext angelegt werden darf, hängt an einer
Servereinstellung. Ist sie nicht gesetzt, lehnt der Server das Schreiben ab:
-1042609917 "There are object links with text specified in the notes, but according to the
server settings, only object links without text can be imported." Dieselbe Verknüpfung ohne
Textinhalt wird angenommen. Gemessen an enaio®-Server 12.0.769.25242.
|
In der Antwort einer Abfrage mit remarks="1" erscheinen beide Notizarten als <Remark>-Element;
der Aufbau ist bei <Remarks> im DMSContent-Format
beschrieben. Das dortige Attribut type trägt dieselbe Farbe numerisch, die hier als color
gesetzt wird.
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>