Aufgaben und Notizen

Daten zur Aufgabenerstellung abfragen

var data = await dms.TasksAndNotices.LoadTaskCreationItems();

Es wird eine Struktur geladen, welche für die Aufgabenerstellung notwendige Daten enthält.

TaskCreationItems. Bedeutung
Users Alle im DMS vorhandenen Benutzer: UserDto.
Groups Alle im DMS vorhandenen Gruppen.
TaskTemplateNotes Enthält Textvorlagen für die Aufgabenerstellung als Baumstruktur.
DocumentTemplates Enthält Dokumente, welche das Häkchen “Vorlage” gesetzt haben.
TaskTypeDtos Enthält eine Liste der vom Kunden angelegten Aufgabentypen.
CachedDate Datum der Abfrage.

Die Benutzer an den Aufgabenfunktionen werden in der Regel mit einer DMS-Id angegeben, anstelle der Xid aus dem STP UserManagement.

Aufgaben abfragen

Für Benutzer/Gruppen

var loadType = LoadTasksModus.Mine;
var taskIds = await dms.TasksAndNotices.LoadTaskIds(loadType);
var tasks = await dms.TasksAndNotices.LoadTasksByIds(taskIds);

Es liefert eine Liste von TaskReadDto mit den für den Anwender aktiven Aufgaben. Über den Modus können auch andere Listen abgefragt werden. Soll zum Beispiel die Vertretung für einen Kollegen übernommen werden:

var taskIds = await dms.TasksAndNotices.LoadTaskIds(LoadTasksModus.InBehalfOf, userOrGroupId);

Somit erhält man die offenen Aufgaben für den zu vertretenden Benutzer/Gruppe.

Über einen zusätzlichen, optionalen Parameter können auch die erledigten Aufgaben mit geladen werden. Allerdings können hier sehr große Ergebnismengen auftreten. Daher ist diese Möglichkeit mit Vorsicht zu genießen.

var allTaskIds = await dms.TasksAndNotices.LoadTaskIds(LoadTasksModus.Mine, null, true);

Für Dokument, Akte/Register

Es können Aufgaben auch umgekehrt nach Bezug zu Dokument ermittelt werden.

var includeFinished = true;
var documentTaskIds = await dms.TasksAndNotices.LoadTaskIdsForDocument(documentId, includeFinished);

Hiermit werden alle Aufgaben für ein Dokument ermittelt.

Verwendet man den folgenden Aufruf …

var includeFinished = true;
int? trayId = null;
var containerId = new Guid(...);
var documentTaskIds = await dms.TasksAndNotices.LoadTaskIdsForContainerRegister(containerId, trayId, includeFinished);

… werden alle Aufgaben aller Dokumente in der Akte/dem Ordner abgefragt. Alternativ kann man den Aufruf auch auf ein bestimmtes Register (Unterregister werden NICHT mit einbezogen) eingrenzen.

Aufgabe erstellen

Eine Aufgabe wird über einen Creator zusammengestellt.

var creator = TaskCreator.RegularTaskForUser(documentId);
creator.SetText("Aufgabentext");
creator.AddUser(userId);

Mit diesem Creator kann die Api dann die Aufgabe erstellen.

var success = await dms.TasksAndNotices.CreateTask(creator);

Arbeiten mit Aufgaben

Daten ändern

Die Daten einer Aufgabe können sich im Laufe der Zeit ändern (solange sie nicht erledigt ist). Es können allerdings nicht alle Daten verändert werden.

var modifications = new ModifyTaskModel();
modifications.Reminder = tomorrow;
var modifiedTask = await dms.TasksAndNotices.ModifyTask(task.Id, modifications);

Mit Hilfe des ModifyTaskModel kann eine bestehende Aufgabe verändert werden. Alle Eigenschaften sind Nullable. Nur die gesetzten Werte werden an dem durch die Id definierten Task verändert.

Aufgabe kommentieren

var commentPlain = "Ein Kommentar";
var commentRtf = "{\rtf1\ansi\...}";
var result = await dms.TasksAndNotices.AddCommentToTask(task.Id, commentRtf, commentPlain);

