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