UPDATE TBDD_MODULES SET DB_VERSION = '2.9' where NAME = 'Process-Manager'; GO USE [DD_ECM] GO /****** Object: View [dbo].[VWPM_CONTROL_INDEX] Script Date: 20.02.2026 10:00:05 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- Changed 20.02.2026 Nolock ALTER VIEW [dbo].[VWPM_CONTROL_INDEX] AS SELECT TOP 100 PERCENT T1.GUID, T.GUID PROFIL_ID, T.NAME PROFIL_NAME, T.LOG_INDEX, T1.NAME CTRL_NAME, T1.CTRL_TYPE, T1.CTRL_TEXT, T1.X_LOC, T1.Y_LOC, T1.FONT_COLOR, T1.FONT_FAMILY, T1.FONT_SIZE, T1.FONT_STYLE, T1.WIDTH, T1.HEIGHT, COALESCE(T1.INDEX_NAME,'') INDEX_NAME, 0 AS IDB_TYP, T1.VALIDATION, T1.CHOICE_LIST, T1.TYP, T1.CONNECTION_ID, CASE WHEN T1.[SQL_UEBERPRUEFUNG] IS NULL THEN '' ELSE T1.[SQL_UEBERPRUEFUNG] END AS [SQL_UEBERPRUEFUNG], T1.[READ_ONLY], T1.LOAD_IDX_VALUE, T1.DEFAULT_VALUE, T1.REGEX_MATCH, T1.REGEX_MESSAGE_DE, T1.REGEX_MESSAGE_EN, T1.OVERWRITE_DATA, T1.SET_CONTROL_DATA, T1.SAVE_CHANGE_ON_ENABLED, T1.FORMAT_STRING CTRL_FORMAT_STRING, T1.BACKCOLOR_IF CTRL_BACKCOLOR_IF, T1.VKT_ADD_ITEM FROM TBPM_PROFILE T WITH (NOLOCK), TBPM_PROFILE_CONTROLS T1 WITH (NOLOCK) WHERE T.GUID = T1.PROFIL_ID AND T1.CONTROL_ACTIVE = 1 ORDER BY T.GUID, T1.X_LOC, T1.Y_LOC GO USE [DD_ECM] GO -- Changed 20.02.2026 MS Nolock -- Changed: 30.11.2022 MS SHOW_DOC ALTER VIEW [dbo].[VWPM_PROFILE_ACTIVE] AS SELECT T1.[GUID] ,T1.[NAME] ,T1.[TITLE] ,T1.[WD_OBJECTTYPE] ,T1.[PRIORITY] ,T1.[DESCRIPTION] ,T1.[TYPE] ,T1.[LOG_INDEX] ,T1.[IN_WORK] ,T1.[ACTIVE] ,T1.[WD_SEARCH] ,T1.[PM_VEKTOR_INDEX] ,T1.[NO_OF_DOCUMENTS] ,T1.[FINAL_PROFILE] ,T1.[FINAL_TEXT] ,T1.[MOVE2FOLDER] ,T1.[SORT_BY_LATEST] ,T1.[WORK_HISTORY_ENTRY] ,T1.[ANNOTATE_ALL_WORK_HISTORY_ENTRIES] ,T1.[ANNOTATE_WORK_HISTORY_ENTRY] ,T1.[SQL_VIEW] ,T1.[ADDED_WHO] ,T1.[ADDED_WHEN] ,T1.[CHANGED_WHO] ,T1.[CHANGED_WHEN] ,T1.[DISPLAY_MODE] ,T1.SHOW_DOCUMENT ,(SELECT COUNT(GUID) FROM TBPM_PROFILE_FILES WITH (READPAST) WHERE PROFIL_ID = T1.GUID) AS FILE_COUNT, [dbo].[FNPM_PROFILE_GROUP_COLOR] (T1.GUID) AS 'GROUP_COLOR', dbo.FNPM_PROFILE_GROUP_FONT_COLOR (T1.GUID) AS 'GROUP_FONT_COLOR', [dbo].[FNPM_PROFILE_GROUP_TEXT] (T1.GUID) AS 'GROUP_TEXT' FROM TBPM_PROFILE T1 WITH (NOLOCK) WHERE T1.ACTIVE = 1 GO --DROP TABLE TBPM_PROFILE_QUEUE; CREATE TABLE dbo.TBPM_PROFILE_QUEUE ( QUEUE_ID BIGINT IDENTITY(1,1) NOT NULL, FILE_GUID BIGINT NOT NULL, DOC_ID BIGINT NOT NULL, PROFIL_ID INT NOT NULL, STATUS TINYINT NOT NULL DEFAULT 0, -- 0=READY, 1=WORKING, 2=DONE, 3=ERROR TRY_COUNT SMALLINT NOT NULL DEFAULT 0, CREATED_WHEN DATETIME2(3) NOT NULL DEFAULT SYSDATETIME(), STARTED_WHEN DATETIME2(3) NULL, FINISHED_WHEN DATETIME2(3) NULL, ERROR_MSG NVARCHAR(2000) NULL, CONSTRAINT PK_TBPM_PROFILE_QUEUE PRIMARY KEY CLUSTERED (QUEUE_ID) ); GO CREATE NONCLUSTERED INDEX IX_QUEUE_READY ON dbo.TBPM_PROFILE_QUEUE (PROFIL_ID, QUEUE_ID) INCLUDE (FILE_GUID, DOC_ID) WHERE STATUS = 0 WITH (FILLFACTOR = 90); GO CREATE UNIQUE INDEX UX_QUEUE_ACTIVE ON dbo.TBPM_PROFILE_QUEUE (FILE_GUID, PROFIL_ID) WHERE STATUS IN (0,1); GO CREATE NONCLUSTERED INDEX IX_QUEUE_WORKING_TIMEOUT ON dbo.TBPM_PROFILE_QUEUE (STATUS, STARTED_WHEN) WHERE STATUS = 1; GO CREATE OR ALTER PROCEDURE dbo.PRTF_CUST_WORKFLOW_WORKER @ProfilFilter NVARCHAR(200) = NULL, @BatchSize INT = 20 AS BEGIN IF @BatchSize IS NULL OR @BatchSize < 1 SET @BatchSize = 1; IF @BatchSize > 100 SET @BatchSize = 100; -- harte Obergrenze SET NOCOUNT ON; SET XACT_ABORT ON; CREATE TABLE #Batch ( QUEUE_ID BIGINT, FILE_GUID BIGINT, DOC_ID BIGINT, PROFIL_ID INT ); WHILE 1 = 1 BEGIN DELETE FROM #Batch; BEGIN TRAN; ;WITH cte AS ( SELECT TOP (@BatchSize) QUEUE_ID FROM dbo.TBPM_PROFILE_QUEUE WITH (ROWLOCK, READPAST, UPDLOCK) WHERE STATUS = 0 AND ( @ProfilFilter IS NULL OR PROFIL_ID IN ( SELECT TRY_CAST(value AS INT) FROM STRING_SPLIT(@ProfilFilter, ',') ) ) ORDER BY QUEUE_ID ) UPDATE q SET STATUS = 1, STARTED_WHEN = SYSDATETIME() OUTPUT INSERTED.QUEUE_ID, INSERTED.FILE_GUID, INSERTED.DOC_ID ,INSERTED.PROFIL_ID INTO #Batch FROM dbo.TBPM_PROFILE_QUEUE q INNER JOIN cte ON q.QUEUE_ID = cte.QUEUE_ID; IF @@ROWCOUNT = 0 BEGIN COMMIT; BREAK; END COMMIT; ------------------------------------------------ -- Verarbeitung außerhalb der Transaktion ------------------------------------------------ DECLARE @QueueId BIGINT, @FileGuid BIGINT, @DocID BIGINT, @ProfilId INT; DECLARE cur CURSOR LOCAL FAST_FORWARD FOR SELECT QUEUE_ID, FILE_GUID, DOC_ID, PROFIL_ID FROM #Batch; OPEN cur; FETCH NEXT FROM cur INTO @QueueId, @FileGuid, @DocID, @ProfilId; WHILE @@FETCH_STATUS = 0 BEGIN BEGIN TRY DECLARE @MSG NVARCHAR(250) = 'WORKING ON @DocID: ' + CONVERT(NVARCHAR(100),@DocID) RAISERROR (@MSG, 0, 1) WITH NOWAIT; ------------------------------------------------ -- HIER DEINE BUSINESS LOGIK EINSETZEN -- z.B. PRCUST_ADD_OBJECT_JOB ------------------------------------------------ IF @ProfilId = 64 BEGIN PRINT 'PROFIL 64'; END ELSE BEGIN IF @ProfilId IN (6,10,11,12,13) BEGIN SET @MSG = 'CREATE_WF_OVERVIEW_RECORD_MB...' RAISERROR (@MSG, 0, 1) WITH NOWAIT; EXEC PRCUST_ADD_OBJECT_JOB @DocId, 'CREATE_WF_OVERVIEW_RECORD_MB', 'PRTF_CUST_WORKFLOW_WORKER_OPT', @ProfilId, @FileGuid; END IF @ProfilId = 12 BEGIN EXEC PRCUST_ADD_OBJECT_JOB @DocId, 'CREATE_WF41_RECORD', 'PRTF_CUST_WORKFLOW_WORKER_OPT'; END IF @ProfilId <> 12 BEGIN SET @MSG = 'CREATE_WF_OVERVIEW_RECORD...' RAISERROR (@MSG, 0, 1) WITH NOWAIT; EXEC PRCUST_ADD_OBJECT_JOB @DocId, 'CREATE_WF_OVERVIEW_RECORD', 'PRTF_CUST_WORKFLOW_WORKER_OPT', @ProfilId, @FileGuid; END END UPDATE dbo.TBPM_PROFILE_QUEUE SET STATUS = 2, FINISHED_WHEN = SYSDATETIME() WHERE QUEUE_ID = @QueueId; END TRY BEGIN CATCH UPDATE dbo.TBPM_PROFILE_QUEUE SET STATUS = 3, TRY_COUNT = TRY_COUNT + 1, ERROR_MSG = ERROR_MESSAGE() WHERE QUEUE_ID = @QueueId; END CATCH FETCH NEXT FROM cur INTO @QueueId, @FileGuid, @DocID, @ProfilId; END CLOSE cur; DEALLOCATE cur; END END; GO