Container

Textsuche

Die aus den Controls bekannte Suche nach Akten/Ordner kann mit folgendem Befehl aufgerufen werden:

var containerIds = await dms.Container.SearchContainersByString(searchString);

Gesucht wird hierbei in den Text-Eigenschaften des Akten-Basis-Objekts. Das bedeutet, dass keine Themenspezifischen Felder durchsucht werden, sondern lediglich AzInter, AzGericht, Bezeichnung, Mandant, Gegner, …

Das Ergebnis der Suche wird bei dieser Methode aufsteigend nach internem Aktenzeichen sortiert und auf maximal 1000 Einträge limitiert.

Soll dies geändert werden, existiert eine Überladung mit mehr Parametern:

var containerIds = await dms.Container.SearchContainersByString(
                                           searchString, 
                                           OrderField.Mandant, false, 
                                           null, 2000);

Jetzt wird absteigend (false) nach Mandant sortiert und die ersten 2000 Akten geliefert.

Die Abfrage kann noch um weitere Filter erweitert werden:

var containerIds = await dms.Container.SearchContainersByString(
                                           searchString, 
                                           OrderField.Mandant, false, 
                                           null, 2000, 
                                           ContainerStatus.Inactive,
                                           "insolvenz");

Hiermit werden nur die ruhenden Insolvenz-Akten zurückgegeben. Die beiden zusätzlichen Parameter statusFilter und topicFilter sind optional.

Filtersuche

Diese Methode kann mit einem einfachen und einem komplexen Filter aufgerufen werden. Filter dienen dazu, Container anhand der in der Datenbank gespeicherten Metadaten zu suchen. Ein komplexer Filter ist eine Kombination aus mehreren (auch hierarchischen) einfachen Filtern.

einfache Filter

var filter = new SimpleExpression(
                     SimpleOperator.Equals, 
                     STP.Ecm.ApiCore.Fieldname.Dossier.Filenumber,
                     "01/2021");
var dossierIds = await dms.Container.FilterContainerIds(filter);

Mit einfachen Filtern sind die Suchen nach Werte aus genau einem Feld möglich. Sollen mehrere Felder, oder auch mehrere Werte eines Feldes, berücksichtigt werden, müssen komplexe Filter verwendet werden.

komplexe Filter

Hiermit können mehrere SimpleExpression-Elemente Und/Oder verknüpft werden. Ein ComplexExpression-Element kann eine Liste von einfachen Ausdrücken (SimpleExpression) und/oder eine Liste mit komplexen Ausdrücken aufnehmen. Damit ist eine Baumstruktur möglich.

Beispiel, um nach Akten zu Suchen, an denen ein Name als Mandant oder als Gegner eingetragen ist:

var clientFilter = new ComplexExpression(ComplexOperator.Or);
categoryFilter.SimpleExpressions.Add(new SimpleExpression(
                   SimpleOperator.Equals,
                   STP.Ecm.ApiCore.Fieldname.Dossier.Client,
                   "Markus Meier"));
categoryFilter.SimpleExpressions.Add(new SimpleExpression(
                   SimpleOperator.Equals,
                   STP.Ecm.ApiCore.Fieldname.Dossier.Opponent,
                   "Markus Meier"));

Einschränkung nach Themen

Es kann ein Filter auch auf ein oder mehrere Themen beschränkt werden. Dazu wird als zweiter Parameter eine Liste mit Themennamen (interne Namen, nicht Anzeigenamen) angegeben.

Um zum Beispiel nach Ordnern aus der Wissenbasis zu suchen, deren Name mit “Geheim” beginnt, ruft man folgendes auf:

var filter = new SimpleExpression(
                     SimpleOperator.Like,
                     STP.Ecm.ApiCore.Fieldname.Folder.Name, 
                     "Geheim%");
var folderIds = await dms.Container.FilterContainerIds(
                     filter, 
                     new [] { "Jurathek" });

Sortieren

Hat man bereits eine Liste mit Container-Ids und möchte diese Umsortieren, kann dies mit dem folgenden Aufruf erfolgen (hier wird nach Mandant sortiert).

var orders = new List<OrderDefinition>();
orders.Add(new OrderDefinition() 
{
    Fieldname = STP.Ecm.ApiCore.Fieldname.Dossier.Client,
    Direction = OrderDirection.Ascending
});
var sortedIds = await dms.Container.SortIds(unsortedIds, orders);

Daten laden

var containerDatas = await dms.Container.LoadContainers(listOfIds);

Mit dieser Anweisung kann man zu einer Liste von IDs die zugehörigen Daten laden. Es können hier Akten und/oder Ordner in der Ergebnisliste enthalten sein. Die Datenobjekte enthalten alle Metadaten, sowie die Struktur der Register.

