DMSContent XML-Format

Das DMSContent-Format ist das primäre Ausgabeformat des enaio®-Servers für Suchergebnisse und Objektabrufe. Es wird von den Recherche- und Abruf-Jobs der DMS-Engine zurückgeliefert.

Die zugehörige Schema-Datei ist DMSContent.xsd.

Das Format kann entweder als LOL (lineare Trefferliste), als HOL (hierarchische Objektliste) oder als MIXED (Kombination aus beiden) vorliegen — gesteuert durch das Attribut format am Wurzelelement.

1. Verwendung

Das DMSContent-Format wird von folgenden Jobs zurückgeliefert:

Job Format Beschreibung

dms.GetResultList

LOL / HOL / MIXED

Primärer Recherche-Job — gibt Trefferlisten aus Suchanfragen zurück

dms.GetObjectDetails

HOL

Liefert vollständige Indexdaten zu einem oder mehreren Objekten

dms.ExecuteStoredQuery

LOL / HOL

Führt eine gespeicherte Suchanfrage aus

dms.GetUserTrayObjects

HOL

Liefert typloser Objekte aus der Benutzerablage (enthält <TypelessObjects>)

dms.GetWorkflowObjects

HOL

Liefert Objekte aus der Workflowablage

dms.GetDeletedObjects

HOL

Liefert gelöschte Objekte

dms.GetForeignObjects

HOL

Liefert verknüpfte Objekte aus anderen Archiven

dms.GetShadowData

HOL

Liefert Indexdaten im HOL-Format

2. Ausgabeformate (LOL vs. HOL)

Das Attribut format am <DMSContent>-Element bestimmt die interne Struktur der Ergebnisse:

Wert Format Struktur innerhalb von <ObjectType>

LOL

Liste von Listen

<Rowset> mit <Columns> (Felddefinitionen) + <Rows> (Trefferwerte) — tabellarisch

HOL

Hierarchische Objektliste

<ObjectList> mit <Object>-Elementen, die <Fields>, <BaseParams> u. a. enthalten

MIXED

Kombination

Enthält sowohl <Rowset>- als auch <ObjectList>-Strukturen

2.1. LOL — Lineare Trefferliste

Die LOL-Struktur ist das kompakte tabellarische Format: Spalten werden einmalig definiert, dann folgen die Trefferzeilen. Geeignet für große Ergebnismengen und einfache Felder.

<DMSContent format="LOL" version="5.00" timestamp="2024-03-15T10:30:00"
            user="admin" station="PC01">
  <Archive id="1" internal_name="patient">
    <ObjectType id="5" internal_name="medical_letter" type="DOCUMENT" modul="WINDOWS">
      <Rowset>
        <Columns>
          <Column internal_name="date" dbname="D001" type="DATE" ostype="DATE">Datum</Column>
          <Column internal_name="subject" dbname="D002" type="TEXT" ostype="TEXT">Betreff</Column>
          <Column internal_name="physician" dbname="D003" type="TEXT" ostype="TEXT">Arzt</Column>
        </Columns>
        <Rows>
          <Row id="9823">
            <Value>2024-03-15</Value>
            <Value>Entlassungsbrief</Value>
            <Value>Dr. Müller</Value>
          </Row>
          <Row id="9824">
            <Value>2024-03-10</Value>
            <Value>Aufnahmedokumentation</Value>
            <Value>Dr. Schmidt</Value>
          </Row>
        </Rows>
      </Rowset>
      <Statistics pagesize="20" startpos="0" total_hits="42"/>
    </ObjectType>
  </Archive>
  <Messages/>
</DMSContent>

2.2. HOL — Hierarchische Objektliste

Die HOL-Struktur liefert vollständige Objektdaten pro Instanz. Jedes <Object> enthält Felder, Basisparameter, Rechteinformationen sowie optional Kinderobjekte und Varianten.

<DMSContent format="HOL" version="5.00" timestamp="2024-03-15T10:30:00"
            user="admin" station="PC01">
  <Archive id="1" internal_name="patient">
    <ObjectType id="5" internal_name="medical_letter" type="DOCUMENT" modul="WINDOWS">
      <ObjectList>
        <Object id="9823" export_depth="0">
          <Fields>
            <Field internal_name="date" dbname="D001" type="DATE">2024-03-15</Field>
            <Field internal_name="subject" dbname="D002" type="TEXT">Entlassungsbrief</Field>
          </Fields>
          <BaseParams>
            <Creator>admin</Creator>
            <Created value="1710500000">2024-03-15</Created>
            <CreationDate>2024-03-15</CreationDate>
            <Modifier>admin</Modifier>
            <Modified value="1710500000">2024-03-15</Modified>
            <Owner osguid="550e8400-e29b-41d4-a716-446655440000">admin</Owner>
            <Links>0</Links>
            <TxtNoticeCount>0</TxtNoticeCount>
            <PdfAnnotationCount>0</PdfAnnotationCount>
            <SystemID>0</SystemID>
            <ForeignID></ForeignID>
            <ArchiveState value="1">ARCHIVED</ArchiveState>
            <Archivist>admin</Archivist>
            <ArchiveDate>2024-03-15</ArchiveDate>
            <Locked value="0">UNLOCKED</Locked>
            <Version>1</Version>
            <DocumentPageCount>3</DocumentPageCount>
          </BaseParams>
          <FileProperties extension="docx" mimetype="application/vnd.openxmlformats-officedocument.wordprocessingml.document" mimetypegroup="application" count="1" size="24576" documentpagecount="3"/>
        </Object>
      </ObjectList>
      <Statistics pagesize="20" startpos="0" total_hits="1"/>
    </ObjectType>
  </Archive>
  <Messages/>
</DMSContent>

3. Elemente und Attribute

3.1. <DMSContent> (Wurzelelement)

Attribut Typ Standard Beschreibung

format

dataformat

Pflicht

Ausgabeformat: LOL, HOL oder MIXED

system_id

xs:long

-1

Interne System-ID des Servers

lang_id

xs:long

7

Sprachkennung (7 = Deutsch)

user

xs:string

—

Angemeldeter Benutzer

station

xs:string

—

Rechner-/Stationsname des Benutzers

timestamp

xs:dateTime

—

Zeitpunkt der Antwort (ISO 8601)

version

xs:string

5.00

enaio®-Serverversion

instance

xs:string

—

Serverinstanz

output_language

xs:string

0

Ausgabesprache (0 = Serverstandard)

Kindelemente:

  • <Archive> (0..*) — Archivcontainer mit Treffern

  • <TypelessObjects> (0..1) — Typloser Objekte (nur bei bestimmten Jobs)

  • <Messages> (1) — Fehlermeldungen (leer wenn erfolgreich)

3.2. <Archive>

Gruppiert Treffer nach Archiv. Wird für jedes Archiv, das Treffer enthält, einmal ausgegeben.

Attribut Typ Standard Beschreibung

id

xs:long

-1

Numerische Archiv-ID

name

xs:string

—

Anzeigename des Archivs

internal_name

xs:string

—

Interner Name des Archivs

osguid

xs:string

—

GUID des Archivs

3.3. <ObjectType>

Beschreibt den Objekttyp der enthaltenen Treffer.

Attribut Typ Standard Beschreibung

type

objecttypes

—

Art des Objekts: FOLDER, REGISTER oder DOCUMENT

id

