Dies ist eine Api-Facade für den DMS Server, kompatibel mit NETStandard 2.0 und verfügbar für .Net Framework 4.6.1 und .Net Core 3.1. Diese Dokumentation bezieht sich auf die aktuelle Version 2023.11.221. Die Änderungen können in den Release Notes eingesehen werden.
Zweck der Api ist es eine einfache Anbindung an den DMS-Server zu ermöglichen um Zugriff auf Dokumente und Akten zu ermöglichen. Dazu stellt die Api eine Verbindung über den LEXolution Service Bus zu dem DMS Server her. Wurde dies erfolgreich getätigt, können über mehrere Unterobjecte Funktionalitäten des Servers aufgerufen werden.
Wichtig: Diese API ist nicht dafür gemacht für jeden Aufruf neu initialisiert zu werden. Es stellt vielmehr einen DMS-Client dar. Die Vorgehensweise ist so, dass die Api einmalig gestartet und an einer zentralen Stelle festgehalten/referenziert wird.
Überblick zum Einsatz der Api
Schnellstart
Hier eine Anleitung, wie man zu einem funktionierenden DMS-Client kommt. Zuerst muss das aktuellste NuGet-Paket in das Projekt installiert werden (DevOps Feed):
PM> Install-Package LEXolution.DMS.ApiCore
using STP.Ecm.ApiCore;
var lsbConfig = new LocalhostDefaultLsbConfiguration(); // vorbelegt für lokalen RabbitMQ
var dms = new Dms(lsbConfig);Development API Lizenz übermitteln
In der lsbConfig gibt es das Feld ‘LicenseString’. Dieser String muss mit einer gültigen Development API Lizenz befüllt werden, damit die Api genutzt werden kann. Diese verschlüsselte Lisa-Lizenz kann über den LEXolution Support angefragt werden. Es handelt sich um ein XML-String, welcher schematisch so aussieht (Beispiel):
<?xml version="1.0" standalone="yes"?>
<XMLLicense xmlns="http://tempuri.org/XMLLicense.xsd">
<License>
<GUID></GUID>
<Name>C7+D2BSYRdGYJ5lzMsjM9w==</Name>
<Nummer>XsiBW92x2NousbMQxt6+gw==</Nummer>
<GIS>XsiBW92x2NousbMQxt6+gw==</GIS>
<Bemerkung>wdN0aZq0QOKs9PQAFZEJgyIbwiyIebUlAg2jby/baPs=</Bemerkung>
<Products>
<Product>
<ProductName>7PrB1HfurdbKGaTkwqNX5YqynRPemD0IRcxHSBptF74=</ProductName>
<ProductID>XsiBW92x2NousbMQxt6+gw==</ProductID>
<Moduls>
<Modul>
<ModulName>1gH0Y96u782eNG9JcoYWMuc5uAIKLqQy8hBlLrddIUI=</ModulName>
<ModulID>zYnlhmjrV2PxB4ffxaHprQ==</ModulID>
<Count>B4qWQS/Sjitlcm1m/VcmQA==</Count>
<Expiry>rNxtk6P39blKoXohxSBDIA==</Expiry>
<Concurrent>e1k/hMuSkVglAtjPhXIavw==</Concurrent>
</Modul>
</Moduls>
</Product>
</Products>
</License>
</XMLLicense>Die Initialisierung kann bei der Definition der lsbConfig so erfolgen:
using STP.Ecm.ApiCore;
var lsbConfig = new LocalhostDefaultLsbConfiguration()
lsbConfig.LicenseString = "<!-- XML License String hier einfügen -->"
var dms = new Dms(lsbConfig);Anschließend muss eine Anmeldung am STP Usermanagement vorgenommen werden. Hier gibt es eine ausführlichere Beschreibung des Init-Vorgangs.
var initResult = dms.Init(); // Windowsanmeldung (funktioniert nicht mit .Net Core)
if (!initResult.Success)
{
Environment.Exit(-1); // Anmeldung fehlgeschlagen. Beispielprogramm wird beendet
}Nun sind die Unterobjekte gesetzt (vorher sind sie null)
und können verwendet werden. Es gibt eines für jeden Themenbereich der
Api. Die Themenbereiche werden im Anschluß gesondert beschrieben. Hier
wird nun ein kleiner Anwendungsfall implementiert.
Dokument suchen und herunterladen
Wir suchen das Dokument nach dem Titel, nehmen dort das erste und laden dessen Inhalt herunter.
var filter = new SimpleExpression(SimpleOperator.Like, STP.Ecm.ApiCore.Fieldname.Document.Title, "Rechnungsdokument%");
var foundIds = await dms.Document.FilterDocumentIds(filter);
if (foundIds != null && foundIds.Count > 0)
{
var firstId = foundIds.First();
var documentData = await dms.Document.LoadDocumentData(firstId);
dms.Document.DownloadContent(firstId, @"C:\Temp\" + documentData.Versions.Last().Filename);
}Damit haben wir den Inhalt heruntergeladen und lokal abgespeichert.
Bereiche
Hier werden die Unterbereiche des Hauptobjekts Dms
beschrieben.
Document
Dieser Bereich enthält Funktionen, die sich auf Dokumente beziehen, also Import, Bearbeitung, … ApiCore - Document
Container
Hier geht es um Akten und Ordner. ApiCore - Container
AccessRights
Zugriffsrechte auf unterschiedliche Objekttypen (Dokumente, Akten, …) können hier gelesen und geändert werden. ApiCore - AccessRights
Collector
Die Api hat keinen direkten Zugang zu dem Collector im DMS-Server, aber mit diesem Modul können die Collector-Definitionen geladen werden und die Verarbeitungsvorlage eines Collectors kann bei einem Import (auch mehrere Dokumente) angewendet werden. Es werden dabei Indexdaten gesetzt und z.B. Aufgabenlisten gestartet. ApiCore - Collector
TasksAndNotices
Aufgaben, Notizen und Aufgabenlisten können hier angelegt, bzw. gestartet werden. ApiCore - TasksAndNotices
RollContainer
Vorgänge, Nicht zugeordnete Dokumente, Meine Importe und Papierkorb sind hier zusammengefasst. ApiCore - RollContainer
Favoriten
Dokumentfavoriten können mit der Api verändert werden. Beim Abfragen werden zudem auch die Aktenfavoriten ausgegeben. ApiCore - Favorites
Schema
Zugriff auf Datenschemata von DMS (Themen, Listendefinitionen). ApiCore - Schema
Impersonierung
Die Api kann Aufrufe impersoniert ausführen. Dies funktioniert allerdings nicht mit “Notifications”! ApiCore - Impersonation
Notifications
In diesem Modul kann man keine Funktionen aufrufen, aber Callbacks eintragen, welche bei bestimmten Aktionen des DMS-Servers aufgerufen werden. ApiCore - Notifications
ValueStore
Zusatzdaten zu jedem DMS-Objekt ablegen. ApiCore - ValueStore
Mailspezifische Funktionen. ApiCore - Mail
Feldnamen
Für viele Funktionen in der API werden Feldnamen benötigt. Zum Beispiel für Filter oder auch um Daten zu ändern. Diese Feldnamen sind Strings. Ein vollständiger Satz befindet sich in der der Datei “de-DE_topic.lang_id”, welche sich in jedem Installationsverzeichnis eines DMS-Produkts befindet.
Die schönere Variante ist aber der Namespace
STP.Ecm.ApiCore.Fieldname. Dort finden sich Klassen mit
Stringkonstanten für die Felder in Document,
Dossier und Folder.
Themenspezifische Felder finden sich in Unterklassen, wie zum
Beispiel Mail.
Beispiel:
var feldMailBetreff = STP.Ecm.ApiCore.Fieldname.Document.Mail.Subject;
// feldMailBetreff = "Mail.DocumentInfo.MailBetreff"
var filter = new SimpleExpression(
SimpleOperator.Equals,
STP.Ecm.ApiCore.Fieldname.Document.Mail.Subject,
"AW: Testmail");Serverabfrage
Über das Objekt DmsServerQuery kann eine Abfragen
(Who-Is-There) an einen LSB gesendet werden, um alle angebundenen
DMS-Systeme abzufragen.
Die Klasse wird instanziiert mit einer LSB-Configuration, analog zum
Dms-Objekt. Danach kann die Methode Query
aufgerufen werden, welcher man einen Timeout und einen Handler mitgibt.
Es wird bis zum Ablauf des Timeouts gewartet, dass DMS-Systeme auf die
Who-Is-There-Anfrage antworten. Für jedes System, welches eine Antwort
sendet wird der Handler aufgerufen, welcher den Anzeigenamen und die
System-Id erhält.
Mit dieser System-Id kann dann eine eigentliche Api-Instanz initiiert werden.
var query = new DmsServerQuery(lsbConfig);
query.Query(TimeSpan.FromSeconds(10), info = > {
// wird immer dann aufgerufen, wenn ein Server antwortet.
Console.WriteLine(info.DisplayName);
});
// nach 10 Sekunden ist die Methode abgeschlossen (angegebener Timeout).Die erhaltenen Infoobjekte enthalten die folgenden Angaben und können Live in eine Liste eingetragen werden, damit der Anwender eine Auswahl treffen kann.
AvailableServerInformation. |
Typ | Bedeutung |
|---|---|---|
DisplayName |
String | Anzeigename des Systems. |
SystemId |
Guid | Systemkennung, welche beim Verbindungsaufbau der eigentlichen Api verwendet werden kann. |
Version |
ServerVersion | Version des DMS-Servers |
Verknüpfung mit