Wenn Aufgaben für zu bearbeitende Dokumente automatisch erstellt werden sollen kann dies über folgendes SQL Script erledigt werden.
Das Script teilt sich in zwei Aktionen die per JobServer Modul "Database Agent" umgesetzt werden können. Beide laufen minütlich direkt hintereinander.
In jedem der Scripte müssen je Installation die Suchparameter (Versandart, GPName, etc.), die Zielarchiv-Variablen (ArchivID, ArchivGUID) sowie die Zielarchiv-Tabellen ([topfactArchiv].[dbo].[tf_Archive001]) angepasst werden.
Eine produktive Implementierung findet sich beim Kunden "FAN".
DECLARE @tf_docid INT, @tf_usermodified VARCHAR(150),
@gpname VARCHAR(150), @belegart VARCHAR(150), @belegnummer VARCHAR(150), @bearbeiter1 VARCHAR(150);
PRINT '-------- Starte Aufgabenerstellung --------';
DECLARE dokumenten_cursor CURSOR FOR
SELECT
[tf_docid]
,[tf_usermodified]
,[gpname]
--,[gpnummer]
,[belegart]
--,[versandart]
,[belegnummer]
--,[belegdatum]
--,[techstatus]
,[bearbeiter1]
--,[besitzer]
--,[kfmstatus9]
FROM [topfactArchiv].[dbo].[tf_Archive001] ---ARCHIV (siehe unten, nochmal ändern!)
WHERE [kfmstatus9] = 'aufgabe-zu-erstellen'
AND techstatus != 'ungültig'
OPEN dokumenten_cursor
FETCH NEXT FROM dokumenten_cursor
INTO @tf_docid, @tf_usermodified, @gpname, @belegart, @belegnummer, @bearbeiter1
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ' '
PRINT (CONCAT('Erstelle Aufgabe für Dokument ',@tf_docid,' Ersteller: ',@tf_usermodified,' Belegnummer: ',@belegnummer,' Bearbeiter: ',@bearbeiter1));
-- #####################################################################################################################
DECLARE @userOwnerBenutzername varchar(100) = @tf_usermodified; --'ERE';
DECLARE @userAssigneeBenutzername varchar(100) = @bearbeiter1; --'Administrator';
DECLARE @orgId INT = 1; -- Organisation ID in tf Datenbank
DECLARE @ArchivID INT = xxxxxxxxxxxxxxxx; -- ID des entsprechenden Archivs
DECLARE @ArchivGuid varchar(250) = '91B96ADF-9790-450A-A2D1-0A33D59F366B'; -- GUID des entsprechenden Archivs
-- Verfügbare Archive bei FAN
--ArchiveId OrgID Benennung Name DBName Guid
--1 5 Buchhaltung Buchhaltung Buchhaltung D494E0BC-BE77-42AD-BA09-D58F8CEC085D
--2 5 Verwaltung Verwaltung Verwaltung 91B96ADF-9790-450A-A2D1-0A33D59F366B
--3 5 Media Media Media ED01CA7C-9E00-4EA7-BBEB-DDC247D3C627
--4 5 Kunstanstal Kunstanstalt AA7BF856-0845-4982-AE62-1E5245768244
DECLARE @attachedTFDOCID INT = @tf_docid; --2529; --TODO: TF Docid des Dokuments das geprüft werden soll
DECLARE @attachedDoc_Belegnummer varchar(150) = @belegnummer; --'12345';
DECLARE @attachedDoc_Belegart varchar(150) = @belegart; --'RECHNUNG';
DECLARE @attachedDoc_GPName varchar(150) = @gpname; --'Telekom AG';
--UserId und Name vom Ersteller anhand Kürzel
DECLARE @taskOwnerId INT = (SELECT UserId FROM [topfact6].[dbo].[TF_Benutzer] WHERE Benutzername = @userOwnerBenutzername);
DECLARE @taskOwnerName varchar(100) = (SELECT Displayname FROM [topfact6].[dbo].[TF_Benutzer] WHERE Benutzername = @userOwnerBenutzername);
--UserId des Zielnutzers anhand Kürzel holen
DECLARE @taskAssigneeId INT = (SELECT UserId FROM [topfact6].[dbo].[TF_Benutzer] WHERE Benutzername = @userAssigneeBenutzername);
DECLARE @taskDescription varchar(100) = 'Bitte prüfen sie das Dokument';
DECLARE @taskTitle varchar(100) = CONCAT('', @attachedDoc_Belegart, ' ', @attachedDoc_Belegnummer,' (',@attachedDoc_GPName ,') bitte prüfen');
DECLARE @newTaskId INT = (SELECT MAX(TaskID)+1 as newtid FROM [topfact6].[dbo].[TASKS_Task]);
DECLARE @newWorkItemId INT = (SELECT MAX([WorkitemID])+1 asnewworkitemid FROM [topfact6].[dbo].[TASKS_Workitem]);
--DECLARE @newAssignmentId INT = (SELECT MAX([AssigmentID])+1 as newassid FROM [topfact6].[dbo].[TASKS_Assignment]);
--create new task
INSERT INTO [dbo].[TASKS_Task]
([OrgID]
,[TasktemplateID]
,[TasktypeID]
,[PriorityID]
,[StatusID]
,[OwnerUserID]
,[Startdate]
,[Enddate]
,[Name]
,[IsDeleted]
,[Beschreibung]
,[Settings]
,[Wiedervorlage]
,[Gelesen]
,[UserCreated]
,[DateCreated]
,[UserModified]
,[DateModified]
,[Description]
,[Resubmission]
,[IsRead]
,[TemplateID]
,[PlanEndDate]
,[Title]
,[IsClosed])
VALUES
(@orgId --<OrgID, int,>
,NULL --<TasktemplateID, int,>
,1 --<TasktypeID, int,>
,1 --<PriorityID, int,>
,NULL --<StatusID, int,>
,@taskOwnerId--<OwnerUserID, int,>
,GETDATE() --<Startdate, datetime,>
,DATEADD(day, 1, GETDATE()) --<Enddate, datetime,>
,NULL --<Name, varchar(100),>
,0 --<IsDeleted, bit,>
,NULL --<Beschreibung, varchar(max),>
,NULL --<Settings, varchar(max),>
,NULL --<Wiedervorlage, datetime,>
,NULL --<Gelesen, datetime,>
,@taskOwnerName --<UserCreated, varchar(100),>
,GETDATE() --<DateCreated, datetime,>
,NULL --<UserModified, varchar(100),>
,NULL --<DateModified, datetime,>
,@taskDescription --<Description, varchar(max),>
,NULL --<Resubmission, datetime,>
,NULL --<IsRead, datetime,>
,1 --<TemplateID, int,>
,DATEADD(day, 1, GETDATE()) --<PlanEndDate, datetime,>
,@taskTitle --<Title, varchar(250),>
,0 --<IsClosed, bit,>
)
--create new workitem
INSERT INTO [dbo].[TASKS_Workitem]
([TaskID]
,[Position]
,[StartDate]
,[EndDate]
,[Title]
,[Description]
,[Result]
,[ReadDate]
,[Resubmission]
,[CloseDate]
,[StatusID]
,[IsVisible]
,[IsDeleted]
,[Settings]
,[UserCreated]
,[DateCreated]
,[UserModified]
,[DateModified])
VALUES
(@newTaskId --<TaskID, int,>
,1 --<Position, int,>
,GETDATE() --<StartDate, datetime,>
,DATEADD(day, 1, GETDATE()) --<EndDate, datetime,>
,@taskTitle --<Title, varchar(250),>
,@taskDescription --<Description, varchar(max),>
,NULL --<Result, varchar(max),>
,NULL --<ReadDate, datetime,>
,NULL --<Resubmission, datetime,>
,NULL --<CloseDate, datetime,>
,1 --<StatusID, int,>
,1 --<IsVisible, bit,>
,0 --<IsDeleted, bit,>
,CONCAT('<?xml version="1.0"?>
<Workitem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ID>',@newWorkItemId,'</ID>
<TaskID>',@newTaskId,'</TaskID>
<Position>1</Position>
<PlanedDuration>30</PlanedDuration>
<Result></Result>
<IsVisible>true</IsVisible>
<CloseDate>2021-01-25T10:55:21.0510063+01:00</CloseDate>
<ReadDate>2021-01-25T10:55:13.803</ReadDate>
</Workitem>') --<Settings, varchar(max),>
,@taskOwnerName --<UserCreated, varchar(50),>
,GETDATE() --<DateCreated, datetime,>
,NULL --<UserModified, varchar(50),>
,NULL --<DateModified, datetime,>
)
--create assignment
INSERT INTO [dbo].[TASKS_Assignment]
([TaskID]
,[WorkitemID]
,[UserID]
,[GroupID]
,[UserCreated]
,[DateCreated])
VALUES
(@newTaskId --<TaskID, int,>
,@newWorkItemId --<WorkitemID, int,>
,@taskAssigneeId --<UserID, int,>
,NULL --<GroupID, int,>
,@taskOwnerName --<UserCreated, varchar(50),>
,GETDATE() --<DateCreated, datetime,>
)
-- create document to task connection
INSERT INTO [dbo].[TASKS_DokumenteToTasks]
([ArchivID]
,[ArchivGuid]
,[DocID]
,[TaskID]
,[UserCreated]
,[DateCreated])
VALUES
(@ArchivId --<ArchivID, int,>
,@ArchivGuid --<ArchivGuid, varchar(100),>
,@attachedTFDOCID --<DocID, int,>
,@newTaskId --<TaskID, int,>
,@taskOwnerName--<UserCreated, varchar(100),>
,GETDATE() --<DateCreated, datetime,>
)
-- aktualisiere kfmstatus9 nachdem die Aufgabe erfolgreich erstellt wurde
UPDATE [topfactArchiv].[dbo].[tf_Archive001] SET kfmstatus9 = 'aufgabe-erstellt' WHERE tf_docid = @tf_docid
-- #####################################################################################################################
-- hole nächstes Dokument...
FETCH NEXT FROM dokumenten_cursor
INTO @tf_docid, @tf_usermodified, @gpname, @belegart, @belegnummer, @bearbeiter1
END
CLOSE dokumenten_cursor;
DEALLOCATE dokumenten_cursor;