xs:long

-1

Numerische ID des Objekttyps

maintype

xs:short

-1

Haupttyp des Objekttyps. Wertebereich und Bedeutung: Objekttyp-ID.

cotype

xs:short

-1

Untertyp des Objekttyps (Lowword der Objekttyp-ID).

table

xs:string

—

Datenbanktabelle des Objekttyps

name

xs:string

—

Anzeigename des Objekttyps

internal_name

xs:string

—

Interner Name des Objekttyps

osguid

xs:string

—

GUID des Objekttyps

modul

modultype

UNKNOWN

Dokumentmodul (nur bei Dokumenten relevant)

encrypted

xs:short

0

1 = Objekte dieses Typs sind verschlüsselt

alias

xs:string

—

Alias-Name des Objekttyps

fulltext

xs:short

0

1 = Volltextindex vorhanden

Kindelemente:

  • Entweder <Rowset> (LOL) oder <ObjectList> (HOL)

  • Optional <SQL> — das ausgeführte SQL-Statement

  • <Statistics> — Trefferstatistik (immer vorhanden)

3.3.1. <SQL>

Das vom Server erzeugte und ausgeführte SQL-Statement, als Textinhalt eines <Select>-Elements. Wird geliefert, wenn die Anfrage sql="1" am <DMSQuery>-Element setzt. Der Block steht je <ObjectType> zwischen dem Ergebnis (<Rowset> beziehungsweise <ObjectList>) und <Statistics>.

<SQL><Select>SELECT DISTINCT d.id , d.feld1, d.feld2, … FROM object2 d, sdrel x
WHERE x.object_id=d.id AND (x.deleted=0 OR x.deleted is NULL)
AND (d.deleted is NULL or d.deleted=0)
AND (d.feld2 LIKE 'SQL\_2497273a' AND (d.zahl3 = 2 OR d.zahl3 = 3))</Select></SQL>

Der Join über die Relationstabelle sdrel und das DISTINCT sind der Grund, warum ein Objekt mit mehreren Ablageorten nur einmal im Ergebnis erscheint. Die Klausel (d.deleted is NULL or d.deleted=0) zeigt, dass der Server beide Ausprägungen von OBJECT_DELETED als „nicht gelöscht" behandelt.

Wie Bedingungen in SQL übersetzt werden — insbesondere die Platzhalter — steht bei Platzhalter in Textbedingungen.

3.4. <Rowset> (LOL)

Enthält das tabellarische Suchergebnis. Spalten werden einmalig in <Columns> definiert, die Datenwerte folgen in <Rows>.

3.4.1. <Columns> / <Column>

<Columns> enthält <Column>-Elemente für jede zurückgegebene Spalte sowie optional <TableField>-Elemente für Tabellenfelder.

<Column> trägt den Feldnamen als Textinhalt und die vollständige Felddefinition als Attribute (field_ident).

Die <Column>-Elemente innerhalb eines <TableField> tragen dieselbe Attributgruppe. Das ausgelieferte Hersteller-Schema beschreibt sie an dieser Stelle nur als Text — der Server liefert auch dort die vollständige Felddefinition. Für das HOL-Format beschreibt dasselbe Schema es im RowsetType bereits korrekt (siehe Abweichungen zwischen Schema und Serververhalten).

3.4.2. <Rows> / <Row> / <Value>

Jede <Row> entspricht einem Treffer-Objekt.

Attribut auf <Row> Typ Pflicht Beschreibung

id

xs:long

—

Objekt-ID des Treffers

Die <Value>-Elemente innerhalb einer <Row> entsprechen positionsgenau den Spalten aus <Columns>.

Attribut auf <Value> Typ Standard Beschreibung

Textinhalt

xs:string

—

Anzeigewert des Feldinhalts (formatiert/übersetzt)

value

xs:string

—

Interner Rohwert (z. B. Schlüssel eines Katalogfelds)

Bei Katalogfeldern enthält der Textinhalt den Anzeigenamen (z. B. männlich), das Attribut value den internen Schlüssel (z. B. M). Für programmatische Verarbeitung sollte value verwendet werden.

Tabellenfelder erscheinen als <TableField>-Kindelement in der <Row> (parallel zu den <Value>-Elementen).

3.4.3. Gemessenes Beispiel

Ausschnitt einer LOL-Antwort von enaio®-Server 12.0.769.25242 auf einen Dokumenttyp mit Tabellenfeld, gekürzt auf drei Ergebnisspalten und einen Treffer. Zu beachten: das <TableField> steht in <Columns> und in jeder <Row>, <Value> trägt bei übersetzten Werten den Rohwert im Attribut value, ein leerer Wert erscheint als leeres Element, und <Rights> steht je Treffer am Ende der <Row>.

<Rowset>
  <Columns>
    <Column object="Dokument" type="DOCUMENT" name="docpagecount"
            internal_name="OBJECT_DOCPAGECOUNT" system="1" datatype="INTEGER"
            dbname="docpagecount" ostype="9" osguid="1905" size="10">OBJECT_DOCPAGECOUNT</Column>
    <Column object="Dokument" type="DOCUMENT" name="lockuser"
            internal_name="OBJECT_LOCKUSER" system="1" datatype="INTEGER"
            dbname="lockuser" ostype="9" osguid="1116" size="10">OBJECT_LOCKUSER</Column>
    <Column object="Dokument" type="DOCUMENT" name="version"
            internal_name="OBJECT_VERID" system="1" datatype="INTEGER"
            dbname="version" ostype="9" osguid="1115" size="10">OBJECT_VERID</Column>
    <!-- … weitere Ergebnisspalten … -->
    <TableField object="Dokument" type="DOCUMENT" name="Table Field"
                internal_name="TableField" datatype="LIST" dbname="list1" ostype="W"
                osguid="9ABBD7483C06436E90BA7756F57A88C3" size="0">
      <Columns>
        <Column name="Table Col 1" internal_name="TableCol1" datatype="TEXT"
                dbname="feld1" ostype="X" osguid="FEDC8C33CB5B4970A47CE399D2964124"
                size="50">Table Col 1</Column>
        <Column name="Table Col 2" internal_name="TableCol2" datatype="INTEGER"
                dbname="zahl1" ostype="9" osguid="A29522A908EB4AD091D41C2248E4D8F5"
                size="8">Table Col 2</Column>
      </Columns>
    </TableField>
  </Columns>
  <Rows>
    <Row id="146373">
      <Value>2</Value>
      <Value value="0">UNLOCKED</Value>
      <Value/>
      <TableField name="Table Field" internal_name="TableField" datatype="LIST"
                  dbname="list1" ostype="W" osguid="9ABBD7483C06436E90BA7756F57A88C3" size="0">
        <Row id="1">
          <Value>Zeile pdf</Value>
          <Value>1</Value>
        </Row>
      </TableField>
      <Rights object_inserts="0" modify_index="1" delete_object="1"
              export_object="1" modify_object="1"/>
    </Row>
  </Rows>
</Rowset>

Der Spaltentext ist der interne Name des Felds (OBJECT_VERID), nicht der Anzeigename; dieser steht im Attribut name. Bei den Spalten eines Tabellenfelds ist es umgekehrt der Anzeigename (Table Col 1).

3.5. <ObjectList> (HOL)

Enthält eine Liste von <Object>-Elementen mit vollständigen Objektdaten.