Es wird an den Aufgabentext der Kommentar angehängt. Abgetrennt durch eine Zeile “Kommentar von {user} am {datum}”.

Aufgabe beantworten

TaskReadDto taskDto = ...
var manager = await dms.TasksAndNotices.GetTaskManager(taskDto);
var creator = TaskCreator.Answer(taskDto);
creator.SetText("Rückfrage ...");
await manager.AnswerTask(creator);

Bei einer Beantwortung einer Aufgabe wird die aktuelle Aufgabe auf ‘Erledigt’ gesetzt und eine neue Aufgabe erstellt, welche an den Absender der aktuellen Aufgabe geht. Diese Funktion kann nicht mit Listenschritten aufgerufen werden!

Aufgabe weiterleiten

Sind sie nicht der richtige Bearbeiter für die Aufgaben, kann diese auch an einen anderen Bearbeiter weitergeleitet werden. Die Aufgabe bleibt dabei unverändert, es wird lediglich der Bearbeiter geändert.

TaskReadDto taskDto = ...
var manager = await dms.TasksAndNotices.GetTaskManager(taskDto);
var forwarder = manager.CreateForwarder();
forwarder.ToUser(userId);     //userId is long.ToGuid.
or
forwarder.ToGroup(groupId);   //groupId is long.ToGuid.
await manager.ForwardTask(forwarder);

Aufgabe erledigen

TaskReadDto taskDto = ...
var manager = await dms.TasksAndNotices.GetTaskManager(taskDto);
await manager.FinishTask();

Notizen für ein Dokument abfragen

var notices = await dms.TasksAndNotices.LoadNoticesForDocument(documentId);

Hiermit erhält man eine Liste mit den am Dokument gesetzten Notizen.

Notiz erstellen

Um eine Notiz zu erstellen wird wieder der TaskCreator verwendet.

var creator = TaskCreator.Note(documentId);
creator.SetText("Text der Notiz");
var success = await dms.TasksAndNotices.CreateTask(creator);

Aufgabenlisten

Starten

Um eine Aufgabenliste zu starten, benötigt man deren Definition. Diese kann man über folgenden Befehl laden.

var taskListDefinitions = await dms.TasksAndNotices.LoadTaskLists();

Wichtig: Seit Version 2021.11.22.45 werden die Daten bei LoadTaskLists nur einmalig vom Server geladen und ab da in einem Api-Internen Cache gehalten.

Das Ergebnis dieser Methode ist eine hierarchische Struktur, welche der aus dem Verwaltungsdialog in den Kanzleieinstellungen entspricht: image.png

Um darin die Aufgabenlistendefinition zu einer bestimmten ID zu finden, kann der folgende Befehl verwendet werden:

var taskListInfo = await dms.TasksAndNotices.FindInfoInCategorie(taskListDefinitions, taskListId);

Um eine Liste zu starten geht man analog zu einer Einzelaufgabe vor. Zuerst benötigt man einen Creator, welcher dann ggf. konfiguriert wird.

var creator = new TaskListCreator(taskListInfo, documentId);
creator.SetFirstUser(userId);

var success = await dms.TasksAndNotices.StartTaskList(creator);

Nachdem eine Aufgabenliste gestartet wurde, kann man auf den dadurch erstellten Einzelaufgaben verschiedene Aktionen ausführen. Das hängt auch von der Art der Aufgabenliste ab.

Checkliste

Einträge eine Checkliste werden direkt beim Start alle angelegt und können in beliebiger Reihenfolge abgehakt werden. Der Checklisteneintrag wird dazu mit der Methode dms.TasksAndNotices.FinishTaskListStep(finisher) “erledigt” und ggf. mit einem Kommentar versehen.

Die anderen Aufgabenlisten

Es gibt noch 3 weitere Aufgabenlistentypen, welche allerdings nicht ganz so einfach zu behandeln sind.

Aufgabenschritt erledigen

Hierfür wird ein TaskListStepFinisher benötigt. Dieser wird benötigt, weil hier viele Möglichkeiten existieren.

var finisher = await dms.TasksAndNotices.GetFinisherForTaskListStep(taskId, taskListInfo);

