Serverumzug
This commit is contained in:
@@ -0,0 +1,169 @@
|
||||
USE [DD_ECM_REF]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
-- PRMOT_MON_GET_TREEVIEW_RESULTS (Value: STRING)
|
||||
-- =================================================================
|
||||
-- Haupteinstiegspunkt in die Monitor-Suche
|
||||
--
|
||||
-- Returns: Tabelle
|
||||
-- =================================================================
|
||||
-- Copyright (c) 2026 by Digital Data GmbH
|
||||
--
|
||||
-- Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim
|
||||
-- Tel.: 0641/202360 • E-Mail: info-flow@digitaldata.works
|
||||
-- =================================================================
|
||||
-- History:
|
||||
-- 10.03.2026 / MP - Prozedur erstellt.
|
||||
-- 13.03.2026 / MP - Prozedur für MOT-Tabellen angepasst
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PRMOT_MON_GET_TREEVIEW_RESULTS]
|
||||
@SEARCH_VALUE NVARCHAR(100), -- Belegnummer. Muss länger als n Zeichen sein
|
||||
@USR_ID INTEGER -- UserID aus Monitor
|
||||
AS
|
||||
BEGIN
|
||||
-- Optimierungen
|
||||
SET NOCOUNT ON;
|
||||
SET ARITHABORT ON;
|
||||
|
||||
DECLARE @MIN_SEARCH_LEN INT, @BATCH_SIZE INT;
|
||||
SET @MIN_SEARCH_LEN = 5; -- Mindestlänge der Belegnummer
|
||||
SET @BATCH_SIZE = 10; -- Max. Belege, für die Daten gesucht werden.
|
||||
|
||||
DECLARE @ID INTEGER, @PID INTEGER, @PID_OFFSET INTEGER, @EMAILMSGID VARCHAR(200), @GLOB_COUNTER INTEGER,
|
||||
@ERG_COUNTER INTEGER, @STRING VARCHAR(50), @ADDED_WHEN DATETIME, @EXPANDED_SWITCH SMALLINT;
|
||||
|
||||
DECLARE @tt1 TABLE (GUID INT); -- temp Tabelle für GUIDs
|
||||
|
||||
SET @ID = 0;
|
||||
SET @PID = 1;
|
||||
SET @PID_OFFSET = 0;
|
||||
SET @EXPANDED_SWITCH = 1;
|
||||
|
||||
-- ### CLEAR former Results ##
|
||||
DELETE FROM [DD_ECM_REF].dbo.MOTB_MON_TREEVIEW_RESULTS WITH (SNAPSHOT) WHERE USR_ID = @USR_ID;
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
-- Such-Parameter bearbeiten
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
IF LEN(@SEARCH_VALUE) < @MIN_SEARCH_LEN
|
||||
BEGIN
|
||||
EXEC [DD_ECM_REF].dbo.PRMOT_MON_TREEVIEW_ADD_ROW @USR_ID, NULL, 1, 0, NULL, NULL, 'Belegnummer zu kurz!', NULL, NULL, 0;
|
||||
SELECT * FROM [DD_ECM_REF].dbo.MOTB_MON_TREEVIEW_RESULTS WITH (SNAPSHOT) WHERE USR_ID = @USR_ID ORDER BY GUID;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
---- führende 00er entfernen
|
||||
DECLARE @SEARCH_VALUE2 VARCHAR(50);
|
||||
SELECT @SEARCH_VALUE2 = SUBSTRING(Spalte, PATINDEX('%[^0]%', Spalte + ' '), LEN(Spalte))
|
||||
FROM (SELECT @SEARCH_VALUE AS Spalte) AS t;
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
-- Such-Menge (MessageIDs) eingrenzen
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
DECLARE @tbl TABLE (EMAILMSGID VARCHAR(200));
|
||||
DELETE FROM @tbl;
|
||||
|
||||
---- XML-Daten zuerst
|
||||
INSERT INTO @tbl
|
||||
SELECT DISTINCT REFERENCE_GUID
|
||||
FROM DD_ECM.DBO.TBEDMI_ITEM_VALUE WITH (NOLOCK)
|
||||
WHERE SPEC_NAME = 'INVOICE_NUMBER' AND ITEM_VALUE = @SEARCH_VALUE;
|
||||
|
||||
---- sonstige E-Mail-Eingänge, der letzten 6 Monate, ohne führende 00er
|
||||
INSERT INTO @tbl
|
||||
SELECT EMAIL_MSGID
|
||||
FROM DD_ECM.dbo.TBEMLP_HISTORY WITH (NOLOCK)
|
||||
WHERE EMAIL_SUBJECT LIKE '%' + TRIM(@SEARCH_VALUE2) + '%'
|
||||
AND datediff(month, EMAIL_DATE, getdate()) <= 6
|
||||
AND EMAIL_FROM <> 'donotreply@wisag.de'
|
||||
AND EMAIL_MSGID NOT IN (SELECT EMAILMSGID from @tbl);
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
-- CURSOR über gefundene MessageIDs
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
SELECT @GLOB_COUNTER = count(*) FROM @tbl;
|
||||
IF @GLOB_COUNTER >= 1
|
||||
BEGIN
|
||||
SET @ERG_COUNTER = @GLOB_COUNTER
|
||||
|
||||
DECLARE main_msgid_cursor CURSOR LOCAL FAST_FORWARD FOR
|
||||
|
||||
SELECT TOP (@BATCH_SIZE) EMAILMSGID FROM @tbl;
|
||||
|
||||
OPEN main_msgid_cursor;
|
||||
FETCH NEXT FROM main_msgid_cursor INTO @EMAILMSGID;
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
--PRINT 'PRDD_MONITORING_GET_TREEVIEW_RESULT 3'
|
||||
|
||||
-- ## Ermittele die Start ID ##
|
||||
SET @ID = (SELECT coalesce(max(GUID),0) FROM [DD_ECM_REF].dbo.MOTB_MON_TREEVIEW_RESULTS WITH (SNAPSHOT) WHERE USR_ID = @USR_ID);
|
||||
|
||||
-- ## Ermittele die Start PID ##
|
||||
IF @GLOB_COUNTER = 1
|
||||
SET @PID = 0;
|
||||
ELSE
|
||||
BEGIN
|
||||
SET @ID +=1;
|
||||
SET @STRING = 'Ergebnis '+ CONVERT(varchar, @ERG_COUNTER);
|
||||
|
||||
IF @GLOB_COUNTER = @ERG_COUNTER
|
||||
SET @EXPANDED_SWITCH = 1;
|
||||
ELSE
|
||||
SET @EXPANDED_SWITCH = 0;
|
||||
|
||||
SELECT @ADDED_WHEN = MIN(CREATEDWHEN) FROM DD_ECM.dbo.TBEDMI_ITEM_VALUE WHERE REFERENCE_GUID = @EMAILMSGID;
|
||||
|
||||
EXEC [DD_ECM_REF].dbo.PRMOT_MON_TREEVIEW_ADD_ROW @USR_ID, NULL, @ID, 0, @ADDED_WHEN, @STRING, NULL, NULL, NULL, @EXPANDED_SWITCH;
|
||||
SET @ERG_COUNTER -= 1;
|
||||
SET @PID = @ID;
|
||||
END
|
||||
|
||||
--PRINT 'PRDD_MONITORING_GET_TREEVIEW_RESULT 4'
|
||||
EXEC [DD_ECM_REF].dbo.[PRMOT_MON_GET_TREEVIEW_RESULTS_PER_MESSAGEID] @EMAILMSGID, @USR_ID, @ID, @PID;
|
||||
--PRINT 'PRDD_MONITORING_GET_TREEVIEW_RESULT 5'
|
||||
|
||||
FETCH NEXT FROM main_msgid_cursor INTO @EMAILMSGID
|
||||
END
|
||||
CLOSE main_msgid_cursor
|
||||
DEALLOCATE main_msgid_cursor
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
-- DIESE ABFRAGE IST TEUER!!!!
|
||||
|
||||
--PRINT 'SEARCH @EMAILMSGID IN TBEMLP_EMAIL_OUT'
|
||||
DECLARE @E_SUBJ VARCHAR(256)
|
||||
SET @E_SUBJ = '% '+ @SEARCH_VALUE2 +' %';
|
||||
SELECT @EMAILMSGID = REFERENCE_STRING FROM DD_ECM.dbo.TBEMLP_EMAIL_OUT WHERE EMAIL_SUBJ like @E_SUBJ;
|
||||
|
||||
IF LEN(@EMAILMSGID) = 0 OR @EMAILMSGID IS NULL
|
||||
BEGIN
|
||||
-- Ohne EMail-MessageID werden keine weiteren DAten gefunden
|
||||
--PRINT 'NO @EMAILMSGID FOUND'
|
||||
EXEC [DD_ECM_REF].dbo.PRMOT_MON_TREEVIEW_ADD_ROW @USR_ID,NULL,@ID,@PID,NULL,'Fehlende Belegdaten ','Es wurden keine Belegdaten gefunden!','HIGHLIGHT';
|
||||
RETURN
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
--PRINT 'PRDD_MONITORING_GET_TREEVIEW_RESULT 6'
|
||||
EXEC [DD_ECM_REF].[dbo].[PRMOT_MON_GET_TREEVIEW_RESULTS_PER_MESSAGEID] @EMAILMSGID, @USR_ID, 0, 0;
|
||||
--PRINT 'PRDD_MONITORING_GET_TREEVIEW_RESULT 7'
|
||||
END
|
||||
END
|
||||
|
||||
--PRINT 'PRDD_MONITORING_GET_TREEVIEW_RESULT 8'
|
||||
-- ### LAST STEP - Get all results ###
|
||||
SELECT * FROM [DD_ECM_REF].dbo.MOTB_MON_TREEVIEW_RESULTS WITH (SNAPSHOT) WHERE USR_ID = @USR_ID ORDER BY GUID;
|
||||
|
||||
END
|
||||
GO
|
||||
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
USE [DD_ECM_REF]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
-- PRMOT_MON_GET_TREEVIEW_RESULTS (Value: STRING)
|
||||
-- =================================================================
|
||||
-- Haupteinstiegspunkt in die Monitor-Suche
|
||||
--
|
||||
-- Returns: Tabelle
|
||||
-- =================================================================
|
||||
-- Copyright (c) 2026 by Digital Data GmbH
|
||||
--
|
||||
-- Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim
|
||||
-- Tel.: 0641/202360 • E-Mail: info-flow@digitaldata.works
|
||||
-- =================================================================
|
||||
-- History:
|
||||
-- 10.03.2026 / MP - Prozedur erstellt.
|
||||
-- 13.03.2026 / MP - Prozedur für MOT-Tabellen angepasst
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PRMOT_MON_GET_TREEVIEW_RESULTS]
|
||||
@SEARCH_VALUE NVARCHAR(100), -- Belegnummer. Muss länger als n Zeichen sein
|
||||
@USR_ID INTEGER -- UserID aus Monitor
|
||||
AS
|
||||
BEGIN
|
||||
-- Optimierungen
|
||||
SET NOCOUNT ON;
|
||||
SET ARITHABORT ON;
|
||||
|
||||
DECLARE @MIN_SEARCH_LEN INT, @BATCH_SIZE INT;
|
||||
SET @MIN_SEARCH_LEN = 5; -- Mindestlänge der Belegnummer
|
||||
SET @BATCH_SIZE = 10; -- Max. Belege, für die Daten gesucht werden.
|
||||
|
||||
DECLARE @ID INTEGER, @PID INTEGER, @PID_OFFSET INTEGER, @EMAILMSGID VARCHAR(200), @GLOB_COUNTER INTEGER,
|
||||
@ERG_COUNTER INTEGER, @STRING VARCHAR(50), @ADDED_WHEN DATETIME, @EXPANDED_SWITCH SMALLINT;
|
||||
|
||||
DECLARE @tt1 TABLE (GUID INT); -- temp Tabelle für GUIDs
|
||||
|
||||
SET @ID = 0;
|
||||
SET @PID = 1;
|
||||
SET @PID_OFFSET = 0;
|
||||
SET @EXPANDED_SWITCH = 1;
|
||||
|
||||
-- ### CLEAR former Results ##
|
||||
DELETE FROM [DD_ECM_REF].dbo.MOTB_MON_TREEVIEW_RESULTS WITH (SNAPSHOT) WHERE USR_ID = @USR_ID;
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
-- Such-Parameter bearbeiten
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
IF LEN(@SEARCH_VALUE) < @MIN_SEARCH_LEN
|
||||
BEGIN
|
||||
EXEC [DD_ECM_REF].dbo.PRMOT_MON_TREEVIEW_ADD_ROW @USR_ID, NULL, 1, 0, NULL, NULL, 'Belegnummer zu kurz!', NULL, NULL, 0;
|
||||
SELECT * FROM [DD_ECM_REF].dbo.MOTB_MON_TREEVIEW_RESULTS WITH (SNAPSHOT) WHERE USR_ID = @USR_ID ORDER BY GUID;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
---- führende 00er entfernen
|
||||
DECLARE @SEARCH_VALUE2 VARCHAR(50);
|
||||
SELECT @SEARCH_VALUE2 = SUBSTRING(Spalte, PATINDEX('%[^0]%', Spalte + ' '), LEN(Spalte))
|
||||
FROM (SELECT @SEARCH_VALUE AS Spalte) AS t;
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
-- Such-Menge (MessageIDs) eingrenzen
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
DECLARE @tbl TABLE (EMAILMSGID VARCHAR(200));
|
||||
DELETE FROM @tbl;
|
||||
|
||||
---- XML-Daten zuerst
|
||||
INSERT INTO @tbl
|
||||
SELECT DISTINCT REFERENCE_GUID
|
||||
FROM DD_ECM.DBO.TBEDMI_ITEM_VALUE WITH (NOLOCK)
|
||||
WHERE SPEC_NAME = 'INVOICE_NUMBER' AND ITEM_VALUE = @SEARCH_VALUE;
|
||||
|
||||
---- sonstige E-Mail-Eingänge, der letzten 6 Monate, ohne führende 00er
|
||||
INSERT INTO @tbl
|
||||
SELECT EMAIL_MSGID
|
||||
FROM DD_ECM.dbo.TBEMLP_HISTORY WITH (NOLOCK)
|
||||
WHERE EMAIL_SUBJECT LIKE '%' + TRIM(@SEARCH_VALUE2) + '%'
|
||||
AND datediff(month, EMAIL_DATE, getdate()) <= 6
|
||||
AND EMAIL_FROM <> 'donotreply@wisag.de'
|
||||
AND EMAIL_MSGID NOT IN (SELECT EMAILMSGID from @tbl);
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
-- CURSOR über gefundene MessageIDs
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
SELECT @GLOB_COUNTER = count(*) FROM @tbl;
|
||||
IF @GLOB_COUNTER >= 1
|
||||
BEGIN
|
||||
SET @ERG_COUNTER = @GLOB_COUNTER
|
||||
|
||||
DECLARE main_msgid_cursor CURSOR LOCAL FAST_FORWARD FOR
|
||||
|
||||
SELECT TOP (@BATCH_SIZE) EMAILMSGID FROM @tbl;
|
||||
|
||||
OPEN main_msgid_cursor;
|
||||
FETCH NEXT FROM main_msgid_cursor INTO @EMAILMSGID;
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
--PRINT 'PRDD_MONITORING_GET_TREEVIEW_RESULT 3'
|
||||
|
||||
-- ## Ermittele die Start ID ##
|
||||
DELETE FROM @tt1;
|
||||
INSERT INTO @tt1
|
||||
SELECT coalesce(max(GUID),0)
|
||||
FROM [DD_ECM_REF].dbo.MOTB_MON_TREEVIEW_RESULTS WITH (SNAPSHOT)
|
||||
WHERE USR_ID = @USR_ID;
|
||||
SELECT @ID = GUID from @tt1;
|
||||
|
||||
-- ## Ermittele die Start PID ##
|
||||
IF @GLOB_COUNTER = 1
|
||||
SET @PID = 0;
|
||||
ELSE
|
||||
BEGIN
|
||||
SET @ID +=1;
|
||||
SET @STRING = 'Ergebnis '+ CONVERT(varchar, @ERG_COUNTER);
|
||||
|
||||
IF @GLOB_COUNTER = @ERG_COUNTER
|
||||
SET @EXPANDED_SWITCH = 1;
|
||||
ELSE
|
||||
SET @EXPANDED_SWITCH = 0;
|
||||
|
||||
SELECT @ADDED_WHEN = MIN(CREATEDWHEN) FROM DD_ECM.dbo.TBEDMI_ITEM_VALUE WHERE REFERENCE_GUID = @EMAILMSGID;
|
||||
|
||||
EXEC [DD_ECM_REF].dbo.PRMOT_MON_TREEVIEW_ADD_ROW @USR_ID, NULL, @ID, 0, @ADDED_WHEN, @STRING, NULL, NULL, NULL, @EXPANDED_SWITCH;
|
||||
SET @ERG_COUNTER -= 1;
|
||||
SET @PID = @ID;
|
||||
END
|
||||
|
||||
--PRINT 'PRDD_MONITORING_GET_TREEVIEW_RESULT 4'
|
||||
EXEC [DD_ECM_REF].dbo.[PRMOT_MON_GET_TREEVIEW_RESULTS_PER_MESSAGEID] @EMAILMSGID, @USR_ID, @ID, @PID;
|
||||
--PRINT 'PRDD_MONITORING_GET_TREEVIEW_RESULT 5'
|
||||
|
||||
FETCH NEXT FROM main_msgid_cursor INTO @EMAILMSGID
|
||||
END
|
||||
CLOSE main_msgid_cursor
|
||||
DEALLOCATE main_msgid_cursor
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
-- DIESE ABFRAGE IST TEUER!!!!
|
||||
|
||||
--PRINT 'SEARCH @EMAILMSGID IN TBEMLP_EMAIL_OUT'
|
||||
DECLARE @E_SUBJ VARCHAR(256)
|
||||
SET @E_SUBJ = '% '+ @SEARCH_VALUE2 +' %';
|
||||
SELECT @EMAILMSGID = REFERENCE_STRING FROM DD_ECM.dbo.TBEMLP_EMAIL_OUT WHERE EMAIL_SUBJ like @E_SUBJ;
|
||||
|
||||
IF LEN(@EMAILMSGID) = 0 OR @EMAILMSGID IS NULL
|
||||
BEGIN
|
||||
-- Ohne EMail-MessageID werden keine weiteren DAten gefunden
|
||||
--PRINT 'NO @EMAILMSGID FOUND'
|
||||
EXEC [DD_ECM_REF].dbo.PRMOT_MON_TREEVIEW_ADD_ROW @USR_ID,NULL,@ID,@PID,NULL,'Fehlende Belegdaten ','Es wurden keine Belegdaten gefunden!','HIGHLIGHT';
|
||||
RETURN
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
--PRINT 'PRDD_MONITORING_GET_TREEVIEW_RESULT 6'
|
||||
EXEC [DD_ECM_REF].[dbo].[PRMOT_MON_GET_TREEVIEW_RESULTS_PER_MESSAGEID] @EMAILMSGID, @USR_ID, 0, 0;
|
||||
--PRINT 'PRDD_MONITORING_GET_TREEVIEW_RESULT 7'
|
||||
END
|
||||
END
|
||||
|
||||
--PRINT 'PRDD_MONITORING_GET_TREEVIEW_RESULT 8'
|
||||
-- ### LAST STEP - Get all results ###
|
||||
SELECT * FROM [DD_ECM_REF].dbo.MOTB_MON_TREEVIEW_RESULTS WITH (SNAPSHOT) WHERE USR_ID = @USR_ID ORDER BY GUID;
|
||||
|
||||
END
|
||||
GO
|
||||
|
||||
|
||||
@@ -0,0 +1,249 @@
|
||||
USE [DD_ECM_REF]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
-- PRMOT_MON_GET_TREEVIEW_RESULTS_SAFE (Value: STRING)
|
||||
-- =================================================================
|
||||
-- Msg 41317-safe Variante:
|
||||
-- - wird in DD_ECM_REF erstellt/ausgefuehrt
|
||||
-- - liest aus DD_ECM (nur READ)
|
||||
-- - nutzt nur lokale Tabellenvariablen fuer Ergebnisaufbau
|
||||
-- - kein Zugriff auf memory-optimized MOTB_MON_TREEVIEW_RESULTS
|
||||
-- =================================================================
|
||||
-- Copyright (c) 2026 by Digital Data GmbH
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PRMOT_MON_GET_TREEVIEW_RESULTS_SAFE]
|
||||
@SEARCH_VALUE NVARCHAR(100),
|
||||
@USR_ID INT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET ARITHABORT ON;
|
||||
|
||||
DECLARE @MIN_SEARCH_LEN INT = 5;
|
||||
DECLARE @BATCH_SIZE INT = 10;
|
||||
|
||||
DECLARE @ID INT = 0;
|
||||
DECLARE @PID INT = 1;
|
||||
DECLARE @EMAILMSGID VARCHAR(200);
|
||||
DECLARE @GLOB_COUNTER INT = 0;
|
||||
DECLARE @ERG_COUNTER INT = 0;
|
||||
DECLARE @STRING VARCHAR(50);
|
||||
DECLARE @ADDED_WHEN DATETIME;
|
||||
DECLARE @EXPANDED_SWITCH SMALLINT = 1;
|
||||
|
||||
IF LEN(ISNULL(@SEARCH_VALUE, N'')) < @MIN_SEARCH_LEN
|
||||
BEGIN
|
||||
SELECT
|
||||
@USR_ID AS USR_ID,
|
||||
CAST(1 AS INT) AS GUID,
|
||||
CAST(0 AS INT) AS PID,
|
||||
CAST(NULL AS DATETIME) AS ADDED_WHEN,
|
||||
CAST('Belegnummer zu kurz!' AS VARCHAR(255)) AS TITLE,
|
||||
CAST(NULL AS VARCHAR(500)) AS DETAILS,
|
||||
CAST(NULL AS VARCHAR(50)) AS STYLE,
|
||||
CAST(0 AS SMALLINT) AS EXPANDED,
|
||||
CAST(NULL AS VARCHAR(200)) AS EMAILMSGID;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
DECLARE @SEARCH_VALUE2 VARCHAR(50);
|
||||
SELECT @SEARCH_VALUE2 = SUBSTRING(Spalte, PATINDEX('%[^0]%', Spalte + ' '), LEN(Spalte))
|
||||
FROM (SELECT CONVERT(VARCHAR(50), @SEARCH_VALUE) AS Spalte) AS t;
|
||||
|
||||
DECLARE @tbl TABLE
|
||||
(
|
||||
EMAILMSGID VARCHAR(200) NOT NULL PRIMARY KEY
|
||||
);
|
||||
|
||||
INSERT INTO @tbl (EMAILMSGID)
|
||||
SELECT DISTINCT REFERENCE_GUID
|
||||
FROM DD_ECM.dbo.TBEDMI_ITEM_VALUE WITH (NOLOCK)
|
||||
WHERE SPEC_NAME = 'INVOICE_NUMBER'
|
||||
AND ITEM_VALUE = @SEARCH_VALUE;
|
||||
|
||||
INSERT INTO @tbl (EMAILMSGID)
|
||||
SELECT DISTINCT h.EMAIL_MSGID
|
||||
FROM DD_ECM.dbo.TBEMLP_HISTORY AS h WITH (NOLOCK)
|
||||
WHERE h.EMAIL_SUBJECT LIKE '%' + TRIM(@SEARCH_VALUE2) + '%'
|
||||
AND DATEDIFF(MONTH, h.EMAIL_DATE, GETDATE()) <= 6
|
||||
AND h.EMAIL_FROM <> 'donotreply@wisag.de'
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @tbl AS t
|
||||
WHERE t.EMAILMSGID = h.EMAIL_MSGID
|
||||
);
|
||||
|
||||
DECLARE @results TABLE
|
||||
(
|
||||
USR_ID INT NOT NULL,
|
||||
GUID INT NOT NULL,
|
||||
PID INT NOT NULL,
|
||||
ADDED_WHEN DATETIME NULL,
|
||||
TITLE VARCHAR(255) NULL,
|
||||
DETAILS VARCHAR(500) NULL,
|
||||
STYLE VARCHAR(50) NULL,
|
||||
EXPANDED SMALLINT NOT NULL,
|
||||
EMAILMSGID VARCHAR(200) NULL
|
||||
);
|
||||
|
||||
SELECT @GLOB_COUNTER = COUNT(*) FROM @tbl;
|
||||
|
||||
IF @GLOB_COUNTER >= 1
|
||||
BEGIN
|
||||
SET @ERG_COUNTER = @GLOB_COUNTER;
|
||||
|
||||
DECLARE main_msgid_cursor CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT TOP (@BATCH_SIZE) EMAILMSGID
|
||||
FROM @tbl
|
||||
ORDER BY EMAILMSGID;
|
||||
|
||||
OPEN main_msgid_cursor;
|
||||
FETCH NEXT FROM main_msgid_cursor INTO @EMAILMSGID;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SET @ID += 1;
|
||||
|
||||
IF @GLOB_COUNTER = 1
|
||||
BEGIN
|
||||
SET @PID = 0;
|
||||
SET @STRING = 'Ergebnis 1';
|
||||
SET @EXPANDED_SWITCH = 1;
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SET @PID = @ID;
|
||||
SET @STRING = 'Ergebnis ' + CONVERT(VARCHAR(10), @ERG_COUNTER);
|
||||
|
||||
IF @GLOB_COUNTER = @ERG_COUNTER
|
||||
SET @EXPANDED_SWITCH = 1;
|
||||
ELSE
|
||||
SET @EXPANDED_SWITCH = 0;
|
||||
END
|
||||
|
||||
SELECT @ADDED_WHEN = MIN(CREATEDWHEN)
|
||||
FROM DD_ECM.dbo.TBEDMI_ITEM_VALUE WITH (NOLOCK)
|
||||
WHERE REFERENCE_GUID = @EMAILMSGID;
|
||||
|
||||
INSERT INTO @results
|
||||
(
|
||||
USR_ID,
|
||||
GUID,
|
||||
PID,
|
||||
ADDED_WHEN,
|
||||
TITLE,
|
||||
DETAILS,
|
||||
STYLE,
|
||||
EXPANDED,
|
||||
EMAILMSGID
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@USR_ID,
|
||||
@ID,
|
||||
@PID,
|
||||
@ADDED_WHEN,
|
||||
@STRING,
|
||||
NULL,
|
||||
NULL,
|
||||
@EXPANDED_SWITCH,
|
||||
@EMAILMSGID
|
||||
);
|
||||
|
||||
SET @ERG_COUNTER -= 1;
|
||||
FETCH NEXT FROM main_msgid_cursor INTO @EMAILMSGID;
|
||||
END
|
||||
|
||||
CLOSE main_msgid_cursor;
|
||||
DEALLOCATE main_msgid_cursor;
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
DECLARE @E_SUBJ VARCHAR(256);
|
||||
SET @E_SUBJ = '% ' + @SEARCH_VALUE2 + ' %';
|
||||
|
||||
SELECT TOP (1) @EMAILMSGID = REFERENCE_STRING
|
||||
FROM DD_ECM.dbo.TBEMLP_EMAIL_OUT WITH (NOLOCK)
|
||||
WHERE EMAIL_SUBJ LIKE @E_SUBJ
|
||||
ORDER BY REFERENCE_STRING;
|
||||
|
||||
IF @EMAILMSGID IS NULL OR LEN(@EMAILMSGID) = 0
|
||||
BEGIN
|
||||
INSERT INTO @results
|
||||
(
|
||||
USR_ID,
|
||||
GUID,
|
||||
PID,
|
||||
ADDED_WHEN,
|
||||
TITLE,
|
||||
DETAILS,
|
||||
STYLE,
|
||||
EXPANDED,
|
||||
EMAILMSGID
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@USR_ID,
|
||||
1,
|
||||
0,
|
||||
NULL,
|
||||
'Fehlende Belegdaten',
|
||||
'Es wurden keine Belegdaten gefunden!',
|
||||
'HIGHLIGHT',
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SELECT @ADDED_WHEN = MIN(CREATEDWHEN)
|
||||
FROM DD_ECM.dbo.TBEDMI_ITEM_VALUE WITH (NOLOCK)
|
||||
WHERE REFERENCE_GUID = @EMAILMSGID;
|
||||
|
||||
INSERT INTO @results
|
||||
(
|
||||
USR_ID,
|
||||
GUID,
|
||||
PID,
|
||||
ADDED_WHEN,
|
||||
TITLE,
|
||||
DETAILS,
|
||||
STYLE,
|
||||
EXPANDED,
|
||||
EMAILMSGID
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@USR_ID,
|
||||
1,
|
||||
0,
|
||||
@ADDED_WHEN,
|
||||
'Ergebnis 1',
|
||||
NULL,
|
||||
NULL,
|
||||
1,
|
||||
@EMAILMSGID
|
||||
);
|
||||
END
|
||||
END
|
||||
|
||||
SELECT
|
||||
USR_ID,
|
||||
GUID,
|
||||
PID,
|
||||
ADDED_WHEN,
|
||||
TITLE,
|
||||
DETAILS,
|
||||
STYLE,
|
||||
EXPANDED,
|
||||
EMAILMSGID
|
||||
FROM @results
|
||||
ORDER BY GUID;
|
||||
END
|
||||
GO
|
||||
39
dev/[DD_ECM_REF]-Database/plan.md
Normal file
39
dev/[DD_ECM_REF]-Database/plan.md
Normal file
@@ -0,0 +1,39 @@
|
||||
## Plan: Neue transaktionssichere Treeview-Prozedur
|
||||
|
||||
Die neue Prozedur wird in DD_ECM_REF erstellt und ausgeführt, liest zuerst aus DD_ECM, verarbeitet die Daten vollständig lokal in temporären/klassischen Tabellen und vermeidet jede Schreiboperation auf memory-optimized Tabellen innerhalb desselben Aufrufs. Dadurch bleibt sie auch bei offener äußerer User-Transaktion lauffähig und umgeht Msg 41317. Die Ausgabe erfolgt als Resultset direkt aus lokaler Arbeitsmenge statt aus MOTB_MON_TREEVIEW_RESULTS.
|
||||
|
||||
**Steps**
|
||||
1. Phase 1: Ist-Logik in DD_ECM_READ-Teil und REF_WRITE-Teil zerlegen, inklusive aller Stellen mit Cross-DB-Read und MOT-Zugriff. Grundlage sind die Zugriffe in [PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql.
|
||||
2. Phase 1: Neue Zielprozedur in DD_ECM_REF entwerfen, die Eingaben SEARCH_VALUE und USR_ID beibehält und die Ergebnisstruktur zur bisherigen Ausgabe kompatibel liefert. Diese Prozedur verwendet nur lokale #Temp-Tabellen für den Aufbau der Baumdaten.
|
||||
3. Phase 2: Cross-DB-Vorstufe implementieren: DD_ECM-Reads ausschließlich in lokale #Temp-Tabellen laden (MessageIDs, AddedWhen und ggf. weitere Felder), bevor irgendeine weitere Verarbeitung stattfindet. Diese Phase ist nur lesend gegenüber DD_ECM.
|
||||
4. Phase 2: Bestehende Cursor-/Loop-Logik auf lokale #Temp-Tabellen umstellen; Aufrufe von PRMOT_MON_TREEVIEW_ADD_ROW durch direkte Inserts in lokale Ergebnistabelle ersetzen. Abhängigkeit: Schritt 3.
|
||||
5. Phase 2: Aufruf von PRMOT_MON_GET_TREEVIEW_RESULTS_PER_MESSAGEID entkoppeln. Falls diese Prozedur auf MOT schreibt, wird eine neue lokale Hilfsvariante erstellt, die nur in #Temp-Ergebnistabellen schreibt. Abhängigkeit: Schritt 4.
|
||||
6. Phase 3: Finale Ausgabe ausschließlich per SELECT aus lokaler Ergebnistabelle zurückgeben, sortiert wie bisher nach GUID. Kein Zugriff auf MOTB_MON_TREEVIEW_RESULTS in der neuen Prozedur.
|
||||
7. Phase 3: Vorhandene Prozedur unverändert lassen und neue Prozedur mit neuem Namen bereitstellen (zuerst Parallelbetrieb), damit Rückfallpfad vorhanden bleibt.
|
||||
|
||||
**Relevant files**
|
||||
- [PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql([PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql) — Referenz für bestehende Suchlogik, Cursorfluss und Ausgabeverhalten.
|
||||
- [PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql([PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql#L48) — aktueller MOT-DELETE-Zugriff, in neuer Prozedur zu vermeiden.
|
||||
- [PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql([PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql#L70) — DD_ECM-Read INVOICE_NUMBER.
|
||||
- [PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql([PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql#L74) — DD_ECM-Read HISTORY.
|
||||
- [PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql([PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql#L125) — DD_ECM-Read CREATEDWHEN.
|
||||
- [PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql([PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql#L135) — Abhängigkeit zu PER_MESSAGEID.
|
||||
- [PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql([PRMOT_MON_GET_TREEVIEW_RESULTS]_ok.sql#L173) — bisherige Endausgabe aus MOT-Tabelle.
|
||||
|
||||
**Verification**
|
||||
1. Technischer Negativtest: Ausführung der neuen Prozedur innerhalb BEGIN TRAN/COMMIT bei offenem Transaktionskontext; erwartetes Ergebnis: kein Msg 41317.
|
||||
2. Funktionaler Vergleichstest: identische Suchwerte mit alter und neuer Prozedur ausführen, Ergebnisanzahl und Sortierung vergleichen (mindestens 10 reale Belegnummern).
|
||||
3. Randfalltest: Suche mit zu kurzer Belegnummer, keine Treffer, Treffer > BATCH_SIZE, führende Nullen in SEARCH_VALUE.
|
||||
4. Parallelitätstest: gleichzeitige Aufrufe mit unterschiedlichen USR_ID; erwartetes Ergebnis: keine gegenseitige Beeinflussung.
|
||||
5. Performance-Schnelltest: Laufzeitvergleich alt/neu für typische und teure Suchfälle (LIKE mit Wildcards).
|
||||
|
||||
**Decisions**
|
||||
- Muss auch bei offener äußerer User-Transaktion laufen.
|
||||
- Darf weiterhin aus DD_ECM lesen.
|
||||
- Neue Prozedur wird in DD_ECM_REF gespeichert und ausgeführt.
|
||||
- Zur Behebung von Msg 41317 werden MOT-Schreib-/Lesezugriffe in der neuen Prozedur vollständig vermieden.
|
||||
|
||||
**Further Considerations**
|
||||
1. Kompatibilitätsentscheidung: Soll die alte MOTB_MON_TREEVIEW_RESULTS als Persistenzziel künftig entfallen, oder braucht ihr zusätzlich eine optionale Nachschreib-Prozedur außerhalb der offenen Transaktion?
|
||||
2. Abhängigkeitsentscheidung: Falls PER_MESSAGEID zwingend benötigt wird und MOT-Zugriffe enthält, sollte eine zweite, temp-table-basierte Variante mit gleicher Fachlogik erstellt werden.
|
||||
3. Betriebsentscheidung: Für den Produktivschnitt kann ein Feature-Flag sinnvoll sein, um schrittweise von alt auf neu umzuschalten.
|
||||
Reference in New Issue
Block a user