3.5.1. <Object>

Attribut Typ Pflicht Beschreibung

id

xs:long

Ja

Objekt-ID

export_depth

xs:long

—

Exporttiefe (bei verschachtelten Abfragen)

Kindelemente von <Object> (alle optional):

Element Inhalt

<Fields>

Einfache Indexfelder als <Field>-Liste (Field-Element)

<MultiFields>

Mehrfachfelder (MultiFields)

<TableFields>

Tabellenfelder (TableFields)

<Rights>

Zugriffsrechte des angemeldeten Benutzers für dieses Objekt (Rights)

<BaseParams>

Basisparameter (Ersteller, Änderungsdatum, Archivierungsstatus etc.) (BaseParams)

<Remarks>

Notizen am Objekt (Remarks)

<DocumentVariants>

Variantendokumente (nur bei Dokumenten mit Varianten) (DocumentVariants)

<FileProperties>

Dateiinformationen (FileProperties)

<ChildObjects>

Kinderobjekte (bei Ordnern/Registern mit Unterstrukturen) — enthält weitere <ObjectType>-Elemente

<ExternalObjects>

Verknüpfte Objekte aus anderen Archiven (ExternalObjects)

3.5.2. <Fields> / <Field>

<Fields> enthält <Field>-Elemente, eines pro Indexfeld.

Attribut Typ Standard Beschreibung

Textinhalt

xs:string

—

Anzeigewert des Felds (formatiert)

value

xs:string

—

Interner Rohwert (bei Katalogfeldern: Schlüssel)

displayname

xs:string

—

Anzeigename des Felds (Feldbezeichnung aus dem Objekttyp)

name

xs:string

—

Anzeigename des Felds

internal_name

xs:string

—

Interner (technischer) Name des Felds

dbname

xs:string

—

Datenbankspaltname

osguid

xs:string

—

GUID des Felds

object

xs:string

—

Zugehöriger Objekttyp (bei feldübergreifenden Abfragen)

system

xs:short

0

1 = Systemfeld

type

xs:string

—

Feldtyp (intern, z. B. BOOL, DATE, DECIMAL, TEXT)

datatype

xs:string

—

Datenbankdatentyp

ostype

xs:string

—

enaio®-Felddatentyp — siehe ostype-Codes

size

xs:long

—

Feldlänge in Zeichen

visible

xs:short

1

1 = Feld ist sichtbar, 0 = versteckt

sortpos

xs:long

-1

Sortierposition des Felds in der Maske

ostype-Codes

Der Code steht an <Field>, <Column> und <TableField> und bezeichnet den Felddatentyp der Objektdefinition. Gemessen an enaio®-Server 12.0.769.25242 über drei Kabinette und neun Objekttypen, gelesen aus den <Columns>-Blöcken von LOL-Antworten — diese beschreiben die Ergebnisspalten und kommen unabhängig davon, ob die Abfrage Treffer hat.

ostype datatype Beispielfelder

#

DECIMAL

DoubleField, float

0

SMALLINT

CheckboxField

1

SMALLINT

GroupField, RadioField1

9

DATETIME

DateTime, DateTimeField

9

INTEGER

ID, OSID, Ziffern

9

TIME

Time, TimeField

A

TEXT

Characters

D

DATE

Date, DateField

G

TEXT

UpperCharacters

P

TEXT

asf

Q

TEXT

Yes_No

R

TEXT

FieldRightGroupControls

S

TEXT

mwd

T

TEXT

lr

W

LIST

TableField (Tabellenfeld)

X

TEXT

AllCharacters, AutoProposals, CatalogAddon

Z

TEXT

ZiffernAlpha

Die Zuordnung ist nicht eindeutig. 9 steht für DATETIME, INTEGER und TIME; mehrere Buchstaben stehen für TEXT. Der datatype allein bestimmt den Felddatentyp also nicht, und umgekehrt. Für eine eindeutige Auswertung sind beide Attribute heranzuziehen.
Die Tabelle listet, was auf dem Messsystem existiert. Ob weitere Codes vorkommen, ist offen — dafür wäre ein Objekttyp nötig, der jeden in der Objektdefinition möglichen Feldtyp einmal enthält.

3.5.3. <MultiFields> / <MultiField> / <Page> / <Value>

Mehrfachfelder indexieren jede gespeicherte Seite eines Dokuments einzeln. Sie sind nur an Dokumenttypen möglich und in der Objektdefinition einem eigenen Maskenbereich zugeordnet; als Datenbankfeldtyp gilt „alle Zeichen".

<Page id="n"> zählt die Dateien am Objekt, nicht die Seiten innerhalb einer Datei. Erlaubt ist 1 bis FileProperties/@count; die Zählung ist 1-basiert, id="0" wird immer abgelehnt. Eine Seitennummer ausserhalb des Bereichs quittiert der Server beim Schreiben mit:

-1042611991 During insertion of a value into multi-field <Name>, the given page number was
            found to be out of the allowed range.

Maßgeblich ist nicht <DocumentPageCount>. Ein Dokument mit einem einzelnen dreiseitigen PDF hat DocumentPageCount 3, aber count 1 — dort ist nur Seite 1 beschreibbar. Umgekehrt trägt ein Dokument mit drei angehängten Dateien count 3 und DocumentPageCount 0, und die Seiten 1 bis 3 sind beschreibbar. Auch der Zeitpunkt spielt keine Rolle: nachdem die Seitenzahl des PDF ermittelt war, blieben die Seiten 2 und 3 weiterhin abgelehnt.

Ein Aufrufer, der von der Seitenzahl im PDF ausgeht, rechnet also falsch.

Mehrfachfelder werden nur bei HOL-Anfragen geliefert. In einer LOL-Antwort fehlen sie vollständig — auch dann, wenn das Feld namentlich in den <Fields> angefordert wird; es erscheint dort weder als <MultiFields>-Block noch als Spalte.
<MultiFields>
  <MultiField internal_name="keywords" dbname="D010">
    <Page id="1">
      <Value>Rechnung</Value>
      <Value>2024</Value>
    </Page>
  </MultiField>
</MultiFields>

Beim Einsatz von Mehrfachfeldern ist mehreres zu beachten:

  • Solange ein Client ein Mehrfachfeld bearbeitet, ist die zugehörige Datenbanktabelle gesperrt. Andere Zugriffe auf dasselbe Dokument warten, ohne dass der Grund erkennbar wird.

  • Der enaio® webclient unterstützt Mehrfachfelder nicht.

  • Ein Import von Mehrfachfelddaten ist ausschließlich über das Format TEXT/ASCII möglich, mit einer eigenen Datei je Mehrfachfeld.

Der Hersteller empfiehlt daher, Mehrfachfelder zurückhaltend einzusetzen; für die meisten Anwendungsfälle leistet ein Tabellenfeld dasselbe.

Attribut an <MultiField> Typ Beschreibung

name

xs:string

Anzeigename des Mehrfachfelds

internal_name

xs:string

Interner Name

dbname

xs:string

Datenbankspaltname

osguid

xs:string

GUID des Felds

datatype

xs:string

Datenbankdatentyp — gemessen TEXT

ostype

xs:string

enaio®-Felddatentyp — gemessen X (ostype-Codes)

size

xs:long

Feldlänge in Zeichen