Die taskListInfo muss zur angegebenen Aufgabe passen. In der Datenstruktur, welche als Ergebnis von GetActiveTasks() geliefert wird, ist die Id der Aufgabe, sowie die der Aufgabenliste enthalten. Passen diese nicht zueinander, wird eine Exception geworfen.

Am Finisher kann man nun den Bearbeiter des nächsten Listenschritts ändern, oder bei freien Aufgabenlisten auch den nächsten Schritt auswählen.

finisher.MoveToStep(5);
finisher.SetUser(userId);

Abschließend übergibt man den Finisher der Methode um den dazu passenden Aufgabenschritt abzuschließen:

var success = await dms.TasksAndNotices.FinishTaskListStep(finisher);

Aufgabenliste abbrechen

Um die Abarbeitung einer Liste am aktiven Schritt abzubrechen, wird folgendes aufgerufen:

var success = await dms.TasksAndNotices.AbortTaskList(taskId);

ModifyTaskModel

Im folgenden sind wird der Aufbau der ModifyTaskModel Klasse beschrieben. Alle Eigenschaften sind Nullable. Wird ein Wert gesetzt wird dieser an der zu ändernden Aufgabe geändert. Bleibt er null, dann behält die Aufgaben den Wert.

Die Spalte Berechtigung in der Tabelle gibt an, wer den Wert ändern darf.

ModifyTaskModel. Typ Beschreibung Berechtigung
Deadline DateTime Zielvorgabe für die Aufgabe Jeder
Reminder DateTime Erinnerung für die Aufgabe Jeder
UserId long Bearbeiter der Aufgaben Ersteller
GroupId long Bearbeitungsgruppe für die Aufgabe Ersteller
Text string Inhalt der Aufgabe Ersteller
TextRtf string Inhalt der Aufgabe in Rtf Ersteller
IsUrgent bool Ist die Aufgabe als Eilig gekennzeichnet Ersteller

UserDto

UserDto. Typ Bedeutung
Id Int64 Interne ID. Diese wird mit id.ToGuid() in den Methoden gesetzt.
Name String Anzeigename
NetworkName String Domainname
ShortName String Kurzname des Anwenders
IsWindowsUser Bool Benutzer wurde aus dem ActiveDirectory importiert
GroupIds List Liste mit Gruppen in welchen der Anwender Mitglied ist.
IsHidden Bool Der Benutzer darf in Auswahlliste nicht angezeigt werden.
XidStpUserManagement Guid Die Xid aus dem STP Usermanagement. Diese Guid ist nicht für die Methodenaufrufe geeignet.

TaskReadDto

TaskReadDto. Typ Bedeutung
TaskId Int64 Eindeutige Id.
ParentTaskId Int64 Bezug auf Basisaufgabe bei Antworten/Ergebnisberichten.
CreateDate DateTime Erstelldatum der Aufgabe.
CreatedBy String Benutzerkürzel des Aufgabenerstellers.
ModifyDate DateTime Änder- oder Erledigtdatum der Aufgabe.
ModifiedBy String Benutzerkürzel bei Änderung/Erledigung.
Text String Text der Aufgabe in unformatierter Form.
TextRtf String Text der Aufgabe, formattiert.
IsUrgent Bool Eilige Aufgabe
AutomaticReply Bool Soll automatisch eine Antwort erstellt werden.
Page Int32 Seitenbezug im Dokument
Paragraph Int32 Absatzbezug auf der Seite im Dokument
DokumentId Guid Id des Dokument an welchem die Aufgabe hängt.
UserId Guid Bearbeiter der Aufgabe.
UserId Guid Bearbeitergruppe der Aufgabe. Kann nicht zusammen mit UserId gesetzt sein.
ResultToUserId Guid Die Antwort soll an diesen Benutzer gesendet werden.
LastUserId Guid Ersteller der Aufgabe
Deadline DateTime Aufgabe muss bis dahin erledigt sein.
Reminder DateTime Erinnerungszeitpunkt
TaskTypeIdentification Int32 Kundenspezifischer Aufgabentyp
Type DocumentTaskType Systemtyp der Aufgabe
TaskListLink TaskListLinkDto Bei Schritten einer Aufgabenliste gesetzt, enthält den Bezug zur Liste.

Verknüpfung mit