SQL: Aufgaben für tf6 MyWork automatisch erstellen

topfact AG intern>Organisation>Richtlinien - verbindliche Anweisungen>Urlaub - Organisationsrichtlinie>technische Dokumentation Überblick>Standard Tools und Skripts>SQL: Aufgaben für tf6 MyWork automatisch erstellen
Produkt: topfact6 MyWork
Erstellt am 08.02.2021 09:05, letzte Aktualisierung am 05.06.2026 11:02.
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.
  • Teil 1: Aufgabenvorbereitung (Hier werden Dokumente mit bestimmten Kriterien markiert, für die eine Aufgabe erstellt werden soll. z.B. frisch Indizierte Scanbelege)
  • Teil 2: Aufgabenerstellung (Hier werden für die markierten Dokumente tatsächlich Aufgaben erstellt)
  • Teil 3: (optional) Benachrichtigung via E-Mail an die Bearbeiter
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".


SQL Script (1) Aufgabenvorbereitung


  
UPDATE
  [topfactArchiv].[dbo].[tf_Archive001]

  
SET kfmstatus9 = 'aufgabe-zu-erstellen'

  
WHERE
  techstatus !=
'ungültig'
  
AND
  (versandart =
'Scan' OR versandart = 'E-Mail')
  
--AND
  
--tf_docid > 2520 -- for testing only
  
AND
  (bearbeiter1
IS NOT NULL AND bearbeiter1 != '') -- es wurde ein Bearbeiter ausgewählt der die Aufgabe bekommen soll
  
AND
  (belegart
IS NOT NULL AND belegnummer IS NOT NULL AND gpnummer IS NOT NULL) -- relevanten Indexdaten sind nach Scan gesetzt worden
  
AND
  (kfmstatus1
IS NULL OR kfmstatus1 = '' OR kfmstatus1 = '.') -- noch nicht vom Nutzer gestempelt
  
AND
  (kfmstatus2
IS NULL OR kfmstatus2 = '' OR kfmstatus2 = '.') -- noch nicht vom Nutzer gestempelt
  
AND
  kfmstatus9
IS NULL -- alle tatsächlich erstellten Aufgaben setzen den kfmstatus9 auf aufgabe-erstellt gesetzt
  



SQL Script (2) Aufgabenerstellung


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;  



Inhaltsverzeichnis