Das ausgelieferte Hersteller-Schema deklariert an <MultiField> nur dbname, name und internal_name. Der Server sendet dort dieselbe vollständige Attributgruppe wie an <Field> — derselbe Befund wie bei den Spalten eines LOL-Tabellenfelds.
Example 1. Gemessenes Beispiel

Ein Dokument mit drei angehängten Dateien (FileProperties/@count 3), angelegt über dms.XMLInsert und gelesen mit field_schema="ALL":

<MultiFields>
  <MultiField name="Multifield" internal_name="Moltifield" datatype="TEXT" dbname="feld3"
              ostype="X" osguid="199A8E947A154189ABD5315C3CEEF468" size="255">
    <Page id="1">
      <Value>Rechnung</Value>
      <Value>2026</Value>
    </Page>
    <Page id="2">
      <Value>Anlage</Value>
    </Page>
    <Page id="3">
      <Value>Unterschrift</Value>
    </Page>
  </MultiField>
</MultiFields>

Eine <Page> kann also mehrere <Value> tragen; das dokumentierte TEXT/ASCII-Importformat mit genau einem Indexwert je Seite bildet nicht den vollen Funktionsumfang der XML-Schnittstelle ab.

Geschrieben wird ein Mehrfachfeld über dms.XMLInsert und dms.XMLUpdate. Beim Update ersetzt ein Schreibvorgang den Wert der angegebenen Seite; die Option REPLACEMULTIFIELDS steuert das Verhältnis von Ersetzen zu Anhängen, nicht den erlaubten Seitenbereich — dieser gilt unverändert auch für das Update.

Wird das Mehrfachfeld zusätzlich als <Field> in den <Fields> der Anfrage aufgeführt, während field_schema="ALL" gilt, liefert der Server den kompletten <MultiField>-Block doppelt — inhaltlich identisch. Ohne die ausdrückliche Nennung kommt er einmal. Eine Auswertung sollte <MultiField> daher über internal_name deduplizieren.
Die fachlichen Angaben zu Maskenbereich, Sperrverhalten und Importformat stammen aus der Herstellerdokumentation zu enaio® 10.x und 11.x und sind nicht gemessen. Gemessen sind Aufbau und Attribute der Antwort sowie das Verhalten bei doppelter Nennung.

3.5.4. <TableFields> / <TableField>

Tabellenfelder im HOL-Format folgen dem RowsetType: <Columns>/<Column>+ definiert die Spalten, <Row id>/<Value>* enthält die Zeilen.

<TableFields>
  <TableField internal_name="positions" dbname="D020">
    <Columns>
      <Column internal_name="pos_nr" dbname="D021">Pos.</Column>
      <Column internal_name="description" dbname="D022">Bezeichnung</Column>
      <Column internal_name="amount" dbname="D023">Betrag</Column>
    </Columns>
    <Row id="1">
      <Value>1</Value>
      <Value>Beratung</Value>
      <Value>1200.00</Value>
    </Row>
    <Row id="2">
      <Value>2</Value>
      <Value>Reisekosten</Value>
      <Value>350.00</Value>
    </Row>
  </TableField>
</TableFields>

3.5.5. <Rights>

Zugriffsrechte des aktuell angemeldeten Benutzers für das Objekt.

Attribut Typ Standard Beschreibung

modify_index

xs:short

0

1 = Benutzer darf Indexdaten ändern

modify_object

xs:short

0

1 = Benutzer darf das Objekt bearbeiten

delete_object

xs:short

0

1 = Benutzer darf das Objekt löschen

export_object

xs:short

0

1 = Benutzer darf das Objekt exportieren

object_inserts

xs:short

0

1 = Benutzer darf Kinderobjekte anlegen

<Rights> kann <ObjectInserts>-Kindelemente enthalten, die angeben, wie viele Objekte eines bestimmten Typs unterhalb noch eingefügt werden dürfen:

Attribut auf <ObjectInserts> Typ Pflicht Beschreibung

type

xs:long

Ja

Objekttyp-ID

count

xs:long

Ja

Verbleibende erlaubte Instanzen (-1 = unbegrenzt)

Gemessen an enaio®-Server 12.0.769.25242, an einem Ordner mit object_inserts="1": es kommt ein <ObjectInserts> je erlaubtem Kindtyp, auch mit count="0", wenn dort aktuell nichts liegt.

<Rights object_inserts="1" modify_index="1" delete_object="1"
        export_object="1" modify_object="1">
  <ObjectInserts type="262145" count="0"/>
  <ObjectInserts type="6488066" count="9"/>
  <ObjectInserts type="6488067" count="0"/>
</Rights>
<ObjectInserts> erscheint nur, wenn die Anfrage object_inserts="1" setzt. An Dokumenten bleibt <Rights> leer, weil unterhalb eines Dokuments keine Objekte eingefügt werden können.

3.5.6. <BaseParams>

Basisparameter sind Systemmetadaten, die für jedes Objekt existieren.

Element Beschreibung

<Creator>

Benutzername des Erstellers

<Created value="unix-ts">

Erstellzeitpunkt als formatierter String; Attribut value = Unix-Timestamp

<CreationDate>

Erstelldatum ohne Uhrzeit

<Modifier>

Benutzername des letzten Änderers

<Modified value="unix-ts">

Änderungszeitpunkt; Attribut value = Unix-Timestamp

<Owner osguid="…​">

Besitzer (Benutzername als Text, GUID als Attribut)

<Links>

Anzahl der Verknüpfungen dieses Objekts

<TxtNoticeCount>

Anzahl der Text-Notizen am Objekt

<PdfAnnotationCount>

Anzahl der PDF-Annotationen am Objekt

<SystemID>

System-ID (für Verweisdokumente)

<ForeignID>

Fremd-ID (für Verweisdokumente aus Fremdsystemen)

<ArchiveState value="n">

Archivierungsstatus als Text (ArchiveStateType) + numerischer Wert als Attribut

<Archivist>

Benutzername des Archivierenden. Auch an nicht archivierten Dokumenten gefüllt — dann mit dem anlegenden Benutzer (siehe ArchiveStateType)

<ArchiveDate>

Datum der Archivierung. Auch an nicht archivierten Dokumenten gefüllt — dann mit dem Anlagedatum

<Locked value="n">

Checkout-Status als Text (LockedType) + numerischer Wert als Attribut

<Version>

Versionsnummer des Objekts

<RetentionDate>

Ende der Aufbewahrungsfrist

<RetentionPlannedDate>

Geplantes Ende der Aufbewahrungsfrist

<DocumentPageCount>

Seitenanzahl des Dokuments

Der dokumentspezifische Teil — von <ArchiveState> bis <DocumentPageCount> — wird nur für Dokumente geliefert. Bei Ordnern und Registern enden die <BaseParams> nach <ForeignID>. Die Elemente <TxtNoticeCount>, <PdfAnnotationCount>, <RetentionDate>, <RetentionPlannedDate> und <DocumentPageCount> fehlen im ausgelieferten Hersteller-Schema, werden vom Server aber gesendet.

3.5.7. <ExternalObjects>

Ergebnis einer archivübergreifenden Abfrage (<ExternalObjects> in der DMSQuery). Steht innerhalb des <Object>-Elements des Hauptobjekts, also je Treffer der Hauptabfrage, und enthält darunter dieselbe Struktur wie eine gewöhnliche Antwort:

<ExternalObjects> → <Archive> → <ObjectType> → <ObjectList> → <Object> plus eine eigene <Statistics> je Fremd-<ObjectType>.

Das verschachtelte <Archive> trägt dieselben Identifikationsattribute wie das <Archive> der obersten Ebene (name, id, osguid).

<Object id="145980">
  <Fields>
    <Field internal_name="Name">XEDoc_8fc57e77</Field>
    <Field internal_name="StringField">XLINK_8fc57e77</Field>
  </Fields>
  <ExternalObjects>
    <Archive name="Unittest" id="0" osguid="C5B13DB661AC456A81CF70072ADEF5B0">
      <ObjectType name="Unittest" id="0" internal_name="Unittest" type="FOLDER" table="stamm1">
        <ObjectList>
          <Object id="145981">
            <Fields>
              <Field internal_name="StringField">XLINK_8fc57e77</Field>
            </Fields>
          </Object>
        </ObjectList>
        <Statistics startpos="0" pagesize="-1" total_hits="1"/>
      </ObjectType>
    </Archive>
  </ExternalObjects>
</Object>
Lässt sich die Bedingung des Fremdarchivs nicht auflösen — etwa weil ein <LinkedValue ref="…"/> auf einen nicht vergebenen Alias zeigt — bleibt die <ObjectList> leer und total_hits steht auf 0. Einen Hinweis darauf gibt der Server nicht; <Messages> bleibt leer.

3.5.8. <Remarks>

Notizen am Objekt. Wird genau dann geliefert, wenn die Anfrage das Attribut remarks="1" am <DMSQuery>-Element setzt, und steht dann an jedem Objekt — auch an Ordnern und Registern und auch dann, wenn keine Notiz hinterlegt ist. Ohne das Attribut fehlt das Element ganz.

Position: direkt nach <BaseParams>, vor <DocumentVariants> beziehungsweise <ChildObjects>.

Jede Notiz steht als <Remark>-Element darin. Es gibt zwei Ausprägungen, unterschieden durch relation:

  • Objektnotiz (relation="0") — eine farbige Textnotiz am Objekt. type trägt die Farbe, <Text> den Notiztext.

  • Notizverknüpfung (relation="1") — eine Verknüpfung zu einem anderen Objekt. type ist 0, id ist 0, medium ist 0, und <Creator>, <Created>, <Modifier>, <Modified> sowie <Text> bleiben leer. Die Verknüpfung erscheint auf beiden beteiligten Objekten, unterschieden durch relationdirection.

Attribut an <Remark> Typ Beschreibung

id

xs:long

Notiz-ID. Bei einer Notizverknüpfung 0

type

xs:short

Farbe der Objektnotiz: 1 = WHITE, 2 = YELLOW, 3 = GREEN, 4 = BLUE. Bei einer Notizverknüpfung 0. Entspricht dem Attribut color von <RemarkText> beim Schreiben

relation

xs:short

0 = Objektnotiz, 1 = Notizverknüpfung

relationdirection

xs:short

Nur bei relation="1": 0 am verknüpfenden Objekt, 1 am verknüpften Objekt

relatedobjectid

xs:long

Nur bei relation="1": Objekt-ID der Gegenseite

relatedobjecttype

xs:long

Nur bei relation="1": Objekttyp-ID der Gegenseite (Objekttyp-ID)

medium

xs:long

Medium-ID der Notizdatei; 0 bei einer Notizverknüpfung. Siehe die Warnung unterhalb der Tabelle

medium taugt nicht zum Unterscheiden von Objektnotiz und Notizverknüpfung, dafür ist relation da. Der Wert ist die Medium-ID der Notizdatei und keine Konstante: bei Ablage im Dateisystem die ID des Systemmediums NOTE (auf dem gemessenen Server 5), bei Ablage in der Datenbank 0, weil es keine Notizdatei gibt. In der Spalte remarks.medium steht im Datenbankfall NULL und nicht 0. Gemessen an enaio®-Server 12.0.

Kindelemente, immer alle fünf und in dieser Reihenfolge:

Element Inhalt

<Creator id="n">

Anlegername, Benutzer-ID im Attribut id

<Created value="n">

Anlegedatum als formatierter Text, Unix-Zeitstempel im Attribut value

<Modifier id="n">

Letzter Bearbeiter, Benutzer-ID im Attribut id

<Modified value="n">

Datum der letzten Bearbeitung, Unix-Zeitstempel im Attribut value

<Text id="…">

Notiztext. Gefüllt bei der Objektnotiz, leer bei der Notizverknüpfung. Das Attribut id trägt bei Ablage in der Datenbank die textid des Textes in osremarktext und bleibt bei Ablage im Dateisystem leer

<Remarks>
  <Remark id="146579" type="2" relation="0" medium="5">
    <Creator id="2">ROOT</Creator>
    <Created value="1790332281">25.09.2026 12:31:21</Created>
    <Modifier id="2">ROOT</Modifier>
    <Modified value="1790332281">25.09.2026 12:31:21</Modified>
    <Text id="">Erste Objektnotiz</Text>
  </Remark>
  <Remark id="0" type="0" relation="1" relationdirection="0"
          relatedobjectid="146380" relatedobjecttype="262145" medium="0">
    <Creator id="0"/>
    <Created value="0"/>
    <Modifier id="0"/>
    <Modified value="0"/>
    <Text id=""/>
  </Remark>
</Remarks>

Das Beispiel stammt von einem Server mit Notizablage im Dateisystem: medium trägt die Medium-ID und <Text id> ist leer. Bei Ablage in der Datenbank steht an der Objektnotiz medium="0" und <Text id> die textid.

<TxtNoticeCount> in den <BaseParams> zählt ausschließlich die Objektnotizen. Notizverknüpfungen gehen nicht in den Zähler ein — ein Objekt mit TxtNoticeCount 0 kann sehr wohl <Remark>-Elemente tragen.

Angelegt werden Notizen über dms.XMLInsert und dms.XMLUpdate mit <RemarkText> beziehungsweise <RemarkObject> (DMSData).

3.5.9. <DocumentVariants> / <DocumentVariant>

Varianten sind rekursiv aufgebaut: jede Variante kann selbst wieder Untervarianten enthalten.

Attribut Typ Pflicht Beschreibung

doc_id

xs:long

Ja

Objekt-ID dieser Variante

doc_parent

xs:long

Ja

Objekt-ID der übergeordneten Variante (0 bei der Wurzelvariante)

doc_ver

xs:string

Ja

Versionsbezeichnung. Die Wurzelvariante trägt Original, abgeleitete Varianten eine dreiteilige Nummer (z. B. 1.0.0)

is_active

xs:short

Ja

1 = aktive Variante

3.5.10. <FileProperties>

Eigenschaften der am Dokument hinterlegten Datei. Leeres Element, alle Angaben stehen in Attributen.

Attribut Typ Beschreibung

extension

xs:string

Dateierweiterung ohne Punkt (z. B. docx)

mimetype

xs:string

MIME-Typ der Datei

mimetypegroup

xs:string

Gruppe des Dateityps als Grossbuchstaben-Kürzel (enaio®-eigen, nicht der MIME-Haupttyp) — siehe gemessene Werte

count

xs:long

Anzahl der Dateien des Dokuments

size

xs:long

Dateigröße in Byte

iconid

xs:long

ID des Dateisymbols

documentpagecount

xs:long

