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

dms.XMLInsert

Neues Objekt (Ordner, Register, Dokument) einfügen

dms.XMLUpdate

Feldinhalte eines bestehenden Objekts aktualisieren

dms.XMLDelete

Objekt löschen

dms.XMLCopy

Objekt kopieren

dms.XMLMove

Objekt verschieben

dms.XMLImport

Objekte über den Import-Agenten verarbeiten

dms.XMLUnknownToKnown

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

query_language

xs:long

0

Reserviert. Muss 0 sein.

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

id

xs:long

-1

Numerische Archiv-ID

name

xs:string

Anzeigename des Archivs

internal_name

xs:string

Interner (technischer) Name des Archivs

osguid

xs:string

GUID des Archivs

3.3. <ObjectType>

Identifiziert den Objekttyp innerhalb des Archivs.

Attribut Typ Standard Beschreibung

type

objecttypes

Art des Objekts: FOLDER, REGISTER oder DOCUMENT

id

xs:long

-1

Numerische ID des Objekttyps. Aufbau: Objekttyp-ID.

maintype

xs:short

-1

Haupttyp des Objekttyps. Wertebereich: Objekttyp-ID.

cotype

xs:short

-1

Untertyp des Objekttyps (Lowword der Objekttyp-ID).

table

xs:string

Datenbanktabellenname des Objekttyps

name

xs:string

Anzeigename des Objekttyps

internal_name

xs:string

Interner (technischer) Name des Objekttyps

osguid

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

object_id

xs:long

-1

ID der Objektinstanz (benötigt für Update/Delete/Copy/Move)

folder_id

xs:long

-1

ID des übergeordneten Ordners (benötigt für Insert von Registern/Dokumenten)

folder_type

xs:long

-1

Typ des übergeordneten Ordners

register_id

xs:long

-1

ID des übergeordneten Registers (benötigt für Insert von Dokumenten)

register_type

xs:long

-1

Typ des übergeordneten Registers

maintype

xs:long

-1

Haupttyp des Dokuments. Werte und Bedeutung: Objekttyp-ID.

concurrency_timestamp

xs:long

-1

Zeitstempel zur Konflikterkennung bei konkurrierenden Updates

variantparent_id

xs:long

-1

ID des Elternobjekts für Variantendokumente

sourceparent_id

xs:long

-1

ID des Quellobjekts (für Copy/Move-Operationen)

target_type

xs:long

-1

Zieltyp (für Copy/Move-Operationen)

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

name

xs:string

Anzeigename des Felds

internal_name

xs:string

Interner (technischer) Name des Felds

dbname

xs:string

Datenbankspaltename des Felds

osguid

xs:string

GUID des Felds

system

xs:short

0

Systemfeldkennzeichen (1 = Systemfeld)

field_function

fieldfunctiontypes

Spezielle Feldfunktion: NULL, OBJECT_ID oder USER

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

id (auf <Page>)

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

action

remarkactiontypes

INSERT

Auszuführende Aktion

remark_id

xs:integer

ID der Notiz (für UPDATE/DELETE erforderlich)

color

remarkcolortypes

WHITE

Hintergrundfarbe der Notiz

3.9.2. <RemarkObject>

Attribut Typ Standard Beschreibung

Textinhalt

xs:string

Optionaler Beschreibungstext

action

remarkactiontypes

INSERT

Auszuführende Aktion

object_id

xs:integer

Pflicht

ID des referenzierten Objekts

object_type

xs:integer

Pflicht

Typ des referenzierten Objekts (Objekttyp-ID, siehe Objekttyp-ID).

color

remarkcolortypes

WHITE

Hintergrundfarbe der Notiz

4. Aufzählungstypen

4.1. objecttypes

Wert Bedeutung

FOLDER

Ordner

REGISTER

Register

DOCUMENT

Dokument

4.2. fieldfunctiontypes

Steuert die Interpretation des Feldwerts bei bestimmten Systemfeldern.

Wert Bedeutung

NULL

Feldwert explizit auf NULL setzen

OBJECT_ID

Feldwert ist eine Objekt-ID

USER

Feldwert ist ein Benutzername

4.3. remarkactiontypes

Wert Bedeutung

INSERT

Neue Notiz anlegen

UPDATE

Text und Farbe der Notiz aktualisieren

UPDATE_TEXT

Nur den Text der Notiz aktualisieren

UPDATE_COLOR

Nur die Farbe der Notiz aktualisieren

DELETE

Notiz löschen

4.4. remarkcolortypes

Wert Bedeutung

WHITE

Weiß (Standard)

YELLOW

Gelb

GREEN

Grün

BLUE

Blau

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>