Um die Dokumente, welche in der Akte/dem Ordner enthalten sind zu laden gibt es den folgenden Aufruf:

var documentIds = await dms.Container.GetDocumentIdsForContainer(containerId);

Es werden die Ids aller Dokumente zurückgegeben, welche in der Akte sind (egal welches Register) und auf die der Anwender mindestens Leseberechtigung besitzt.

Für den Inhalt eines Registers ruft man dies auf:

var documentIds = await dms.Container.GetDocumentIdsForContainerTray(containerId, trayId, true);

Hier werden die Ids aller Dokumente zurückgegeben, welche sich direkt in dem angegebenen Register befinden, oder in einem der Unterregister (true). Mit false werden nur Dokumente direkt aus dem Register zurückgegeben.

Filter (ab DMS Server 7.6.316)

Zusätzlich können bei den obigen Aufrufen noch Filter angegeben werden, die das Ergebnis einschränken.

var documentIds = await dms.Container.GetDocumentIdsForContainer(containerId, filter);

Daten ändern

Hier müssen getrennte Methoden für Akte und Ordner aufgerufen werden. Die Vorgehensweise ist aber immer identisch. Es muss eine Liste mit zu ändernden Felddaten erstellt und anschließend zusammen mit der Id des Containers der Udpate-Befehl aufgerufen werden.

Änderungsliste erstellen:

var changes = new List<FieldUpdateInfo>();
changes.Add(new FieldUpdateInfo() {
    FieldKey = STP.Ecm.ApiCore.Fieldname.Dossier.Description,
    Value = "Neue Aktenbezeichnung"
}

Damit kann dann eine Änderung an der Akte vorgenommen werden. Hier wird die Bezeichnung der Akte geändert

var dossierId = await dms.Container.UpdateDossier(dossierId, changes);

Ordner erzeugen

var name = "Neuer Ordner";
var folderId = await dms.Container.CreateFolder(name, "Jurathek");

Es wird ein neuer Ordner mit dem Namen “Neuer Ordner” im Thema “Jurathek” erstellt. Beachten: Ordnernamen müssen im gesamten DMS eindeutig sein.

Akte erzeugen

Analog zum Ordner können auch Akten erstellt werden. Hierfür wird zwingend ein Aktenzeichen und eine Beschreibung benötigt.

var azIntern = "01/2021";
var bezeichnung = "Erste Akte im Jahr";
var folderId = await dms.Container.CreateDossier(azIntern, bezeichnung, "STPAkte");

Es kann bei der Erstellung direkt eine Registerstruktur mitgegeben werden, welche an der neuen Akte gesetzt wird:

var registers = new[] {
    new FilingTrayDto() {
        Id = 1,
        TrayId = 1,
        ParentId = 0,
        Text = "Ein Beispielregister",
        Number = 1
    }
};
var folderId = await dms.Container.CreateDossier(azIntern, bezeichnung, 
                                       "STPAkte", registers.ToArray());

Um eine Akte mit einer Registerstrukturvorlage zu erstellen, gibt es die folgende Methode. Die hier anzugebende filingSystemTemplateId erhält man über die Abfrage der Vorlagen (siehe Ablagepläne abfragen)

var filingSystemTemplateId = ...
var containerId = await dms.Container.CreateDossier("01/2021", "Beispielakte", "STPAkte", filingSystemTemplateId);

Register

Register anlegen

Um ein neues Register zu einem Container hinzuzufügen ruft man folgendes auf:

var registerName = "Neues Register";
var parentTrayId = 0; // 0 ist die oberste Ebene, also direkt unter der Akte/dem Ordner
var tray = await dms.Container.CreateFilingTray(containerId, registerName, parentTrayId);

Register umbenennen

var newRegisterName = "Updated Register";
var trayId = 1; // die Id kann aus der FilingTrays-Liste des Containers ermittelt werden
var tray = await dms.Container.UpdateFilingTray(containerId, trayId, newRegisterName);

Register löschen

var trayId = 1; // die Id kann aus der FilingTrays-Liste des Containers ermittelt werden
var success = await dms.Container.DeleteFilingTray(containerId, trayId);

Ablagepläne abfragen

In DMS gibt es Vorlagen für die Registerstruktur von Akten/Ordnern. Diese Vorlagen müssen für ein Thema (Akten-/Ordnertyp) freigegeben sein. Über die nachfolgende Funktion können die freigegebenen Vorlagen für ein Thema abgefragt werden.

var templates = await dms.Container.GetFilingSystemTemplates("Insolvenz");

Im Beispiel werden die Vorlagen für das Insolvenz-Thema abgefragt.

Ab DMS-Server 7.5.258 enthalten die hier abgefragten INfos auch die Registerstruktur der Vorlage.

Verknüpfung mit