Seitenanzahl des Dokuments. Erscheint nur, wenn die Seitenzahl größer 0 ist — was unmittelbar nach dem Import auch bei einem seitenbehafteten Dokument noch nicht der Fall ist

Die Attribute mimetypegroup, iconid und documentpagecount fehlen im ausgelieferten Hersteller-Schema, werden vom Server aber gesendet. documentpagecount steht dabei nur an Dokumenten mit einer Seitenzahl größer 0 — gemessen an einem zweiseitigen PDF; bei JPG, DOCX, XLSX und TXT fehlt das Attribut vollständig. Die Seitenzahl steht parallel dazu immer als <DocumentPageCount> in den <BaseParams>, dort auch mit 0.
Die Seitenzahl wird nachträglich von einem serverseitigen Schritt ermittelt. Unmittelbar nach dem Import meldet auch ein mehrseitiges Dokument <DocumentPageCount>0</DocumentPageCount> und lässt documentpagecount weg; gemessen stand der richtige Wert nach rund zwei Minuten. Eine Seitenzahl von 0 direkt nach dem Import sagt daher nichts über die Datei aus (siehe Zeitlicher Ablauf nach dem Import).
Gemessene Werte von mimetypegroup

Die Gruppe ist ein kurzes Kürzel je Anwendungsfamilie, nicht der Präfix des MIME-Typs. Gemessen an enaio®-Server 12.0.769.25242 mit je einem Dokument pro Format:

Endung mimetype mimetypegroup iconid

pdf

application/pdf

PDF

1073743982

jpg

image/jpeg

IMAGE

1073743984

docx

application/vnd.openxmlformats-officedocument.wordprocessingml.document

WORD

1073743959

xlsx

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

EXCEL

1073744006

txt

text/plain

TXT

1073743978

Fünf Messpunkte sagen nichts darüber, ob die Menge der Kürzel abgeschlossen ist. Weitere Formate (msg, tif, zip, pptx) sind nicht gemessen.

3.6. <TypelessObjects> / <TypelessObject>

Typlose Objekte sind Dokumente ohne zugewiesenen Objekttyp — z. B. Dokumente in der Benutzerablage oder der Workflowablage. Sie werden von <Archive> getrennt direkt unter <DMSContent> aufgeführt.

Eine Antwort mit typlosen Objekten, etwa von dms.GetUserTrayObjects, besteht nur aus diesem Block und <Messages> — ohne <Archive> und ohne <Statistics>. Das Attribut format am <DMSContent>-Wurzelelement steht dabei auf LOL.

<DMSContent format="LOL" version="12.0.769.25242" timestamp="2026-09-25T12:50:48"
            user="ROOT" station="devel-uw-2026">
  <TypelessObjects>
    <TypelessObject id="147247" maintype="4" module="WINDOWS" user="ROOT"
                    timestamp="1790333447"/>
  </TypelessObjects>
  <Messages/>
</DMSContent>
Attribut Typ Pflicht Beschreibung

id

xs:long

Ja

Objekt-ID

maintype

xs:short

Ja

Dokumenthaupttyp. Werte und Bedeutung: Objekttyp-ID.

module

modultype

Ja

Dokumentmodul

user

xs:string

Ja

Benutzername des Eigentümers

pagecount

xs:long

—

Seitenanzahl

filesize

xs:long

—

Dateigröße in Bytes

mimetypeid

xs:long

—

MIME-Typ-ID

timestamp

xs:string

Ja

Zeitstempel des Objekts als Unix-Zeitstempel

Das ausgelieferte Hersteller-Schema führt alle acht Attribute als Pflicht. Gemessen an enaio®-Server 12.0.769.25242 sendet der Server nur id, maintype, module, user und timestamp — pagecount, filesize und mimetypeid fehlen auch dann, wenn das Objekt eine Datei trägt. Die zu dieser Dokumentation gepflegte Schema-Fassung führt die drei deshalb als optional.
Typloses Objekt anlegen und wieder entfernen

Angelegt wird ein typloses Objekt über dms.XMLInsert mit Options="INUSERTRAY=1;TYPELESS=1", einer Datei und einem Rumpf ohne Indexdaten:

<DMSData>
  <Archive internal_name="Unittest_DMS">
    <ObjectType type="DOCUMENT">
      <Object maintype="4"/>
    </ObjectType>
  </Archive>
</DMSData>

Der Haupttyp muss am <Object> stehen. Am <ObjectType> wird er für diesen Fall nicht ausgewertet, obwohl DMSData das Attribut an beiden Stellen führt.

Fehlversuch Serverantwort

Rumpf mit <Fields>

-1042610069 — „The document should be sent to the DMS without type, but index data have been specified for the document."

maintype nur am <ObjectType>

-1042611918 — „The document should be added without type to the workflow or user tray, but no main type was specified."

Entfernt wird es über dms.XMLDelete, ebenfalls mit Options="INUSERTRAY=1;TYPELESS=1" und <Object object_id="…" maintype="4"/>. Ohne TYPELESS=1 antwortet der Server mit -1042610059 — „There is not enough information to identify the object type."

3.7. <Messages> / <Message>

Fehlermeldungen des Servers. Das Element steht am Ende jeder Antwort, direkt unter <DMSContent>.

In allen bisher gemessenen Konstellationen ist <Messages> leer. Fehler meldet der Server über den Rückgabewert des Jobs, nicht über diesen Block.

Gemessen an enaio®-Server 12.0.769.25242 über 30 aufgenommene Antworten quer durch HOL, LOL, Benutzerkorb, sql="1", Fremdschrank, typenlose Objekte, archivierte Dokumente und drei Benutzersitzungen: ausnahmslos <Messages></Messages>. Acht gezielte Provokationsversuche blieben ebenfalls ohne Inhalt — Volltextbedingung ohne Volltext-Engine, maxhits kleiner als die Treffermenge, Bedingung ohne Treffer, zwei <Archive>-Blöcke mit einem leeren Ergebnis, <LinkedValue> mit nicht auflösbarem ref, ein unbekannter Feldname in <Fields>, sortpos auf einem unbekannten Feld und ein ungültiger field_schema-Wert.

Die Fälle teilen sich sauber in zwei Gruppen: entweder bricht der Job mit einem Fehlercode ab, oder er läuft durch und schweigt. Einen Mittelweg, der <Messages> füllt, gibt es in keinem gemessenen Fall. Welche Konstellation den Block füllt, ist damit unbelegt — eine Auswertung sollte sich nicht darauf verlassen, hier Warnungen zu finden.

Attribut Typ Pflicht Beschreibung

Textinhalt

xs:string

—

Beschreibung des Fehlers

faultcode

xs:long

Ja

Interner Fehlercode

sourcecode

xs:long

Ja

Quellcode (identifiziert die Server-Komponente)

3.8. <Statistics>

Paginierungsinformationen — immer vorhanden, auch wenn keine Treffer vorliegen.

Attribut Typ Pflicht Beschreibung

pagesize

xs:long

Ja

Maximale Trefferzahl pro Seite (konfiguriert in der Anfrage)

startpos

xs:long

Ja

Startposition (0-basiert) des ersten gelieferten Treffers

total_hits

xs:long

Ja

Gesamtanzahl der Treffer (über alle Seiten)

Für seitenweises Blättern: Gesamtseitenzahl = ⌈total_hits / pagesize⌉. Die nächste Seite wird durch startpos += pagesize angefordert.

4. Aufzählungstypen

4.1. dataformat

Wert Bedeutung

LOL

List of Lists — tabellarisches Format mit <Rowset>

HOL

Hierarchical Object List — Objektformat mit <ObjectList>

MIXED

Kombination aus LOL und HOL

4.2. objecttypes

Wert Bedeutung

FOLDER

Ordner

REGISTER

Register

DOCUMENT

Dokument

4.3. modultype

Wert Haupttyp Beschreibung

GRAYSCALE

1

Graustufen-Dokument

BLACKWHITE

2

Schwarz/Weiß-Dokument

COLOR

3

Farb-Dokument

WINDOWS

4

Windows-Dokument (Office, PDF, …)

MULTIMEDIA

5

Multimedia-Dokument

EMAIL

6

E-Mail-Dokument

XML

7

XML-Dokument

CONTAINER

8

Container-Dokument

MULTIDOC

—

Mehrseitiges zusammengesetztes Dokument

REFERENCE

—

Verweisdokument (Referenz auf Fremdsystem)

UNKNOWN

—

Unbekannter Dokumenttyp

4.4. ArchiveStateType

Textinhalt von <ArchiveState>; das Attribut value trägt den zugehörigen Bitwert, denselben wie das Systemfeld OBJECT_FLAGS.

Wert value Bedeutung

ARCHIVABLE

0x00000001 (1)

Dokument kann archiviert werden (freigegeben)

NOT_ARCHIVABLE

0x00000002 (2)

Dokument kann nicht archiviert werden

NO_PAGES

0x00000008 (8)

Dokument hat keine Seiten

ARCHIVED

0x00000010 (16)

Dokument ist archiviert

PAGE_ERROR

—

Fehler bei einer oder mehreren Seiten

REFERENCE

—

Verweisdokument — kein eigenes Archivat

UNKNOWN

—

Status unbekannt

Die vier Bitwerte sind an enaio®-Server 12.0.769.25242 gemessen. Für PAGE_ERROR, REFERENCE und UNKNOWN liegt keine Messung vor.
Ein Dokument gilt nur dann als archiviert, wenn <ArchiveState> den Wert ARCHIVED trägt. <Archivist> und <ArchiveDate> sind auch an nicht archivierten Dokumenten gefüllt — gemessen bei NOT_ARCHIVABLE und NO_PAGES mit dem anlegenden Benutzer und dem Anlagedatum. Eine Prüfung auf „ist archiviert" über diese beiden Elemente ist daher falsch.
Example 2. Zeitlicher Ablauf nach dem Import

Der Übergang nach ARCHIVED stammt nicht vom Import, sondern von einem eigenen Archivierungslauf. Gemessen an fünf Dokumenten mit je zwei Seiten:

Zeitpunkt nach dem Import Seitenzahl <ArchiveState>

sofort

0, Attribut documentpagecount fehlt

ARCHIVABLE

nach 2 Minuten

2

ARCHIVABLE

nach 5 und nach 10 Minuten

2

ARCHIVED

Die Seitenzahl füllt ein serverseitiger Schritt innerhalb der ersten Minuten, der Archivierungslauf folgt getrennt davon. Wer unmittelbar nach dem Import liest, bekommt für beides einen Zwischenstand.

4.5. LockedType

Textinhalt von <Locked> und des Systemfelds OBJECT_LOCKUSER.

Wert Bedeutung

UNLOCKED

Dokument ist nicht ausgecheckt

SELF

Dokument ist vom Benutzer der abfragenden Sitzung ausgecheckt

OTHERS

Dokument ist von einem anderen Benutzer ausgecheckt

EXTERNAL

Dokument ist extern gesperrt

Das Attribut value ist keine Zustandskennziffer, sondern die ID des sperrenden Benutzers (benutzer.id). 0 steht für nicht gesperrt, 1 für eine externe Sperre, jeder andere Wert ist eine Benutzer-ID aus mng.GetUserList. Aus value lässt sich der Textzustand daher nicht ableiten.

SELF und OTHERS sind zudem nicht gespeichert, sondern werden gegen den Benutzer der abfragenden Sitzung ausgewertet: dasselbe Dokument meldet für den sperrenden Benutzer SELF und für jeden anderen OTHERS, während value in beiden Fällen dieselbe Benutzer-ID trägt. Eine Auswertung, die auf den Sperrenden abzielt, muss value heranziehen, nicht den Text.

Example 3. Gemessen an enaio®-Server 12.0.769.25242

Vier Dokumente in einer Antwort, abgefragt aus der Sitzung von ROOT (Benutzer-ID 2):

Textinhalt value Wie erzeugt

UNLOCKED

0

unverändert, und nach dms.UndoCheckOutDocument

EXTERNAL

1

dms.CheckOutDocument mit Flags=1

SELF

2

dms.CheckOutDocument mit Flags=0 durch ROOT — 2 ist dessen Benutzer-ID

OTHERS

79

Checkout durch einen zweiten Benutzer mit der ID 79

Die 2 bei SELF ist also kein Zustandscode, sondern die ID von ROOT.

Dieselben vier Dokumente, dieselbe Anfrage, einmal als ROOT (ID 2) und einmal als ein zweiter Benutzer (ID 79) über $$$SwitchContextUserName$$$:

Dokument Sicht ROOT Sicht Benutzer 79

von ROOT gesperrt

<Locked value="2">SELF</Locked>

<Locked value="2">OTHERS</Locked>

von Benutzer 79 gesperrt

<Locked value="79">OTHERS</Locked>

<Locked value="79">SELF</Locked>

extern gesperrt

<Locked value="1">EXTERNAL</Locked>

<Locked value="1">EXTERNAL</Locked>

frei

<Locked value="0">UNLOCKED</Locked>

<Locked value="0">UNLOCKED</Locked>

value bleibt in jeder Zeile gleich, nur die beiden benutzerbezogenen Texte wechseln. EXTERNAL und UNLOCKED sind in beiden Sichten identisch, weil sie sich auf keinen Benutzer beziehen.

5. Vollständiges Beispiel (HOL, gemessene Antwort)

Ausschnitt einer HOL-Antwort von enaio®-Server 12.0.769.25242 auf ein Dokument mit allen Feldtypen, einem Tabellenfeld, einer Variante und einer angehängten Datei. Abgefragt mit baseparams="1" fileinfo="1" status="1" rights="1" variants="1" object_inserts="1" remarks="1". Die Feldliste ist gekürzt, alles Übrige ist unverändert.

<DMSContent format="HOL" output_language="0" version="12.0.769.25242"
            timestamp="2026-09-25T12:01:57" user="ROOT" station="devel-uw-2026"
            instance="__main__">
  <Archive name="Unittest DMS" id="1" osguid="90F077D2CC264BA194997584DC423B23">
    <ObjectType name="Dokument" id="262145" maintype="4" cotype="1"
                osguid="8A6E3E8CDE6D4F4B90D05399E032EB20"
                internal_name="Unittest_DMS_Document" type="DOCUMENT"
                modul="MULTIDOC" table="object2">
      <ObjectList>
        <Object id="145156">
          <Fields>
            <Field value="0" name="lockuser" internal_name="OBJECT_LOCKUSER" system="1"
                   datatype="INTEGER" dbname="lockuser" ostype="9" osguid="1116"
                   size="10">UNLOCKED</Field>
            <Field value="2" name="flags" internal_name="OBJECT_FLAGS" system="1"
                   datatype="INTEGER" dbname="flags" ostype="9" osguid="1102"
                   size="10">NOT_ARCHIVABLE</Field>
            <Field name="Name" internal_name="Name" datatype="TEXT" dbname="feld1"
                   ostype="X" osguid="FE49BE50330C47E6BE385A33513CB547"
                   size="255">HOLDoc_2a3dfe80</Field>
            <Field name="Date Field" internal_name="DateField" datatype="DATE"
                   dbname="datum1" ostype="D" osguid="55550F928F67497D8EA443D3802BA6F6"
                   size="10">17.03.2026</Field>
            <Field value="1773754325" name="DateTime Field" internal_name="DateTimeField"
                   datatype="DATETIME" dbname="zahl1" ostype="9"
                   osguid="FFD713B64D4C44AF9F7D9981CECFBA52"
                   size="19">17.03.2026 14:32:05</Field>
            <Field name="Double Field" internal_name="DoubleField" datatype="DECIMAL"
                   dbname="real1" ostype="#" osguid="80AFE59C1BF5482092AF4E2EF1EFF294"
                   size="15">1234.56</Field>
            <!-- … weitere Index- und Systemfelder … -->
          </Fields>
          <TableFields>
            <TableField name="Table Field" internal_name="TableField" datatype="LIST"
                        dbname="list1" ostype="W"
                        osguid="9ABBD7483C06436E90BA7756F57A88C3" size="0">
              <Columns>
                <Column name="Table Col 1" internal_name="TableCol1" datatype="TEXT"
                        dbname="feld1" ostype="X"
                        osguid="FEDC8C33CB5B4970A47CE399D2964124" size="50">Table Col 1</Column>
                <Column name="Table Col 2" internal_name="TableCol2" datatype="INTEGER"
                        dbname="zahl1" ostype="9"
                        osguid="A29522A908EB4AD091D41C2248E4D8F5" size="8">Table Col 2</Column>
              </Columns>
              <Row id="1">
                <Value>Pos 1</Value>
                <Value>3</Value>
              </Row>
              <Row id="2">
                <Value>Pos 2</Value>
                <Value>7</Value>
              </Row>
            </TableField>
          </TableFields>
          <Rights object_inserts="1" modify_index="1" delete_object="1"
                  export_object="1" modify_object="1"/>
          <BaseParams>
            <Creator>ROOT</Creator>
            <Created value="1790330511">25.09.2026 12:01:51</Created>
            <CreationDate>25.09.2026</CreationDate>
            <Modifier>ROOT</Modifier>
            <Modified value="1790330512">25.09.2026 12:01:52</Modified>
            <Owner osguid="35100CD4D441420B90811DC90766D64F">ROOT</Owner>
            <Links>0</Links>
            <TxtNoticeCount>0</TxtNoticeCount>
            <PdfAnnotationCount>0</PdfAnnotationCount>
            <SystemID>0</SystemID>
            <ForeignID></ForeignID>
            <ArchiveState value="2">NOT_ARCHIVABLE</ArchiveState>
            <Archivist>ROOT</Archivist>
            <ArchiveDate>25.09.2026</ArchiveDate>
            <Locked value="0">UNLOCKED</Locked>
            <Version>1</Version>
            <RetentionDate></RetentionDate>
            <RetentionPlannedDate></RetentionPlannedDate>
            <DocumentPageCount>0</DocumentPageCount>
          </BaseParams>
          <Remarks></Remarks>
          <DocumentVariants>
            <DocumentVariant is_active="1" doc_id="145156" doc_ver="Original" doc_parent="0">
              <DocumentVariant is_active="0" doc_id="145160" doc_ver="1.0.0"
                               doc_parent="145156"/>
            </DocumentVariant>
          </DocumentVariants>
          <FileProperties count="1" size="25" extension="txt" mimetype="text/plain"
                          mimetypegroup="TXT" iconid="1073743978"/>
        </Object>
      </ObjectList>
      <Statistics startpos="0" pagesize="-1" total_hits="1"/>
    </ObjectType>
  </Archive>
  <Messages></Messages>
</DMSContent>

Beobachtungen, die sich an dieser Antwort ablesen lassen:

  • Die Reihenfolge innerhalb von <Object> ist <Fields>, <TableFields>, <Rights>, <BaseParams>, <Remarks>, <DocumentVariants>, <FileProperties> — und, bei Ordnern und Registern, anschließend <ChildObjects>.

  • Systemfelder tragen system="1" und liefern den übersetzten Text als Inhalt, den Rohwert im Attribut value (value="2" zu NOT_ARCHIVABLE).

  • Leere Werte erscheinen als leeres Element, nicht als fehlendes Element (<RetentionDate>).

  • <Remarks> ist auch ohne hinterlegte Notiz vorhanden, sobald remarks="1" gesetzt ist.

  • <Statistics> steht je <ObjectType>, nicht je <Archive>.

  • osguid ist eine 32-stellige Hexadezimalfolge ohne Trennzeichen; bei Systemfeldern steht dort statt dessen eine kurze numerische ID (1116).

6. Abweichungen zwischen Schema und Serververhalten

An den folgenden Stellen beschreibt das vom Hersteller ausgelieferte DMSContent.xsd etwas anderes, als der Server tatsächlich sendet. Gemessen an enaio®-Server 12.0.769.25242. Die zu dieser Dokumentation gepflegte Schema-Fassung ist an allen genannten Stellen korrigiert (siehe Korrigierte Schema-Dateien).

Stelle Ausgeliefertes Schema Serververhalten (gemessen)

<Column> eines LOL-Tabellenfelds

Nur Textinhalt

Trägt die vollständige field_ident-Attributgruppe, wie im HOL-RowsetType

BaseParamsType

<Links> direkt gefolgt von <SystemID>

Sendet dazwischen <TxtNoticeCount> und <PdfAnnotationCount>

Dokumentteil der <BaseParams>

Pflicht, endet nach <Version>

Nur bei Dokumenten vorhanden; zusätzlich <RetentionDate>, <RetentionPlannedDate> und <DocumentPageCount>

<FileProperties>

extension, mimetype, count, size

Zusätzlich mimetypegroup, iconid und documentpagecount. mimetypegroup trägt ein Grossbuchstaben-Kürzel (PDF, IMAGE, WORD, EXCEL, TXT), nicht den MIME-Haupttyp; documentpagecount erscheint nur bei einer Seitenzahl größer 0

<Remarks>

Nicht deklariert

Wird bei remarks="1" an jedem Objekt gesendet, zwischen <BaseParams> und <DocumentVariants>, mit <Remark>-Kindelementen für Objektnotizen und Notizverknüpfungen

doc_parent an <DocumentVariant>

-1 an der Wurzelvariante

0 an der Wurzelvariante

<Archive> in <ExternalObjects>

Ohne Attribute deklariert

Trägt name, id und osguid wie das <Archive> der obersten Ebene

<MultiField>

Nur dbname, name und internal_name

Trägt die vollständige field_ident-Attributgruppe wie <Field>

pagecount, filesize, mimetypeid an <TypelessObject>

Pflichtattribute

Werden nicht gesendet, auch nicht bei einem Objekt mit Datei