8
0

Serverumzug

This commit is contained in:
2026-04-13 12:08:30 +02:00
parent 3096e432aa
commit 82609f5fc1
48 changed files with 5489 additions and 618 deletions

View File

@@ -120,4 +120,4 @@ LogFileKeepTime = 30
#InstallServiceProfile = Digital Data JobRunner ; D:\ProgramFiles\Digital Data\DDJobRunner\SERVICE\DigitalData.Services.JobRunner.exe ; ; Manual ; InstallOnly ; Executes defined and configured jobs to synchronize master and transaction data.
#InstallServiceProfile = Digital Data Email-Service ; D:\ProgramFiles\Digital Data\DDEmailService\SERVICE\DDEmailService.exe ; ; Manual ; InstallOnly ; Sends emails from the Digital Data email pool.
#InstallServiceProfile = Digital Data WM-ResultHandler ; D:\ProgramFiles\Digital Data\DDResultHandler\SERVICE\DDWDResultHandler.exe ; ; Manual ; InstallOnly ; Executes windream searches and processes the results according to profile specifications.
#InstallServiceProfile = Digital Data EDMI-Service ; ; ; Manual ; InstallOnly ; Proxy Service for Digital Data Applications.
#InstallServiceProfile = Digital Data EDMI-Service ; D:\ProgramFiles\Digital Data\DDEDMI\SERVICE\EDMIService.exe ; ; Manual ; InstallOnly ; Proxy Service for Digital Data Applications.

View File

@@ -0,0 +1,30 @@
# Remove-AzureArcSetup
# ----------------------------------------------------------------------------
# This Script uninstalles the Azure Arc Setup (the installed Agent!),
# if it´s installed in Windows Server 2025.
#
# Returns: -
# ----------------------------------------------------------------------------
# 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
# ----------------------------------------------------------------------------
# Creation Date / Author: 09.04.2026 / MK
# Version Date / Editor: 09.04.2026 / MK
# Version Number: 1.0.0.0
#-----------------------------------------------------------------------------------------------------#
############################################# main part ###############################################
#-----------------------------------------------------------------------------------------------------#
$AzureArcSetup = Get-WindowsCapability -Online -Name "AzureArcSetup~~~~"
if ($AzureArcSetup.State -eq "Installed") {
Remove-WindowsCapability -Online -Name "AzureArcSetup~~~~"
}
#-----------------------------------------------------------------------------------------------------#
########################################### finishing part ############################################
#-----------------------------------------------------------------------------------------------------#
Remove-Variable -Name AzureArcSetup -Force -ErrorAction SilentlyContinue

View File

@@ -0,0 +1,87 @@
-------------------------------------------------------------------------------
Version 2.2.0.1 - 21.10.2024
NEW: -
FIX: - Fixed issues with data Seperator
CHG: -
REM: -
-------------------------------------------------------------------------------
Version 2.2.0.0 - 14.10.2024
NEW: - Multiple Replace cmds in PreparingFile
FIX: - Fixed XLSX and CSV import issues
CHG: -
REM: -
-------------------------------------------------------------------------------
Version 2.1.0.0 - 11.10.2024
NEW: - Parameter call (-pProfileID)
FIX: - Fixed CSV import issue, if inverted commas in data - other case
CHG: - " will be removed bevor inserting data, Code improvement
REM: -
-------------------------------------------------------------------------------
Version 2.0.1.0 - 10.06.2024
NEW: -
FIX: - Fixed CSV import issue, if inverted commas in data
CHG: -
REM: -
-------------------------------------------------------------------------------
Version 2.0.0.2 - 07.05.2024
NEW: -
FIX: -
CHG: - For ExcelImport Value Seperator removed
REM: -
-------------------------------------------------------------------------------
Version 2.0.0.1 - 20.03.2024
NEW: -
FIX: -
CHG: - Code improvement, clean up variables
REM: -
-------------------------------------------------------------------------------
Version 2.0.0.0 - 18.03.2024
NEW: -
FIX: -
CHG: - New working Version with Hash tables instead of arrays
REM: -
-------------------------------------------------------------------------------
Version 1.2.0.0 - 06.12.2023
NEW: - Excel Import Methode implemented
FIX: -
CHG: - Rename - old: Import-FileContent2Database, new: Import-FileContentToDB
REM: -
-------------------------------------------------------------------------------
Version 1.1.0.0 - 18.04.2019
NEW: -
FIX: -
CHG: - Rename - old: Import-CSV2DB, new: Import-FileContent2Database
REM: -
-------------------------------------------------------------------------------
Version 1.0.0.0 - 15.10.2018
NEW: -
FIX: -
CHG: -
REM: -
-------------------------------------legend------------------------------------
NEW: = Added a new functionality
FIX: = Fixed a Issue with existing functionality
CHG: = Changed a existing functionality
REM: = Removed a functionality
-------------------------------------------------------------------------------

Binary file not shown.

View File

@@ -0,0 +1,127 @@
Version 1.5.0.0 - 21.02.2024
NEW: - Es können nun Netzlaufwerke per "MountProfile" eingebunden werden
FIX: -
CHG: - Der aktuelle Module Loader wurde implementiert
REM: -
-----------------------------------------------------------
Version 1.3.3.0 - 12.12.2023
NEW: - Man kann nun den Parameter %not% als negatives Suchkriterium verwenden
FIX: -
CHG: -
REM: -
-----------------------------------------------------------
Version 1.3.2.0 - 08.07.2021
NEW: -
FIX: - Fehler beim L<>schen von Logs behoben.
CHG: -
REM: -
-----------------------------------------------------------
Version 1.3.1.0 - 30.04.2021
NEW: -
FIX: - Fehler in File Collector Funktion behoben.
- Fehler in Zielpfadbestimmung behoben, wenn Datei Attribute ausgelesen wurden.
CHG: - File Collector listet nun vorab nicht mehr alle Dateien auf (machte das Skript zu langsam und die Logs zu gro<72>).
REM: -
-----------------------------------------------------------
Version 1.3.0.0 - 22.04.2021
NEW: - Neuer Parameter f<>r Profile, es muss nun bestimmt werden, ob auch Unterverzeichnisse durchsucht werden (ReclusiveSwitch).
- Neuer Parameter f<>r Profile, es muss nun bestimmt werden, wie eine Datei vor der Verarbeitung gepr<70>ft wird (filechecktyp).
FIX: -
CHG: -
REM: -
-----------------------------------------------------------
Version 1.2.0.0 - 20.04.2021
NEW: - Diverse Datumsplatzhalter f<>r den Zielpfad eingef<65>gt (z.b.: %CreationTimeYear%, ...)
FIX: -
CHG: -
REM: -
-----------------------------------------------------------
Version 1.1.4.0 - 15.03.2019
NEW: -
FIX: - Schleifen Fehler bei %ProcessOnlyLastProfileFiles behoben
CHG: -
REM: -
-----------------------------------------------------------
Version 1.1.3.0 - 13.03.2019
NEW: -
FIX: -
CHG: - Log Dateien entschlackt
REM: -
-----------------------------------------------------------
Version 1.1.2.0 - 28.02.2019
NEW: - %date% Variable hinzugef<65>gt
FIX: -
CHG: -
REM: -
-----------------------------------------------------------
Version 1.1.1.0 - 24.02.2017
NEW: -
FIX: - Fehler in Schleifenz<6E>hler korrigiert.
CHG: -
REM: -
-----------------------------------------------------------
Version 1.1.0.1 - 01.08.2016
NEW: -
FIX: - Variablen Bereinigung vervollst<73>ndigt.
CHG: -
REM: -
-----------------------------------------------------------
Version 1.1.0.0 - 29.07.2016
NEW: - Neue optionale Parameter verf<72>gbar: %RegExGroup and %Replace.
FIX: -
CHG: - Optionale Parameter folgen nun keiner spezifischen Reihenfolge mehr.
REM: -
-----------------------------------------------------------
Version 1.0.1.2 - 07.02.2016
NEW: - Aufrufparameter nun verf<72>gbar.
FIX: -
CHG: -
REM: -
-----------------------------------------------------------
Version 1.0.1.0 - 30.09.2015
NEW: - Funktion "Func-File-check-state" nun eingebaut.
FIX: -
CHG: - Umbennung von "Simply_copy_or_move_Files" zu "MoveOrCopyFiles".
REM: -
-----------------------------------------------------------
Version 1.0.0.0 - 08.12.2014 - Erste funktionierende Version!
NEW: -
FIX: -
CHG: -
REM: -
--------------------------Legende--------------------------
NEW: = Hinzuf<75>gen einer neuen Funktion
FIX: = Korrektur einer vorhandenen Funktion
CHG: = <20>nderung oder Erweiterung einer vorhandenen Funktion
REM: = Entfernen einer Funktion
-----------------------------------------------------------

View File

@@ -0,0 +1,45 @@
@ECHO OFF
TITLE DIGITAL DATA - Run all files in directory with current permissions
ECHO -
ECHO Batch Script
ECHO Run all files in directory with current permissions
ECHO -
ECHO Digital Data
ECHO Ludwig-Rinn-Strasse 16
ECHO 35452 Heuchelheim
ECHO Tel.: 0641 / 202360
ECHO E-Mail: info@didalog.de
ECHO -
ECHO Version 1.0.0.0
ECHO Date: 13.08.2015
ECHO -
ECHO Program Startup %date% at %time:~0,8% oclock, on %computername%.
REM --------------------------------------------------------------
REM ------------------------set variables-------------------------
REM --------------------------------------------------------------
setlocal enableextensions
SET DIRECTORY="%cd%"
SET FILEEXTENSION=*.ps1
SET COUNT=0
REM --------------------------------------------------------------
REM ---------------------Program 1 / Script 1---------------------
REM --------------------------------------------------------------
FOR /F "tokens=*" %%f in ('dir /S /b %FILEEXTENSION%') do (ECHO %%f && set /a count+=1)
ECHO -
ECHO Found %count% File(s) with File Extension %FILEEXTENSION% in Directory:
ECHO %DIRECTORY%.
ECHO -
ECHO Running this/them now, with your permissions!
FOR /F "tokens=*" %%f in ('dir /S /b %FILEEXTENSION%') do (PowerShell.exe -Command "& {Start-Process PowerShell.exe -WindowStyle hidden '-ExecutionPolicy Bypass -File "%%f"'}")
ECHO -
ECHO This Window will close in:
#timeout /T 10
endlocal
exit

View File

@@ -0,0 +1,24 @@
-------------------------------------------------------------------------------
Version 1.1.0.0 - 18.04.2019
NEW: -
FIX: -
CHG: -
REM: -
-------------------------------------------------------------------------------
Version 1.0.0.0 - 07.03.2016
NEW: -
FIX: -
CHG: -
REM: -
-------------------------------------legend------------------------------------
NEW: = Added a new functionality
FIX: = Fixed a Issue with existing functionality
CHG: = Changed a existing functionality
REM: = Removed a functionality
-------------------------------------------------------------------------------

View File

@@ -0,0 +1,245 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [PRREC_DELETE_OBJECT]
-- =================================================================
-- Deletes one or more data in a given Entity
--
-- Returns: INT Value - 0 = Everything worked well
-- =================================================================
-- Copyright (c) 2025 by Digital Data GmbH
--
-- Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim
-- Tel.: 0641/202360 • E-Mail: info-flow@digitaldata.works
-- =================================================================
-- Creation Date / Author: 22.12.2025 / MK
-- Version Date / Editor: 22.12.2025 / MK
-- Version Number: 1.0.0.0
-- =================================================================
-- History:
-- 22.12.2025 / MK - First Version
CREATE OR ALTER PROCEDURE [dbo].[PRREC_DELETE_OBJECT] (
@pENTITY NVARCHAR(25) = 'RESULT', -- Target entity: ACTION, ENDPOINT, ENDPOINT_AUTH, ENDPOINT_PARAMS, PROFILE, RESULT
@pSTART NVARCHAR(25) = '0', -- Start GUID/ID (inclusive), numeric text
@pEND NVARCHAR(25) = '0', -- End GUID/ID (inclusive), numeric text
@pFORCE BIT = 0 -- 1 = delete even if dependent data exists
)
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
-- declare new vars because of parameter sniffing
DECLARE @ENTITY NVARCHAR(25) = UPPER(LTRIM(RTRIM(ISNULL(@pENTITY, 'RESULT')))),
@START_VAL NVARCHAR(25) = LTRIM(RTRIM(ISNULL(@pSTART, '0'))),
@END_VAL NVARCHAR(25) = LTRIM(RTRIM(ISNULL(@pEND, '0'))),
@FORCE BIT = ISNULL(@pFORCE, 0);
-- declare runtime vars
DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID);
DECLARE @START_ID BIGINT = TRY_CAST(@START_VAL AS BIGINT),
@END_ID BIGINT = TRY_CAST(@END_VAL AS BIGINT),
@END_ID_TMP BIGINT = 0,
@RETURN_STATUS INT = 0,
@RETURN_STATUS_TEXT NVARCHAR(MAX) = 'START PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(VARCHAR(50), GETDATE(), 120);
----------------------------------------------------------------------------------------------------------------------------
--=================================================-- Output parameters --================================================--
PRINT '====================================================================================================';
PRINT @RETURN_STATUS_TEXT;
PRINT '';
PRINT 'PARAMETER01 - @ENTITY: ' + ISNULL(CONVERT(NVARCHAR(25), @ENTITY), 'NULL');
PRINT 'PARAMETER02 - @START: ' + ISNULL(CONVERT(NVARCHAR(25), @START_VAL), 'NULL');
PRINT 'PARAMETER03 - @END: ' + ISNULL(CONVERT(NVARCHAR(25), @END_VAL), 'NULL');
PRINT 'PARAMETER04 - @FORCE: ' + ISNULL(CONVERT(NVARCHAR(1), @FORCE), 'NULL');
PRINT '';
-----------------------------------------------------------------------------------------------------------------------------
--================================================-- Validation --=======================================================--
IF (@ENTITY NOT IN ('ACTION', 'ENDPOINT', 'ENDPOINT_AUTH', 'ENDPOINT_PARAMS', 'PROFILE', 'RESULT')) BEGIN
SET @RETURN_STATUS = 50301;
SET @RETURN_STATUS_TEXT = 'ERROR: Unknown entity "' + @ENTITY + '". Allowed: ACTION, ENDPOINT, ENDPOINT_AUTH, ENDPOINT_PARAMS, PROFILE, RESULT.';
RAISERROR(@RETURN_STATUS_TEXT,16,1);
RETURN @RETURN_STATUS;
END;
IF (@START_ID IS NULL OR @END_ID IS NULL) BEGIN
SET @RETURN_STATUS = 50302;
SET @RETURN_STATUS_TEXT = 'ERROR: @START and @END must be convertible to BIGINT.';
RAISERROR(@RETURN_STATUS_TEXT,16,1);
RETURN @RETURN_STATUS;
END;
-- normalize range
IF (@END_ID = 0) BEGIN
SET @END_ID = @START_ID;
END;
IF (@START_ID = 0) BEGIN
SET @START_ID = @END_ID;
END;
IF (@START_ID > @END_ID) BEGIN
SET @END_ID_TMP = @START_ID;
SET @START_ID = @END_ID;
SET @END_ID = @END_ID_TMP;
END;
PRINT 'INFO: Normalized deletion range from ' + CONVERT(NVARCHAR(25), @START_ID) + ' to ' + CONVERT(NVARCHAR(25), @END_ID);
-----------------------------------------------------------------------------------------------------------------------------
--===============================================-- Main Processing --===================================================--
BEGIN TRY
BEGIN TRANSACTION;
-- Delete selected entities respecting dependencies
IF (@ENTITY = 'ACTION' AND @RETURN_STATUS = 0) BEGIN
PRINT 'INFO: Deleting ACTION records...';
IF (@FORCE = 0 AND EXISTS (SELECT 1 FROM [dbo].[TBREC_OUT_RESULT] WHERE [ACTION_ID] BETWEEN @START_ID AND @END_ID)) BEGIN
SET @RETURN_STATUS = 50303;
SET @RETURN_STATUS_TEXT = 'ERROR: Dependent results exist for ACTION. Set @pFORCE=1 to delete anyway.';
RAISERROR(@RETURN_STATUS_TEXT,16,1);
RETURN @RETURN_STATUS;
END; ELSE BEGIN
DELETE FROM [dbo].[TBREC_OUT_RESULT] WHERE [ACTION_ID] BETWEEN @START_ID AND @END_ID;
DELETE FROM [dbo].[TBREC_CFG_ACTION] WHERE [GUID] BETWEEN @START_ID AND @END_ID;
SET @RETURN_STATUS_TEXT = 'INFO: ACTION and related RESULT records deleted.';
PRINT @RETURN_STATUS_TEXT;
END;
END;
ELSE IF (@ENTITY = 'ENDPOINT' AND @RETURN_STATUS = 0) BEGIN
PRINT 'INFO: Deleting ENDPOINT records...';
IF (@FORCE = 0 AND EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_ACTION] WHERE [ENDPOINT_ID] BETWEEN @START_ID AND @END_ID)) BEGIN
SET @RETURN_STATUS = 50304;
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT is used by ACTION. Set @pFORCE=1 to delete anyway.';
RAISERROR(@RETURN_STATUS_TEXT,16,1);
RETURN @RETURN_STATUS;
END; ELSE BEGIN
DECLARE @ActionIdsForEndpoint TABLE (GUID BIGINT PRIMARY KEY);
INSERT INTO @ActionIdsForEndpoint(GUID)
SELECT [GUID] FROM [dbo].[TBREC_CFG_ACTION] WHERE [ENDPOINT_ID] BETWEEN @START_ID AND @END_ID;
DELETE FROM [dbo].[TBREC_OUT_RESULT] WHERE [ACTION_ID] IN (SELECT GUID FROM @ActionIdsForEndpoint);
DELETE FROM [dbo].[TBREC_CFG_ACTION] WHERE [GUID] IN (SELECT GUID FROM @ActionIdsForEndpoint);
DELETE FROM [dbo].[TBREC_CFG_ENDPOINT] WHERE [GUID] BETWEEN @START_ID AND @END_ID;
SET @RETURN_STATUS_TEXT = 'INFO: ENDPOINT, related ACTION and RESULT records deleted.';
PRINT @RETURN_STATUS_TEXT;
END;
END;
ELSE IF (@ENTITY = 'ENDPOINT_AUTH' AND @RETURN_STATUS = 0) BEGIN
PRINT 'INFO: Deleting ENDPOINT_AUTH records...';
IF (@FORCE = 0 AND EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_ACTION] WHERE [ENDPOINT_AUTH_ID] BETWEEN @START_ID AND @END_ID)) BEGIN
SET @RETURN_STATUS = 50305;
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT_AUTH is used by ACTION. Set @pFORCE=1 to delete anyway.';
RAISERROR(@RETURN_STATUS_TEXT,16,1);
RETURN @RETURN_STATUS;
END; ELSE BEGIN
DECLARE @ActionIdsForAuth TABLE (GUID BIGINT PRIMARY KEY);
INSERT INTO @ActionIdsForAuth(GUID)
SELECT [GUID] FROM [dbo].[TBREC_CFG_ACTION] WHERE [ENDPOINT_AUTH_ID] BETWEEN @START_ID AND @END_ID;
DELETE FROM [dbo].[TBREC_OUT_RESULT] WHERE [ACTION_ID] IN (SELECT GUID FROM @ActionIdsForAuth);
DELETE FROM [dbo].[TBREC_CFG_ACTION] WHERE [GUID] IN (SELECT GUID FROM @ActionIdsForAuth);
DELETE FROM [dbo].[TBREC_CFG_ENDPOINT_AUTH] WHERE [GUID] BETWEEN @START_ID AND @END_ID;
SET @RETURN_STATUS_TEXT = 'INFO: ENDPOINT_AUTH, related ACTION and RESULT records deleted.';
PRINT @RETURN_STATUS_TEXT;
END;
END;
ELSE IF (@ENTITY = 'ENDPOINT_PARAMS' AND @RETURN_STATUS = 0) BEGIN
PRINT 'INFO: Deleting ENDPOINT_PARAMS records...';
IF (@FORCE = 0 AND EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_ACTION] WHERE [ENDPOINT_PARAMS_ID] BETWEEN @START_ID AND @END_ID)) BEGIN
SET @RETURN_STATUS = 50306;
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT_PARAMS is used by ACTION. Set @pFORCE=1 to delete anyway.';
RAISERROR(@RETURN_STATUS_TEXT,16,1);
RETURN @RETURN_STATUS;
END; ELSE BEGIN
DECLARE @ActionIdsForParams TABLE (GUID BIGINT PRIMARY KEY);
INSERT INTO @ActionIdsForParams(GUID)
SELECT [GUID] FROM [dbo].[TBREC_CFG_ACTION] WHERE [ENDPOINT_PARAMS_ID] BETWEEN @START_ID AND @END_ID;
DELETE FROM [dbo].[TBREC_OUT_RESULT] WHERE [ACTION_ID] IN (SELECT GUID FROM @ActionIdsForParams);
DELETE FROM [dbo].[TBREC_CFG_ACTION] WHERE [GUID] IN (SELECT GUID FROM @ActionIdsForParams);
DELETE FROM [dbo].[TBREC_CFG_ENDPOINT_PARAMS] WHERE [GUID] BETWEEN @START_ID AND @END_ID;
SET @RETURN_STATUS_TEXT = 'INFO: ENDPOINT_PARAMS, related ACTION and RESULT records deleted.';
PRINT @RETURN_STATUS_TEXT;
END;
END;
ELSE IF (@ENTITY = 'PROFILE' AND @RETURN_STATUS = 0) BEGIN
PRINT 'INFO: Deleting PROFILE records...';
IF (@FORCE = 0 AND EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_ACTION] WHERE [PROFILE_ID] BETWEEN @START_ID AND @END_ID)) BEGIN
SET @RETURN_STATUS = 50307;
SET @RETURN_STATUS_TEXT = 'ERROR: PROFILE is used by ACTION. Set @pFORCE=1 to delete anyway.';
RAISERROR(@RETURN_STATUS_TEXT,16,1);
RETURN @RETURN_STATUS;
END; ELSE BEGIN
DECLARE @ActionIdsForProfile TABLE (GUID BIGINT PRIMARY KEY);
INSERT INTO @ActionIdsForProfile(GUID)
SELECT [GUID] FROM [dbo].[TBREC_CFG_ACTION] WHERE [PROFILE_ID] BETWEEN @START_ID AND @END_ID;
DELETE FROM [dbo].[TBREC_OUT_RESULT] WHERE [ACTION_ID] IN (SELECT GUID FROM @ActionIdsForProfile);
DELETE FROM [dbo].[TBREC_CFG_ACTION] WHERE [GUID] IN (SELECT GUID FROM @ActionIdsForProfile);
DELETE FROM [dbo].[TBREC_RUN_PROFILE] WHERE [PROFILE_ID] BETWEEN @START_ID AND @END_ID;
DELETE FROM [dbo].[TBREC_CFG_PROFILE] WHERE [GUID] BETWEEN @START_ID AND @END_ID;
SET @RETURN_STATUS_TEXT = 'INFO: PROFILE, related ACTION, RESULT and RUN records deleted.';
PRINT @RETURN_STATUS_TEXT;
END;
END;
ELSE IF (@ENTITY = 'RESULT' AND @RETURN_STATUS = 0) BEGIN
PRINT 'INFO: Deleting RESULT records...';
DELETE FROM [dbo].[TBREC_OUT_RESULT] WHERE [GUID] BETWEEN @START_ID AND @END_ID;
SET @RETURN_STATUS_TEXT = 'INFO: RESULT records deleted.';
PRINT @RETURN_STATUS_TEXT;
END;
IF (@RETURN_STATUS > 0) BEGIN
IF (XACT_STATE() <> 0) ROLLBACK TRANSACTION;
END; ELSE BEGIN
COMMIT TRANSACTION;
END;
--======================================================-- Output result --======================================================--
SET @RETURN_STATUS_TEXT = 'END PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(VARCHAR(50), GETDATE(), 120);
PRINT '';
PRINT @RETURN_STATUS_TEXT;
PRINT '====================================================================================================';
-----------------------------------------------------------------------------------------------------------------------------------
RETURN @RETURN_STATUS;
END TRY BEGIN CATCH
IF (XACT_STATE() <> 0) ROLLBACK TRANSACTION;
--======================================================-- Output result --======================================================--
SET @RETURN_STATUS_TEXT = 'ERROR: ' + ERROR_MESSAGE();
RAISERROR(@RETURN_STATUS_TEXT,16,1);
SET @RETURN_STATUS_TEXT = 'END PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(VARCHAR(50), GETDATE(), 120);
PRINT '';
PRINT @RETURN_STATUS_TEXT;
PRINT '====================================================================================================';
-----------------------------------------------------------------------------------------------------------------------------------
RETURN @RETURN_STATUS;
END CATCH;
-----------------------------------------------------------------------------------------------------------------------------
END;
GO

View File

@@ -0,0 +1,460 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [PRREC_INSERT_OBJECT]
-- =================================================================
-- Inserts one record into a given Entity
--
-- Returns: INT Value - 0 = Everything worked well
-- BIGINT - Output parameter @oGUID returns the inserted GUID
-- =================================================================
-- Copyright (c) 2025 by Digital Data GmbH
--
-- Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim
-- Tel.: 0641/202360 • E-Mail: info-flow@digitaldata.works
-- =================================================================
-- Creation Date / Author: 22.12.2025 / MK
-- Version Date / Editor: 22.12.2025 / MK
-- Version Number: 1.0.0.0
-- =================================================================
-- History:
-- 22.12.2025 / MK - First Version
CREATE OR ALTER PROCEDURE [dbo].[PRREC_INSERT_OBJECT] (
@pENTITY NVARCHAR(25) = 'ACTION', -- Target entity: ACTION, ENDPOINT, ENDPOINT_AUTH, ENDPOINT_PARAMS, PROFILE, RESULT
@pADDED_WHO NVARCHAR(50) = NULL, -- User or function of the Insert
@pADDED_WHEN DATETIME = NULL, -- Datetime of the Insert
@pACTION_PROFILE_ID BIGINT = NULL, -- ACTION: Profile GUID (required)
@pACTION_ACTIVE BIT = 1, -- ACTION: Active flag
@pACTION_SEQUENCE TINYINT = 0, -- ACTION: Sequence/order
@pACTION_ENDPOINT_ID BIGINT = NULL, -- ACTION: Endpoint GUID (required)
@pACTION_ENDPOINT_AUTH_ID BIGINT = NULL, -- ACTION: Endpoint auth GUID
@pACTION_ENDPOINT_PARAMS_ID SMALLINT = NULL, -- ACTION: Endpoint params group GUID
@pACTION_SQL_CONNECTION_ID SMALLINT = NULL, -- ACTION: SQL connection GUID
@pACTION_TYPE_ID TINYINT = 1, -- ACTION: HTTP method id (0..9)
@pACTION_PRE_SQL NVARCHAR(MAX) = NULL, -- ACTION: SQL to run before request
@pACTION_HEADER_SQL NVARCHAR(MAX) = NULL, -- ACTION: SQL to build headers
@pACTION_BODY_SQL NVARCHAR(MAX) = NULL, -- ACTION: SQL to build body
@pACTION_POST_SQL NVARCHAR(MAX) = NULL, -- ACTION: SQL to run after request
@pACTION_ERROR_ACTION_ID TINYINT = 0, -- ACTION: Error behavior (0=STOP,1=CONTINUE)
@pENDPOINT_ACTIVE BIT = 1, -- ENDPOINT: Active flag
@pENDPOINT_DESCRIPTION NVARCHAR(250) = NULL, -- ENDPOINT: Description
@pENDPOINT_URI NVARCHAR(2000) = NULL, -- ENDPOINT: Target URI (required)
@pENDPOINT_AUTH_ACTIVE BIT = 1, -- ENDPOINT_AUTH: Active flag
@pENDPOINT_AUTH_DESCRIPTION NVARCHAR(250) = NULL, -- ENDPOINT_AUTH: Description
@pENDPOINT_AUTH_TYPE_ID TINYINT = 0, -- ENDPOINT_AUTH_ID: Auth type id (0..9)
@pENDPOINT_AUTH_API_KEY NVARCHAR(150) = NULL, -- ENDPOINT_AUTH: API key name/header
@pENDPOINT_AUTH_API_VALUE NVARCHAR(150) = NULL, -- ENDPOINT_AUTH: API key value
@pENDPOINT_AUTH_API_KEY_ADD_TO_ID BIT = NULL, -- ENDPOINT_AUTH: API key placement (0=HEADER,1=QUERY)
@pENDPOINT_AUTH_TOKEN NVARCHAR(150) = NULL, -- ENDPOINT_AUTH: Bearer/JWT token
@pENDPOINT_AUTH_USERNAME NVARCHAR(100) = NULL, -- ENDPOINT_AUTH: Username
@pENDPOINT_AUTH_PASSWORD NVARCHAR(100) = NULL, -- ENDPOINT_AUTH: Password
@pENDPOINT_AUTH_DOMAIN NVARCHAR(50) = NULL, -- ENDPOINT_AUTH: Domain (NTLM)
@pENDPOINT_AUTH_WORKSTATION NVARCHAR(50) = NULL, -- ENDPOINT_AUTH: Workstation (NTLM)
@pPROFILE_ACTIVE BIT = 1, -- PROFILE: Active flag
@pPROFILE_TYPE_ID TINYINT = 1, -- PROFILE: Protocol type id (1=HTTP,2=HTTPS)
@pPROFILE_MANDANTOR NVARCHAR(50) = 'DEFAULT', -- PROFILE: Tenant/mandator
@pPROFILE_NAME NVARCHAR(50) = NULL, -- PROFILE: Profile name (required)
@pPROFILE_DESCRIPTION NVARCHAR(250) = NULL, -- PROFILE: Description
@pPROFILE_LOG_LEVEL_ID TINYINT = 4, -- PROFILE: Log level id (0..6)
@pPROFILE_LANGUAGE_ID SMALLINT = 1031, -- PROFILE: Language id (1031/1033)
@pRESULT_ACTION_ID BIGINT = NULL, -- RESULT: Action GUID (required)
@pRESULT_STATUS_ID SMALLINT = NULL, -- RESULT: HTTP status code (required)
@pRESULT_TYPE_ID TINYINT = NULL, -- RESULT: 1 = Pre; 2 = Main; 3 = Post
@pRESULT_HEADER NVARCHAR(MAX) = NULL, -- RESULT: Response header
@pRESULT_BODY NVARCHAR(MAX) = NULL, -- RESULT: Response body
@pRESULT_INFO NVARCHAR(MAX) = NULL, -- RESULT: Optional Response info text
@pRESULT_ERROR NVARCHAR(MAX) = NULL, -- RESULT: Optional Response error text
@pENDPOINT_PARAMS_ACTIVE BIT = 1, -- ENDPOINT_PARAMS: Active flag
@pENDPOINT_PARAMS_DESCRIPTION NVARCHAR(250) = NULL, -- ENDPOINT_PARAMS: Description
@pENDPOINT_PARAMS_GROUP_ID SMALLINT = NULL, -- ENDPOINT_PARAMS: Parameter group id (required)
@pENDPOINT_PARAMS_SEQUENCE TINYINT = NULL, -- ENDPOINT_PARAMS: Sequence/order
@pENDPOINT_PARAMS_KEY NVARCHAR(150) = NULL, -- ENDPOINT_PARAMS: Parameter key/name
@pENDPOINT_PARAMS_VALUE NVARCHAR(150) = NULL, -- ENDPOINT_PARAMS: Parameter value
@oGUID BIGINT = NULL OUTPUT -- Output: inserted GUID
)
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
-- declare new vars because of parameter sniffing
DECLARE @ENTITY NVARCHAR(25) = UPPER(LTRIM(RTRIM(ISNULL(@pENTITY, 'ACTION')))),
@ADDED_WHO NVARCHAR(50) = ISNULL(@pADDED_WHO, OBJECT_NAME(@@PROCID)),
@ADDED_WHEN DATETIME = ISNULL(@pADDED_WHEN,GetDate()),
@ACTION_PROFILE_ID BIGINT = @pACTION_PROFILE_ID,
@ACTION_ACTIVE BIT = @pACTION_ACTIVE,
@ACTION_SEQUENCE TINYINT = @pACTION_SEQUENCE,
@ACTION_ENDPOINT_ID BIGINT = @pACTION_ENDPOINT_ID,
@ACTION_ENDPOINT_AUTH_ID BIGINT = @pACTION_ENDPOINT_AUTH_ID,
@ACTION_ENDPOINT_PARAMS_ID SMALLINT = @pACTION_ENDPOINT_PARAMS_ID,
@ACTION_SQL_CONNECTION_ID SMALLINT = @pACTION_SQL_CONNECTION_ID,
@ACTION_TYPE_ID TINYINT = @pACTION_TYPE_ID,
@ACTION_PRE_SQL NVARCHAR(MAX) = @pACTION_PRE_SQL,
@ACTION_HEADER_SQL NVARCHAR(MAX) = @pACTION_HEADER_SQL,
@ACTION_BODY_SQL NVARCHAR(MAX) = @pACTION_BODY_SQL,
@ACTION_POST_SQL NVARCHAR(MAX) = @pACTION_POST_SQL,
@ACTION_ERROR_ACTION_ID TINYINT = @pACTION_ERROR_ACTION_ID,
@ENDPOINT_ACTIVE BIT = @pENDPOINT_ACTIVE,
@ENDPOINT_DESCRIPTION NVARCHAR(250) = @pENDPOINT_DESCRIPTION,
@ENDPOINT_URI NVARCHAR(2000) = @pENDPOINT_URI,
@ENDPOINT_AUTH_ACTIVE BIT = @pENDPOINT_AUTH_ACTIVE,
@ENDPOINT_AUTH_DESCRIPTION NVARCHAR(250) = @pENDPOINT_AUTH_DESCRIPTION,
@ENDPOINT_AUTH_TYPE_ID TINYINT = @pENDPOINT_AUTH_TYPE_ID,
@ENDPOINT_AUTH_API_KEY NVARCHAR(150) = @pENDPOINT_AUTH_API_KEY,
@ENDPOINT_AUTH_API_VALUE NVARCHAR(150) = @pENDPOINT_AUTH_API_VALUE,
@ENDPOINT_AUTH_API_KEY_ADD_TO_ID BIT = @pENDPOINT_AUTH_API_KEY_ADD_TO_ID,
@ENDPOINT_AUTH_TOKEN NVARCHAR(150) = @pENDPOINT_AUTH_TOKEN,
@ENDPOINT_AUTH_USERNAME NVARCHAR(100) = @pENDPOINT_AUTH_USERNAME,
@ENDPOINT_AUTH_PASSWORD NVARCHAR(100) = @pENDPOINT_AUTH_PASSWORD,
@ENDPOINT_AUTH_DOMAIN NVARCHAR(50) = @pENDPOINT_AUTH_DOMAIN,
@ENDPOINT_AUTH_WORKSTATION NVARCHAR(50) = @pENDPOINT_AUTH_WORKSTATION,
@PROFILE_ACTIVE BIT = @pPROFILE_ACTIVE,
@PROFILE_TYPE_ID TINYINT = @pPROFILE_TYPE_ID,
@PROFILE_MANDANTOR NVARCHAR(50) = @pPROFILE_MANDANTOR,
@PROFILE_NAME NVARCHAR(50) = @pPROFILE_NAME,
@PROFILE_DESCRIPTION NVARCHAR(250) = @pPROFILE_DESCRIPTION,
@PROFILE_LOG_LEVEL_ID TINYINT = @pPROFILE_LOG_LEVEL_ID,
@PROFILE_LANGUAGE_ID SMALLINT = @pPROFILE_LANGUAGE_ID,
@RESULT_ACTION_ID BIGINT = @pRESULT_ACTION_ID,
@RESULT_STATUS_ID SMALLINT = @pRESULT_STATUS_ID,
@RESULT_TYPE_ID TINYINT = @pRESULT_TYPE_ID,
@RESULT_HEADER NVARCHAR(MAX) = @pRESULT_HEADER,
@RESULT_BODY NVARCHAR(MAX) = @pRESULT_BODY,
@RESULT_INFO NVARCHAR(MAX) = @pRESULT_INFO,
@RESULT_ERROR NVARCHAR(MAX) = @pRESULT_ERROR,
@ENDPOINT_PARAMS_ACTIVE BIT = @pENDPOINT_PARAMS_ACTIVE,
@ENDPOINT_PARAMS_DESCRIPTION NVARCHAR(250) = @pENDPOINT_PARAMS_DESCRIPTION,
@ENDPOINT_PARAMS_GROUP_ID SMALLINT = @pENDPOINT_PARAMS_GROUP_ID,
@ENDPOINT_PARAMS_SEQUENCE TINYINT = @pENDPOINT_PARAMS_SEQUENCE,
@ENDPOINT_PARAMS_KEY NVARCHAR(150) = @pENDPOINT_PARAMS_KEY,
@ENDPOINT_PARAMS_VALUE NVARCHAR(150) = @pENDPOINT_PARAMS_VALUE;
-- declare runtime vars
DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID);
DECLARE @RETURN_STATUS INT = 0,
@RETURN_STATUS_TEXT NVARCHAR(MAX) = 'START PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(VARCHAR(50), GETDATE(), 120);
----------------------------------------------------------------------------------------------------------------------------
--=================================================-- Output parameters --================================================--
PRINT '====================================================================================================';
PRINT @RETURN_STATUS_TEXT;
PRINT '';
PRINT 'PARAMETER01 - @ENTITY: ' + ISNULL(CONVERT(NVARCHAR(25), @ENTITY), 'NULL');
PRINT 'PARAMETER02 - @ADDED_WHO: ' + ISNULL(CONVERT(NVARCHAR(50), @ADDED_WHO), 'NULL');
PRINT 'PARAMETER03 - @ADDED_WHEN: ' + ISNULL(CONVERT(NVARCHAR(30), @ADDED_WHEN), 'NULL');
PRINT 'PARAMETER04 - @ACTION_PROFILE_ID: ' + ISNULL(CONVERT(NVARCHAR(30), @ACTION_PROFILE_ID), 'NULL');
PRINT 'PARAMETER05 - @ACTION_ACTIVE: ' + ISNULL(CONVERT(NVARCHAR(1), @ACTION_ACTIVE), 'NULL');
PRINT 'PARAMETER06 - @ACTION_SEQUENCE: ' + ISNULL(CONVERT(NVARCHAR(3), @ACTION_SEQUENCE), 'NULL');
PRINT 'PARAMETER07 - @ACTION_ENDPOINT_ID: ' + ISNULL(CONVERT(NVARCHAR(30), @ACTION_ENDPOINT_ID), 'NULL');
PRINT 'PARAMETER08 - @ACTION_ENDPOINT_AUTH_ID: ' + ISNULL(CONVERT(NVARCHAR(30), @ACTION_ENDPOINT_AUTH_ID), 'NULL');
PRINT 'PARAMETER09 - @ACTION_ENDPOINT_PARAMS_ID: ' + ISNULL(CONVERT(NVARCHAR(30), @ACTION_ENDPOINT_PARAMS_ID), 'NULL');
PRINT 'PARAMETER10 - @ACTION_SQL_CONNECTION_ID: ' + ISNULL(CONVERT(NVARCHAR(30), @ACTION_SQL_CONNECTION_ID), 'NULL');
PRINT 'PARAMETER11 - @ACTION_TYPE_ID: ' + ISNULL(CONVERT(NVARCHAR(5), @ACTION_TYPE_ID), 'NULL');
PRINT 'PARAMETER12 - @ACTION_PRE_SQL: ' + ISNULL(CONVERT(NVARCHAR(100), @ACTION_PRE_SQL), 'NULL');
PRINT 'PARAMETER13 - @ACTION_HEADER_SQL: ' + ISNULL(CONVERT(NVARCHAR(100), @ACTION_HEADER_SQL), 'NULL');
PRINT 'PARAMETER14 - @ACTION_BODY_SQL: ' + ISNULL(CONVERT(NVARCHAR(100), @ACTION_BODY_SQL), 'NULL');
PRINT 'PARAMETER15 - @ACTION_POST_SQL: ' + ISNULL(CONVERT(NVARCHAR(100), @ACTION_POST_SQL), 'NULL');
PRINT 'PARAMETER16 - @ACTION_ERROR_ACTION_ID: ' + ISNULL(CONVERT(NVARCHAR(5), @ACTION_ERROR_ACTION_ID), 'NULL');
PRINT 'PARAMETER17 - @ENDPOINT_ACTIVE: ' + ISNULL(CONVERT(NVARCHAR(1), @ENDPOINT_ACTIVE), 'NULL');
PRINT 'PARAMETER18 - @ENDPOINT_DESCRIPTION: ' + ISNULL(CONVERT(NVARCHAR(250), @ENDPOINT_DESCRIPTION), 'NULL');
PRINT 'PARAMETER19 - @ENDPOINT_URI: ' + ISNULL(CONVERT(NVARCHAR(2000), @ENDPOINT_URI), 'NULL');
PRINT 'PARAMETER20 - @ENDPOINT_AUTH_ACTIVE: ' + ISNULL(CONVERT(NVARCHAR(1), @ENDPOINT_AUTH_ACTIVE), 'NULL');
PRINT 'PARAMETER21 - @ENDPOINT_AUTH_DESCRIPTION: ' + ISNULL(CONVERT(NVARCHAR(250), @ENDPOINT_AUTH_DESCRIPTION), 'NULL');
PRINT 'PARAMETER22 - @ENDPOINT_AUTH_TYPE_ID: ' + ISNULL(CONVERT(NVARCHAR(5), @ENDPOINT_AUTH_TYPE_ID), 'NULL');
PRINT 'PARAMETER23 - @ENDPOINT_AUTH_API_KEY: ' + ISNULL(CONVERT(NVARCHAR(150), @ENDPOINT_AUTH_API_KEY), 'NULL');
PRINT 'PARAMETER24 - @ENDPOINT_AUTH_API_VALUE: ' + ISNULL(CONVERT(NVARCHAR(150), @ENDPOINT_AUTH_API_VALUE), 'NULL');
PRINT 'PARAMETER25 - @ENDPOINT_AUTH_API_KEY_ADD_TO_ID: ' + ISNULL(CONVERT(NVARCHAR(1), @ENDPOINT_AUTH_API_KEY_ADD_TO_ID), 'NULL');
PRINT 'PARAMETER26 - @ENDPOINT_AUTH_TOKEN: ' + ISNULL(CONVERT(NVARCHAR(150), @ENDPOINT_AUTH_TOKEN), 'NULL');
PRINT 'PARAMETER27 - @ENDPOINT_AUTH_USERNAME: ' + ISNULL(CONVERT(NVARCHAR(100), @ENDPOINT_AUTH_USERNAME), 'NULL');
PRINT 'PARAMETER28 - @ENDPOINT_AUTH_PASSWORD: ' + ISNULL(CONVERT(NVARCHAR(100), @ENDPOINT_AUTH_PASSWORD), 'NULL');
PRINT 'PARAMETER29 - @ENDPOINT_AUTH_DOMAIN: ' + ISNULL(CONVERT(NVARCHAR(50), @ENDPOINT_AUTH_DOMAIN), 'NULL');
PRINT 'PARAMETER30 - @ENDPOINT_AUTH_WORKSTATION: ' + ISNULL(CONVERT(NVARCHAR(50), @ENDPOINT_AUTH_WORKSTATION), 'NULL');
PRINT 'PARAMETER31 - @PROFILE_ACTIVE: ' + ISNULL(CONVERT(NVARCHAR(1), @PROFILE_ACTIVE), 'NULL');
PRINT 'PARAMETER32 - @PROFILE_TYPE_ID: ' + ISNULL(CONVERT(NVARCHAR(5), @PROFILE_TYPE_ID), 'NULL');
PRINT 'PARAMETER33 - @PROFILE_MANDANTOR: ' + ISNULL(CONVERT(NVARCHAR(50), @PROFILE_MANDANTOR), 'NULL');
PRINT 'PARAMETER34 - @PROFILE_NAME: ' + ISNULL(CONVERT(NVARCHAR(50), @PROFILE_NAME), 'NULL');
PRINT 'PARAMETER35 - @PROFILE_DESCRIPTION: ' + ISNULL(CONVERT(NVARCHAR(250), @PROFILE_DESCRIPTION), 'NULL');
PRINT 'PARAMETER36 - @PROFILE_LOG_LEVEL_ID: ' + ISNULL(CONVERT(NVARCHAR(5), @PROFILE_LOG_LEVEL_ID), 'NULL');
PRINT 'PARAMETER37 - @PROFILE_LANGUAGE_ID: ' + ISNULL(CONVERT(NVARCHAR(10), @PROFILE_LANGUAGE_ID), 'NULL');
PRINT 'PARAMETER38 - @RESULT_ACTION_ID: ' + ISNULL(CONVERT(NVARCHAR(30), @RESULT_ACTION_ID), 'NULL');
PRINT 'PARAMETER39 - @RESULT_STATUS_ID: ' + ISNULL(CONVERT(NVARCHAR(10), @RESULT_STATUS_ID), 'NULL');
PRINT 'PARAMETER40 - @RESULT_TYPE_ID: ' + ISNULL(CONVERT(NVARCHAR(1), @RESULT_TYPE_ID), 'NULL');
PRINT 'PARAMETER41 - @RESULT_HEADER: ' + ISNULL(CONVERT(NVARCHAR(100), @RESULT_HEADER), 'NULL');
PRINT 'PARAMETER42 - @RESULT_BODY: ' + ISNULL(CONVERT(NVARCHAR(100), @RESULT_BODY), 'NULL');
PRINT 'PARAMETER43 - @RESULT_INFO: ' + ISNULL(CONVERT(NVARCHAR(100), @RESULT_INFO), 'NULL');
PRINT 'PARAMETER44 - @RESULT_ERROR: ' + ISNULL(CONVERT(NVARCHAR(100), @RESULT_ERROR), 'NULL');
PRINT 'PARAMETER45 - @ENDPOINT_PARAMS_ACTIVE: ' + ISNULL(CONVERT(NVARCHAR(1), @ENDPOINT_PARAMS_ACTIVE), 'NULL');
PRINT 'PARAMETER46 - @ENDPOINT_PARAMS_DESCRIPTION: ' + ISNULL(CONVERT(NVARCHAR(250), @ENDPOINT_PARAMS_DESCRIPTION), 'NULL');
PRINT 'PARAMETER47 - @ENDPOINT_PARAMS_GROUP_ID: ' + ISNULL(CONVERT(NVARCHAR(10), @ENDPOINT_PARAMS_GROUP_ID), 'NULL');
PRINT 'PARAMETER48 - @ENDPOINT_PARAMS_SEQUENCE: ' + ISNULL(CONVERT(NVARCHAR(5), @ENDPOINT_PARAMS_SEQUENCE), 'NULL');
PRINT 'PARAMETER49 - @ENDPOINT_PARAMS_KEY: ' + ISNULL(CONVERT(NVARCHAR(150), @ENDPOINT_PARAMS_KEY), 'NULL');
PRINT 'PARAMETER50 - @ENDPOINT_PARAMS_VALUE: ' + ISNULL(CONVERT(NVARCHAR(150), @ENDPOINT_PARAMS_VALUE), 'NULL');
PRINT 'PARAMETER51 - @oGUID (OUT): ' + ISNULL(CONVERT(NVARCHAR(30), @oGUID), 'NULL');
PRINT '';
-----------------------------------------------------------------------------------------------------------------------------
--================================================-- Validation --=======================================================--
IF (@ENTITY NOT IN ('ACTION', 'ENDPOINT', 'ENDPOINT_AUTH', 'ENDPOINT_PARAMS', 'PROFILE', 'RESULT')) BEGIN
SET @RETURN_STATUS = 50101;
SET @RETURN_STATUS_TEXT = 'ERROR: Unknown entity "' + @ENTITY + '". Allowed: ACTION, ENDPOINT, ENDPOINT_AUTH, ENDPOINT_PARAMS, PROFILE, RESULT.';
RAISERROR(@RETURN_STATUS_TEXT,16,1);
RETURN @RETURN_STATUS;
END;
-----------------------------------------------------------------------------------------------------------------------------
--===============================================-- Main Processing --===================================================--
BEGIN TRY
BEGIN TRANSACTION;
IF (@ENTITY = 'ACTION') BEGIN
IF (@ACTION_PROFILE_ID IS NULL OR @ACTION_ENDPOINT_ID IS NULL) BEGIN
SET @RETURN_STATUS = 50102;
SET @RETURN_STATUS_TEXT = 'ERROR: ACTION requires @pACTION_PROFILE_ID and @pACTION_ENDPOINT_ID.';
END; ELSE BEGIN
INSERT INTO [dbo].[TBREC_CFG_ACTION] (
[PROFILE_ID],
[ACTIVE],
[SEQUENCE],
[ENDPOINT_ID],
[ENDPOINT_AUTH_ID],
[ENDPOINT_PARAMS_ID],
[SQL_CONNECTION_ID],
[TYPE_ID],
[PREPROCESSING_QUERY],
[HEADER_QUERY],
[BODY_QUERY],
[POSTPROCESSING_QUERY],
[ERROR_ACTION_ID],
[ADDED_WHO],
[ADDED_WHEN]
) VALUES (
@ACTION_PROFILE_ID,
ISNULL(@ACTION_ACTIVE,1),
ISNULL(@ACTION_SEQUENCE,0),
@ACTION_ENDPOINT_ID,
@ACTION_ENDPOINT_AUTH_ID,
@ACTION_ENDPOINT_PARAMS_ID,
@ACTION_SQL_CONNECTION_ID,
ISNULL(@ACTION_TYPE_ID,1),
@ACTION_PRE_SQL,
@ACTION_HEADER_SQL,
@ACTION_BODY_SQL,
@ACTION_POST_SQL,
ISNULL(@ACTION_ERROR_ACTION_ID,0),
@ADDED_WHO,
@ADDED_WHEN
);
SET @oGUID = SCOPE_IDENTITY();
SET @RETURN_STATUS_TEXT = 'INFO: Inserted ACTION with GUID=' + CONVERT(NVARCHAR(30), @oGUID);
PRINT @RETURN_STATUS_TEXT;
END;
END; ELSE IF (@ENTITY = 'ENDPOINT') BEGIN
IF (@ENDPOINT_URI IS NULL) BEGIN
SET @RETURN_STATUS = 50103;
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT requires @pENDPOINT_URI.';
END; ELSE BEGIN
INSERT INTO [dbo].[TBREC_CFG_ENDPOINT] (
[ACTIVE],
[DESCRIPTION],
[URI],
[ADDED_WHO],
[ADDED_WHEN]
) VALUES (
ISNULL(@ENDPOINT_ACTIVE,1),
@ENDPOINT_DESCRIPTION,
@ENDPOINT_URI,
@ADDED_WHO,
@ADDED_WHEN
);
SET @oGUID = SCOPE_IDENTITY();
SET @RETURN_STATUS_TEXT = 'INFO: Inserted ENDPOINT with GUID=' + CONVERT(NVARCHAR(30), @oGUID);
PRINT @RETURN_STATUS_TEXT;
END;
END; ELSE IF (@ENTITY = 'ENDPOINT_AUTH') BEGIN
INSERT INTO [dbo].[TBREC_CFG_ENDPOINT_AUTH] (
[ACTIVE],
[DESCRIPTION],
[TYPE_ID],
[API_KEY],
[API_VALUE],
[API_KEY_ADD_TO_ID],
[TOKEN],
[USERNAME],
[PASSWORD],
[DOMAIN],
[WORKSTATION],
[ADDED_WHO],
[ADDED_WHEN]
) VALUES (
ISNULL(@ENDPOINT_AUTH_ACTIVE,1),
@ENDPOINT_AUTH_DESCRIPTION,
ISNULL(@ENDPOINT_AUTH_TYPE_ID,0),
@ENDPOINT_AUTH_API_KEY,
@ENDPOINT_AUTH_API_VALUE,
@ENDPOINT_AUTH_API_KEY_ADD_TO_ID,
@ENDPOINT_AUTH_TOKEN,
@ENDPOINT_AUTH_USERNAME,
@ENDPOINT_AUTH_PASSWORD,
@ENDPOINT_AUTH_DOMAIN,
@ENDPOINT_AUTH_WORKSTATION,
@ADDED_WHO,
@ADDED_WHEN
);
SET @oGUID = SCOPE_IDENTITY();
SET @RETURN_STATUS_TEXT = 'INFO: Inserted ENDPOINT_AUTH with GUID=' + CONVERT(NVARCHAR(30), @oGUID);
PRINT @RETURN_STATUS_TEXT;
END; ELSE IF (@ENTITY = 'PROFILE') BEGIN
IF (@PROFILE_NAME IS NULL) BEGIN
SET @RETURN_STATUS = 50104;
SET @RETURN_STATUS_TEXT = 'ERROR: PROFILE requires @pPROFILE_NAME.';
END; ELSE BEGIN
INSERT INTO [dbo].[TBREC_CFG_PROFILE] (
[ACTIVE],
[TYPE_ID],
[MANDANTOR],
[PROFILE_NAME],
[DESCRIPTION],
[LOG_LEVEL_ID],
[LANGUAGE_ID],
[ADDED_WHO],
[ADDED_WHEN]
) VALUES (
ISNULL(@PROFILE_ACTIVE,1),
ISNULL(@PROFILE_TYPE_ID,1),
ISNULL(@PROFILE_MANDANTOR,'DEFAULT'),
@PROFILE_NAME,
@PROFILE_DESCRIPTION,
ISNULL(@PROFILE_LOG_LEVEL_ID,4),
ISNULL(@PROFILE_LANGUAGE_ID,1031),
@ADDED_WHO,
@ADDED_WHEN
);
SET @oGUID = SCOPE_IDENTITY();
IF NOT EXISTS (SELECT 1 FROM [dbo].[TBREC_RUN_PROFILE] WHERE [PROFILE_ID] = @oGUID) BEGIN
INSERT INTO [dbo].[TBREC_RUN_PROFILE] ([PROFILE_ID])
VALUES (@oGUID);
END;
SET @RETURN_STATUS_TEXT = 'INFO: Inserted PROFILE with GUID=' + CONVERT(NVARCHAR(30), @oGUID);
PRINT @RETURN_STATUS_TEXT;
END;
END; ELSE IF (@ENTITY = 'RESULT') BEGIN
IF (@RESULT_ACTION_ID IS NULL OR @RESULT_STATUS_ID IS NULL OR @RESULT_TYPE_ID IS NULL) BEGIN
SET @RETURN_STATUS = 50105;
SET @RETURN_STATUS_TEXT = 'ERROR: RESULT requires @pRESULT_ACTION_ID, @pRESULT_STATUS_ID and @pRESULT_TYPE_ID.';
END; ELSE BEGIN
INSERT INTO [dbo].[TBREC_OUT_RESULT] (
[ACTION_ID],
[STATUS_ID],
[RESULT_TYPE_ID],
[RESULT_HEADER],
[RESULT_BODY],
[RESULT_INFO],
[RESULT_ERROR],
[ADDED_WHO],
[ADDED_WHEN]
) VALUES (
@RESULT_ACTION_ID,
@RESULT_STATUS_ID,
@RESULT_TYPE_ID,
@RESULT_HEADER,
@RESULT_BODY,
@RESULT_INFO,
@RESULT_ERROR,
@ADDED_WHO,
@ADDED_WHEN
);
SET @oGUID = SCOPE_IDENTITY();
SET @RETURN_STATUS_TEXT = 'INFO: Inserted RESULT with GUID=' + CONVERT(NVARCHAR(30), @oGUID);
PRINT @RETURN_STATUS_TEXT;
END;
END; ELSE IF (@ENTITY = 'ENDPOINT_PARAMS') BEGIN
IF (@ENDPOINT_PARAMS_GROUP_ID IS NULL) BEGIN
SET @RETURN_STATUS = 50106;
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT_PARAMS requires @pENDPOINT_PARAMS_GROUP_ID.';
END; ELSE BEGIN
INSERT INTO [dbo].[TBREC_CFG_ENDPOINT_PARAMS] (
[ACTIVE],
[DESCRIPTION],
[GROUP_ID],
[SEQUENCE],
[KEY],
[VALUE],
[ADDED_WHO],
[ADDED_WHEN]
) VALUES (
ISNULL(@ENDPOINT_PARAMS_ACTIVE,1),
@ENDPOINT_PARAMS_DESCRIPTION,
@ENDPOINT_PARAMS_GROUP_ID,
@ENDPOINT_PARAMS_SEQUENCE,
@ENDPOINT_PARAMS_KEY,
@ENDPOINT_PARAMS_VALUE,
@ADDED_WHO,
@ADDED_WHEN
);
SET @oGUID = SCOPE_IDENTITY();
SET @RETURN_STATUS_TEXT = 'INFO: Inserted ENDPOINT_PARAMS with GUID=' + CONVERT(NVARCHAR(30), @oGUID);
PRINT @RETURN_STATUS_TEXT;
END;
END;
IF (@RETURN_STATUS > 0) BEGIN
IF (XACT_STATE() <> 0) ROLLBACK TRANSACTION;
END; ELSE BEGIN
COMMIT TRANSACTION;
END;
--======================================================-- Output result --======================================================--
SET @RETURN_STATUS_TEXT = 'END PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(VARCHAR(50), GETDATE(), 120);
PRINT '';
PRINT @RETURN_STATUS_TEXT;
PRINT '====================================================================================================';
-----------------------------------------------------------------------------------------------------------------------------------
RETURN @RETURN_STATUS;
END TRY BEGIN CATCH
IF (XACT_STATE() <> 0) ROLLBACK TRANSACTION;
--======================================================-- Output result --======================================================--
SET @RETURN_STATUS_TEXT = 'ERROR: ' + ERROR_MESSAGE();
RAISERROR(@RETURN_STATUS_TEXT,16,1);
SET @RETURN_STATUS_TEXT = 'END PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(VARCHAR(50), GETDATE(), 120);
PRINT '';
PRINT @RETURN_STATUS_TEXT;
PRINT '====================================================================================================';
-----------------------------------------------------------------------------------------------------------------------------------
RETURN @RETURN_STATUS;
END CATCH;
-----------------------------------------------------------------------------------------------------------------------------
END;

View File

@@ -0,0 +1,453 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [PRREC_UPDATE_OBJECT]
-- =================================================================
-- Updates one record in a given Entity with validation of allowed values
-- Setting a parameter with NULL = keeps the current value
--
-- Returns: INT Value - 0 = Everything worked well
-- =================================================================
-- Copyright (c) 2025 by Digital Data GmbH
--
-- Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim
-- Tel.: 0641/202360 • E-Mail: info-flow@digitaldata.works
-- =================================================================
-- Creation Date / Author: 22.12.2025 / MK
-- Version Date / Editor: 22.12.2025 / MK
-- Version Number: 1.0.0.0
-- =================================================================
-- History:
-- 22.12.2025 / MK - First Version
CREATE OR ALTER PROCEDURE [dbo].[PRREC_UPDATE_OBJECT] (
@pENTITY NVARCHAR(25) = 'ACTION', -- Target entity: ACTION, ENDPOINT, ENDPOINT_AUTH, ENDPOINT_PARAMS, PROFILE, RESULT
@pGUID BIGINT = NULL, -- Target GUID to update (required)
@pCHANGED_WHO NVARCHAR(50) = NULL, -- User or function of the Update
@pCHANGED_WHEN DATETIME = NULL, -- Datetime of the Update
@pACTION_PROFILE_ID BIGINT = NULL, -- ACTION: New profile GUID
@pACTION_ACTIVE BIT = NULL, -- ACTION: New active flag
@pACTION_SEQUENCE TINYINT = NULL, -- ACTION: New sequence/order
@pACTION_ENDPOINT_ID BIGINT = NULL, -- ACTION: New endpoint GUID
@pACTION_ENDPOINT_AUTH_ID BIGINT = NULL, -- ACTION: New endpoint auth GUID
@pACTION_ENDPOINT_PARAMS_ID SMALLINT = NULL, -- ACTION: New endpoint params group GUID
@pACTION_SQL_CONNECTION_ID SMALLINT = NULL, -- ACTION: New SQL connection GUID
@pACTION_TYPE_ID TINYINT = NULL, -- ACTION: New HTTP method id (0..9)
@pACTION_PRE_SQL NVARCHAR(MAX) = NULL, -- ACTION: New SQL before request
@pACTION_HEADER_SQL NVARCHAR(MAX) = NULL, -- ACTION: New SQL for headers
@pACTION_BODY_SQL NVARCHAR(MAX) = NULL, -- ACTION: New SQL for body
@pACTION_POST_SQL NVARCHAR(MAX) = NULL, -- ACTION: New SQL after request
@pACTION_ERROR_ACTION_ID TINYINT = NULL, -- ACTION: New error behavior (0=STOP,1=CONTINUE)
@pENDPOINT_ACTIVE BIT = NULL, -- ENDPOINT: New active flag
@pENDPOINT_DESCRIPTION NVARCHAR(250) = NULL, -- ENDPOINT: New description
@pENDPOINT_URI NVARCHAR(2000) = NULL, -- ENDPOINT: New target URI
@pENDPOINT_AUTH_ACTIVE BIT = NULL, -- ENDPOINT_AUTH: New active flag
@pENDPOINT_AUTH_DESCRIPTION NVARCHAR(250) = NULL, -- ENDPOINT_AUTH: New description
@pENDPOINT_AUTH_TYPE_ID TINYINT = NULL, -- ENDPOINT_AUTH: New auth type id (0..9)
@pENDPOINT_AUTH_API_KEY NVARCHAR(150) = NULL, -- ENDPOINT_AUTH: New API key name/header
@pENDPOINT_AUTH_API_VALUE NVARCHAR(150) = NULL, -- ENDPOINT_AUTH: New API key value
@pENDPOINT_AUTH_API_KEY_ADD_TO_ID BIT = NULL, -- ENDPOINT_AUTH: New API key placement (0=HEADER,1=QUERY)
@pENDPOINT_AUTH_TOKEN NVARCHAR(150) = NULL, -- ENDPOINT_AUTH: New bearer/JWT token
@pENDPOINT_AUTH_USERNAME NVARCHAR(100) = NULL, -- ENDPOINT_AUTH: New username
@pENDPOINT_AUTH_PASSWORD NVARCHAR(100) = NULL, -- ENDPOINT_AUTH: New password
@pENDPOINT_AUTH_DOMAIN NVARCHAR(50) = NULL, -- ENDPOINT_AUTH: New domain (NTLM)
@pENDPOINT_AUTH_WORKSTATION NVARCHAR(50) = NULL, -- ENDPOINT_AUTH: New workstation (NTLM)
@pENDPOINT_PARAMS_ACTIVE BIT = NULL, -- ENDPOINT_PARAMS: New active flag
@pENDPOINT_PARAMS_DESCRIPTION NVARCHAR(250) = NULL, -- ENDPOINT_PARAMS: New description
@pENDPOINT_PARAMS_GROUP_ID SMALLINT = NULL, -- ENDPOINT_PARAMS: New parameter group id
@pENDPOINT_PARAMS_SEQUENCE TINYINT = NULL, -- ENDPOINT_PARAMS: New sequence/order
@pENDPOINT_PARAMS_KEY NVARCHAR(150) = NULL, -- ENDPOINT_PARAMS: New parameter key/name
@pENDPOINT_PARAMS_VALUE NVARCHAR(150) = NULL, -- ENDPOINT_PARAMS: New parameter value
@pPROFILE_ACTIVE BIT = NULL, -- PROFILE: New active flag
@pPROFILE_TYPE_ID TINYINT = NULL, -- PROFILE: New protocol type id (1=HTTP,2=HTTPS)
@pPROFILE_MANDANTOR NVARCHAR(50) = NULL, -- PROFILE: New tenant/mandator
@pPROFILE_NAME NVARCHAR(50) = NULL, -- PROFILE: New profile name
@pPROFILE_DESCRIPTION NVARCHAR(250) = NULL, -- PROFILE: New description
@pPROFILE_LOG_LEVEL_ID TINYINT = NULL, -- PROFILE: New log level id (0..6)
@pPROFILE_LANGUAGE_ID SMALLINT = NULL, -- PROFILE: New language id (1031/1033)
@pPROFILE_FIRST_RUN DATETIME = NULL, -- PROFILE: New first run timestamp (RUN_PROFILE)
@pPROFILE_LAST_RUN DATETIME = NULL, -- PROFILE: New last run timestamp (RUN_PROFILE)
@pPROFILE_LAST_RESULT NVARCHAR(250) = NULL, -- PROFILE: New last result text (RUN_PROFILE)
@pRESULT_ACTION_ID BIGINT = NULL, -- RESULT: New action GUID
@pRESULT_STATUS_ID SMALLINT = NULL, -- RESULT: New HTTP status code
@pRESULT_TYPE_ID TINYINT = NULL, -- RESULT: 1 = Pre; 2 = Main; 3 = Post
@pRESULT_HEADER NVARCHAR(MAX) = NULL, -- RESULT: New response header
@pRESULT_BODY NVARCHAR(MAX) = NULL, -- RESULT: New response body
@pRESULT_INFO NVARCHAR(MAX) = NULL, -- RESULT: Optional Response info text
@pRESULT_ERROR NVARCHAR(MAX) = NULL -- RESULT: Optional Response error text
)
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
-- declare new vars because of parameter sniffing
DECLARE @ENTITY NVARCHAR(25) = UPPER(LTRIM(RTRIM(ISNULL(@pENTITY, 'ACTION')))),
@GUID BIGINT = @pGUID,
@CHANGED_WHO NVARCHAR(50) = ISNULL(@pCHANGED_WHO, OBJECT_NAME(@@PROCID)),
@CHANGED_WHEN DATETIME = ISNULL(@pCHANGED_WHEN,GetDate()),
@ACTION_PROFILE_ID BIGINT = @pACTION_PROFILE_ID,
@ACTION_ACTIVE BIT = @pACTION_ACTIVE,
@ACTION_SEQUENCE TINYINT = @pACTION_SEQUENCE,
@ACTION_ENDPOINT_ID BIGINT = @pACTION_ENDPOINT_ID,
@ACTION_ENDPOINT_AUTH_ID BIGINT = @pACTION_ENDPOINT_AUTH_ID,
@ACTION_ENDPOINT_PARAMS_ID SMALLINT = @pACTION_ENDPOINT_PARAMS_ID,
@ACTION_SQL_CONNECTION_ID SMALLINT = @pACTION_SQL_CONNECTION_ID,
@ACTION_TYPE_ID TINYINT = @pACTION_TYPE_ID,
@ACTION_PRE_SQL NVARCHAR(MAX) = @pACTION_PRE_SQL,
@ACTION_HEADER_SQL NVARCHAR(MAX) = @pACTION_HEADER_SQL,
@ACTION_BODY_SQL NVARCHAR(MAX) = @pACTION_BODY_SQL,
@ACTION_POST_SQL NVARCHAR(MAX) = @pACTION_POST_SQL,
@ACTION_ERROR_ACTION_ID TINYINT = @pACTION_ERROR_ACTION_ID,
@ENDPOINT_ACTIVE BIT = @pENDPOINT_ACTIVE,
@ENDPOINT_DESCRIPTION NVARCHAR(250) = @pENDPOINT_DESCRIPTION,
@ENDPOINT_URI NVARCHAR(2000) = @pENDPOINT_URI,
@ENDPOINT_AUTH_ACTIVE BIT = @pENDPOINT_AUTH_ACTIVE,
@ENDPOINT_AUTH_DESCRIPTION NVARCHAR(250) = @pENDPOINT_AUTH_DESCRIPTION,
@ENDPOINT_AUTH_TYPE_ID TINYINT = @pENDPOINT_AUTH_TYPE_ID,
@ENDPOINT_AUTH_API_KEY NVARCHAR(150) = @pENDPOINT_AUTH_API_KEY,
@ENDPOINT_AUTH_API_VALUE NVARCHAR(150) = @pENDPOINT_AUTH_API_VALUE,
@ENDPOINT_AUTH_API_KEY_ADD_TO_ID BIT = @pENDPOINT_AUTH_API_KEY_ADD_TO_ID,
@ENDPOINT_AUTH_TOKEN NVARCHAR(150) = @pENDPOINT_AUTH_TOKEN,
@ENDPOINT_AUTH_USERNAME NVARCHAR(100) = @pENDPOINT_AUTH_USERNAME,
@ENDPOINT_AUTH_PASSWORD NVARCHAR(100) = @pENDPOINT_AUTH_PASSWORD,
@ENDPOINT_AUTH_DOMAIN NVARCHAR(50) = @pENDPOINT_AUTH_DOMAIN,
@ENDPOINT_AUTH_WORKSTATION NVARCHAR(50) = @pENDPOINT_AUTH_WORKSTATION,
@ENDPOINT_PARAMS_ACTIVE BIT = @pENDPOINT_PARAMS_ACTIVE,
@ENDPOINT_PARAMS_DESCRIPTION NVARCHAR(250) = @pENDPOINT_PARAMS_DESCRIPTION,
@ENDPOINT_PARAMS_GROUP_ID SMALLINT = @pENDPOINT_PARAMS_GROUP_ID,
@ENDPOINT_PARAMS_SEQUENCE TINYINT = @pENDPOINT_PARAMS_SEQUENCE,
@ENDPOINT_PARAMS_KEY NVARCHAR(150) = @pENDPOINT_PARAMS_KEY,
@ENDPOINT_PARAMS_VALUE NVARCHAR(150) = @pENDPOINT_PARAMS_VALUE,
@PROFILE_ACTIVE BIT = @pPROFILE_ACTIVE,
@PROFILE_TYPE_ID TINYINT = @pPROFILE_TYPE_ID,
@PROFILE_MANDANTOR NVARCHAR(50) = @pPROFILE_MANDANTOR,
@PROFILE_NAME NVARCHAR(50) = @pPROFILE_NAME,
@PROFILE_DESCRIPTION NVARCHAR(250) = @pPROFILE_DESCRIPTION,
@PROFILE_LOG_LEVEL_ID TINYINT = @pPROFILE_LOG_LEVEL_ID,
@PROFILE_LANGUAGE_ID SMALLINT = @pPROFILE_LANGUAGE_ID,
@PROFILE_FIRST_RUN DATETIME = @pPROFILE_FIRST_RUN,
@PROFILE_LAST_RUN DATETIME = @pPROFILE_LAST_RUN,
@PROFILE_LAST_RESULT NVARCHAR(250) = @pPROFILE_LAST_RESULT,
@RESULT_ACTION_ID BIGINT = @pRESULT_ACTION_ID,
@RESULT_STATUS_ID SMALLINT = @pRESULT_STATUS_ID,
@RESULT_TYPE_ID TINYINT = @pRESULT_TYPE_ID,
@RESULT_HEADER NVARCHAR(MAX) = @pRESULT_HEADER,
@RESULT_BODY NVARCHAR(MAX) = @pRESULT_BODY,
@RESULT_INFO NVARCHAR(MAX) = @pRESULT_INFO,
@RESULT_ERROR NVARCHAR(MAX) = @pRESULT_ERROR;
-- declare runtime vars
DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID);
DECLARE @RETURN_STATUS INT = 0,
@RETURN_STATUS_TEXT NVARCHAR(MAX) = 'START PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(VARCHAR(50), GETDATE(), 120);
----------------------------------------------------------------------------------------------------------------------------
--=================================================-- Output parameters --================================================--
PRINT '====================================================================================================';
PRINT @RETURN_STATUS_TEXT;
PRINT '';
PRINT 'PARAMETER01 - @ENTITY: ' + ISNULL(CONVERT(NVARCHAR(25), @ENTITY), 'NULL');
PRINT 'PARAMETER02 - @GUID: ' + ISNULL(CONVERT(NVARCHAR(30), @GUID), 'NULL');
PRINT 'PARAMETER03 - @CHANGED_WHO: ' + ISNULL(CONVERT(NVARCHAR(50), @CHANGED_WHO), 'NULL');
PRINT 'PARAMETER04 - @CHANGED_WHEN: ' + ISNULL(CONVERT(NVARCHAR(50), @CHANGED_WHEN), 'NULL');
PRINT 'PARAMETER05 - @ACTION_PROFILE_ID: ' + ISNULL(CONVERT(NVARCHAR(30), @ACTION_PROFILE_ID), 'NULL');
PRINT 'PARAMETER06 - @ACTION_ACTIVE: ' + ISNULL(CONVERT(NVARCHAR(1), @ACTION_ACTIVE), 'NULL');
PRINT 'PARAMETER07 - @ACTION_SEQUENCE: ' + ISNULL(CONVERT(NVARCHAR(3), @ACTION_SEQUENCE), 'NULL');
PRINT 'PARAMETER08 - @ACTION_ENDPOINT_ID: ' + ISNULL(CONVERT(NVARCHAR(30), @ACTION_ENDPOINT_ID), 'NULL');
PRINT 'PARAMETER09 - @ACTION_ENDPOINT_AUTH_ID: ' + ISNULL(CONVERT(NVARCHAR(30), @ACTION_ENDPOINT_AUTH_ID), 'NULL');
PRINT 'PARAMETER10 - @ACTION_ENDPOINT_PARAMS_ID: ' + ISNULL(CONVERT(NVARCHAR(30), @ACTION_ENDPOINT_PARAMS_ID), 'NULL');
PRINT 'PARAMETER11 - @ACTION_SQL_CONNECTION_ID: ' + ISNULL(CONVERT(NVARCHAR(30), @ACTION_SQL_CONNECTION_ID), 'NULL');
PRINT 'PARAMETER12 - @ACTION_TYPE_ID: ' + ISNULL(CONVERT(NVARCHAR(5), @ACTION_TYPE_ID), 'NULL');
PRINT 'PARAMETER13 - @ACTION_PRE_SQL: ' + ISNULL(CONVERT(NVARCHAR(4000), @ACTION_PRE_SQL), 'NULL');
PRINT 'PARAMETER14 - @ACTION_HEADER_SQL: ' + ISNULL(CONVERT(NVARCHAR(4000), @ACTION_HEADER_SQL), 'NULL');
PRINT 'PARAMETER15 - @ACTION_BODY_SQL: ' + ISNULL(CONVERT(NVARCHAR(4000), @ACTION_BODY_SQL), 'NULL');
PRINT 'PARAMETER16 - @ACTION_POST_SQL: ' + ISNULL(CONVERT(NVARCHAR(4000), @ACTION_POST_SQL), 'NULL');
PRINT 'PARAMETER17 - @ACTION_ERROR_ACTION_ID: ' + ISNULL(CONVERT(NVARCHAR(5), @ACTION_ERROR_ACTION_ID), 'NULL');
PRINT 'PARAMETER18 - @ENDPOINT_ACTIVE: ' + ISNULL(CONVERT(NVARCHAR(1), @ENDPOINT_ACTIVE), 'NULL');
PRINT 'PARAMETER19 - @ENDPOINT_DESCRIPTION: ' + ISNULL(CONVERT(NVARCHAR(250), @ENDPOINT_DESCRIPTION), 'NULL');
PRINT 'PARAMETER20 - @ENDPOINT_URI: ' + ISNULL(CONVERT(NVARCHAR(2000), @ENDPOINT_URI), 'NULL');
PRINT 'PARAMETER21 - @ENDPOINT_AUTH_ACTIVE: ' + ISNULL(CONVERT(NVARCHAR(1), @ENDPOINT_AUTH_ACTIVE), 'NULL');
PRINT 'PARAMETER22 - @ENDPOINT_AUTH_DESCRIPTION: ' + ISNULL(CONVERT(NVARCHAR(250), @ENDPOINT_AUTH_DESCRIPTION), 'NULL');
PRINT 'PARAMETER23 - @ENDPOINT_AUTH_TYPE_ID: ' + ISNULL(CONVERT(NVARCHAR(5), @ENDPOINT_AUTH_TYPE_ID), 'NULL');
PRINT 'PARAMETER24 - @ENDPOINT_AUTH_API_KEY: ' + ISNULL(CONVERT(NVARCHAR(150), @ENDPOINT_AUTH_API_KEY), 'NULL');
PRINT 'PARAMETER25 - @ENDPOINT_AUTH_API_VALUE: ' + ISNULL(CONVERT(NVARCHAR(150), @ENDPOINT_AUTH_API_VALUE), 'NULL');
PRINT 'PARAMETER26 - @ENDPOINT_AUTH_API_KEY_ADD_TO_ID: ' + ISNULL(CONVERT(NVARCHAR(1), @ENDPOINT_AUTH_API_KEY_ADD_TO_ID), 'NULL');
PRINT 'PARAMETER27 - @ENDPOINT_AUTH_TOKEN: ' + ISNULL(CONVERT(NVARCHAR(150), @ENDPOINT_AUTH_TOKEN), 'NULL');
PRINT 'PARAMETER28 - @ENDPOINT_AUTH_USERNAME: ' + ISNULL(CONVERT(NVARCHAR(100), @ENDPOINT_AUTH_USERNAME), 'NULL');
PRINT 'PARAMETER29 - @ENDPOINT_AUTH_PASSWORD: ' + ISNULL(CONVERT(NVARCHAR(100), @ENDPOINT_AUTH_PASSWORD), 'NULL');
PRINT 'PARAMETER30 - @ENDPOINT_AUTH_DOMAIN: ' + ISNULL(CONVERT(NVARCHAR(50), @ENDPOINT_AUTH_DOMAIN), 'NULL');
PRINT 'PARAMETER31 - @ENDPOINT_AUTH_WORKSTATION: ' + ISNULL(CONVERT(NVARCHAR(50), @ENDPOINT_AUTH_WORKSTATION), 'NULL');
PRINT 'PARAMETER32 - @ENDPOINT_PARAMS_ACTIVE: ' + ISNULL(CONVERT(NVARCHAR(1), @ENDPOINT_PARAMS_ACTIVE), 'NULL');
PRINT 'PARAMETER33 - @ENDPOINT_PARAMS_DESCRIPTION: ' + ISNULL(CONVERT(NVARCHAR(250), @ENDPOINT_PARAMS_DESCRIPTION), 'NULL');
PRINT 'PARAMETER34 - @ENDPOINT_PARAMS_GROUP_ID: ' + ISNULL(CONVERT(NVARCHAR(10), @ENDPOINT_PARAMS_GROUP_ID), 'NULL');
PRINT 'PARAMETER35 - @ENDPOINT_PARAMS_SEQUENCE: ' + ISNULL(CONVERT(NVARCHAR(5), @ENDPOINT_PARAMS_SEQUENCE), 'NULL');
PRINT 'PARAMETER36 - @ENDPOINT_PARAMS_KEY: ' + ISNULL(CONVERT(NVARCHAR(150), @ENDPOINT_PARAMS_KEY), 'NULL');
PRINT 'PARAMETER37 - @ENDPOINT_PARAMS_VALUE: ' + ISNULL(CONVERT(NVARCHAR(150), @ENDPOINT_PARAMS_VALUE), 'NULL');
PRINT 'PARAMETER38 - @PROFILE_ACTIVE: ' + ISNULL(CONVERT(NVARCHAR(1), @PROFILE_ACTIVE), 'NULL');
PRINT 'PARAMETER39 - @PROFILE_TYPE_ID: ' + ISNULL(CONVERT(NVARCHAR(5), @PROFILE_TYPE_ID), 'NULL');
PRINT 'PARAMETER40 - @PROFILE_MANDANTOR: ' + ISNULL(CONVERT(NVARCHAR(50), @PROFILE_MANDANTOR), 'NULL');
PRINT 'PARAMETER41 - @PROFILE_NAME: ' + ISNULL(CONVERT(NVARCHAR(50), @PROFILE_NAME), 'NULL');
PRINT 'PARAMETER42 - @PROFILE_DESCRIPTION: ' + ISNULL(CONVERT(NVARCHAR(250), @PROFILE_DESCRIPTION), 'NULL');
PRINT 'PARAMETER43 - @PROFILE_LOG_LEVEL_ID: ' + ISNULL(CONVERT(NVARCHAR(5), @PROFILE_LOG_LEVEL_ID), 'NULL');
PRINT 'PARAMETER44 - @PROFILE_LANGUAGE_ID: ' + ISNULL(CONVERT(NVARCHAR(10), @PROFILE_LANGUAGE_ID), 'NULL');
PRINT 'PARAMETER45 - @PROFILE_FIRST_RUN: ' + ISNULL(CONVERT(NVARCHAR(50), @PROFILE_FIRST_RUN), 'NULL');
PRINT 'PARAMETER46 - @PROFILE_LAST_RUN: ' + ISNULL(CONVERT(NVARCHAR(50), @PROFILE_LAST_RUN), 'NULL');
PRINT 'PARAMETER47 - @PROFILE_LAST_RESULT: ' + ISNULL(CONVERT(NVARCHAR(250), @PROFILE_LAST_RESULT), 'NULL');
PRINT 'PARAMETER48 - @RESULT_ACTION_ID: ' + ISNULL(CONVERT(NVARCHAR(30), @RESULT_ACTION_ID), 'NULL');
PRINT 'PARAMETER49 - @RESULT_STATUS_ID: ' + ISNULL(CONVERT(NVARCHAR(10), @RESULT_STATUS_ID), 'NULL');
PRINT 'PARAMETER50 - @RESULT_TYPE_ID: ' + ISNULL(CONVERT(NVARCHAR(1), @RESULT_TYPE_ID), 'NULL');
PRINT 'PARAMETER51 - @RESULT_HEADER: ' + ISNULL(CONVERT(NVARCHAR(100), @RESULT_HEADER), 'NULL');
PRINT 'PARAMETER52 - @RESULT_BODY: ' + ISNULL(CONVERT(NVARCHAR(100), @RESULT_BODY), 'NULL');
PRINT 'PARAMETER53 - @RESULT_INFO: ' + ISNULL(CONVERT(NVARCHAR(100), @RESULT_INFO), 'NULL');
PRINT 'PARAMETER54 - @RESULT_ERROR: ' + ISNULL(CONVERT(NVARCHAR(100), @RESULT_ERROR), 'NULL');
PRINT '';
-----------------------------------------------------------------------------------------------------------------------------
--================================================-- Validation --=======================================================--
IF (@ENTITY NOT IN ('ACTION', 'ENDPOINT', 'ENDPOINT_AUTH', 'ENDPOINT_PARAMS', 'PROFILE', 'RESULT')) BEGIN
SET @RETURN_STATUS = 50201;
SET @RETURN_STATUS_TEXT = 'ERROR: Unknown entity "' + @ENTITY + '". Allowed: ACTION, ENDPOINT, ENDPOINT_AUTH, ENDPOINT_PARAMS, PROFILE, RESULT.';
RAISERROR(@RETURN_STATUS_TEXT,16,1);
RETURN @RETURN_STATUS;
END;
IF (@GUID IS NULL) BEGIN
SET @RETURN_STATUS = 50202;
SET @RETURN_STATUS_TEXT = 'ERROR: @pGUID is required.';
RAISERROR(@RETURN_STATUS_TEXT,16,1);
RETURN @RETURN_STATUS;
END;
-- value validations from views
IF (@ENTITY = 'ACTION') BEGIN
IF (@ACTION_TYPE_ID IS NOT NULL AND @ACTION_TYPE_ID NOT IN (0,1,2,3,4,5,6,7,8,9)) BEGIN
SET @RETURN_STATUS = 50203;
SET @RETURN_STATUS_TEXT = 'ERROR: ACTION.TYPE_ID must be one of (0..9).';
END; ELSE IF (@ACTION_ERROR_ACTION_ID IS NOT NULL AND @ACTION_ERROR_ACTION_ID NOT IN (0,1)) BEGIN
SET @RETURN_STATUS = 50204;
SET @RETURN_STATUS_TEXT = 'ERROR: ACTION.ERROR_ACTION_ID must be 0 or 1.';
END;
END; ELSE IF (@ENTITY = 'ENDPOINT_AUTH') BEGIN
IF (@ENDPOINT_AUTH_TYPE_ID IS NOT NULL AND @ENDPOINT_AUTH_TYPE_ID NOT IN (0,1,2,3,4,5,6,7,8,9)) BEGIN
SET @RETURN_STATUS = 50205;
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT_AUTH.TYPE_ID must be one of (0..9).';
END; ELSE IF (@ENDPOINT_AUTH_API_KEY_ADD_TO_ID IS NOT NULL AND @ENDPOINT_AUTH_API_KEY_ADD_TO_ID NOT IN (0,1)) BEGIN
SET @RETURN_STATUS = 50206;
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT_AUTH.API_KEY_ADD_TO must be 0 (HEADER) or 1 (QUERY).';
END;
END; ELSE IF (@ENTITY = 'PROFILE') BEGIN
IF (@PROFILE_TYPE_ID IS NOT NULL AND @PROFILE_TYPE_ID NOT IN (1,2)) BEGIN
SET @RETURN_STATUS = 50207;
SET @RETURN_STATUS_TEXT = 'ERROR: PROFILE.TYPE_ID must be 1 or 2.';
END; ELSE IF (@PROFILE_LOG_LEVEL_ID IS NOT NULL AND @PROFILE_LOG_LEVEL_ID NOT IN (0,1,2,3,4,5,6)) BEGIN
SET @RETURN_STATUS = 50208;
SET @RETURN_STATUS_TEXT = 'ERROR: PROFILE.LOG_LEVEL_ID must be between 0 and 6.';
END; ELSE IF (@PROFILE_LANGUAGE_ID IS NOT NULL AND @PROFILE_LANGUAGE_ID NOT IN (1031,1033)) BEGIN
SET @RETURN_STATUS = 50209;
SET @RETURN_STATUS_TEXT = 'ERROR: PROFILE.LANGUAGE_ID must be 1031 or 1033.';
END;
END; ELSE IF (@ENTITY = 'RESULT') BEGIN
IF (@RESULT_STATUS_ID IS NOT NULL AND @RESULT_STATUS_ID NOT IN (100,101,103,200,201,202,204,206,301,302,304,307,308,400,401,403,404,405,408,429,451,500,501,502,503,504,511)) BEGIN
SET @RETURN_STATUS = 50210;
SET @RETURN_STATUS_TEXT = 'ERROR: RESULT.STATUS_ID not in allowed HTTP status list.';
END;
END;
IF (@RETURN_STATUS > 0) BEGIN
RAISERROR(@RETURN_STATUS_TEXT,16,1);
RETURN @RETURN_STATUS;
END;
-----------------------------------------------------------------------------------------------------------------------------
--===============================================-- Main Processing --===================================================--
BEGIN TRY
BEGIN TRANSACTION;
IF (@ENTITY = 'ACTION') BEGIN
IF NOT EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_ACTION] WHERE [GUID] = @GUID) BEGIN
SET @RETURN_STATUS = 50211;
SET @RETURN_STATUS_TEXT = 'ERROR: ACTION with GUID=' + CONVERT(NVARCHAR(30), @GUID) + ' not found.';
END; ELSE BEGIN
UPDATE [CFG_ACTION] SET
[PROFILE_ID] = COALESCE(@ACTION_PROFILE_ID, [CFG_ACTION].[PROFILE_ID]),
[ACTIVE] = COALESCE(@ACTION_ACTIVE, [CFG_ACTION].[ACTIVE]),
[SEQUENCE] = COALESCE(@ACTION_SEQUENCE, [CFG_ACTION].[SEQUENCE]),
[ENDPOINT_ID] = COALESCE(@ACTION_ENDPOINT_ID, [CFG_ACTION].[ENDPOINT_ID]),
[ENDPOINT_AUTH_ID] = COALESCE(@ACTION_ENDPOINT_AUTH_ID, [CFG_ACTION].[ENDPOINT_AUTH_ID]),
[ENDPOINT_PARAMS_ID] = COALESCE(@ACTION_ENDPOINT_PARAMS_ID,[CFG_ACTION].[ENDPOINT_PARAMS_ID]),
[SQL_CONNECTION_ID] = COALESCE(@ACTION_SQL_CONNECTION_ID, [CFG_ACTION].[SQL_CONNECTION_ID]),
[TYPE_ID] = COALESCE(@ACTION_TYPE_ID, [CFG_ACTION].[TYPE_ID]),
[PREPROCESSING_QUERY] = COALESCE(@ACTION_PRE_SQL, [CFG_ACTION].[PREPROCESSING_QUERY]),
[HEADER_QUERY] = COALESCE(@ACTION_HEADER_SQL, [CFG_ACTION].[HEADER_QUERY]),
[BODY_QUERY] = COALESCE(@ACTION_BODY_SQL, [CFG_ACTION].[BODY_QUERY]),
[POSTPROCESSING_QUERY] = COALESCE(@ACTION_POST_SQL, [CFG_ACTION].[POSTPROCESSING_QUERY]),
[ERROR_ACTION_ID] = COALESCE(@ACTION_ERROR_ACTION_ID, [CFG_ACTION].[ERROR_ACTION_ID]),
[CHANGED_WHO] = COALESCE(@CHANGED_WHO, [CFG_ACTION].[CHANGED_WHO]),
[CHANGED_WHEN] = COALESCE(@CHANGED_WHEN, [CFG_ACTION].[CHANGED_WHEN])
FROM [dbo].[TBREC_CFG_ACTION] as [CFG_ACTION]
WHERE [CFG_ACTION].[GUID] = @GUID;
SET @RETURN_STATUS_TEXT = 'INFO: Updated ACTION GUID=' + CONVERT(NVARCHAR(30), @GUID);
END;
END; ELSE IF (@ENTITY = 'ENDPOINT') BEGIN
IF NOT EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_ENDPOINT] WHERE [GUID] = @GUID) BEGIN
SET @RETURN_STATUS = 50212;
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT with GUID=' + CONVERT(NVARCHAR(30), @GUID) + ' not found.';
END; ELSE BEGIN
UPDATE [CFG_ENDPOINT] SET
[ACTIVE] = COALESCE(@ENDPOINT_ACTIVE, [CFG_ENDPOINT].[ACTIVE]),
[DESCRIPTION] = COALESCE(@ENDPOINT_DESCRIPTION, [CFG_ENDPOINT].[DESCRIPTION]),
[URI] = COALESCE(@ENDPOINT_URI, [CFG_ENDPOINT].[URI]),
[CHANGED_WHO] = COALESCE(@CHANGED_WHO, [CFG_ENDPOINT].[CHANGED_WHO]),
[CHANGED_WHEN] = COALESCE(@CHANGED_WHEN, [CFG_ENDPOINT].[CHANGED_WHEN])
FROM [dbo].[TBREC_CFG_ENDPOINT] as [CFG_ENDPOINT]
WHERE [CFG_ENDPOINT].[GUID] = @GUID;
SET @RETURN_STATUS_TEXT = 'INFO: Updated ENDPOINT GUID=' + CONVERT(NVARCHAR(30), @GUID);
END;
END; ELSE IF (@ENTITY = 'ENDPOINT_AUTH') BEGIN
IF NOT EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_ENDPOINT_AUTH] WHERE [GUID] = @GUID) BEGIN
SET @RETURN_STATUS = 50213;
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT_AUTH with GUID=' + CONVERT(NVARCHAR(30), @GUID) + ' not found.';
END; ELSE BEGIN
UPDATE [CFG_ENDPOINT_AUTH] SET
[ACTIVE] = COALESCE(@ENDPOINT_AUTH_ACTIVE, [CFG_ENDPOINT_AUTH].[ACTIVE]),
[DESCRIPTION] = COALESCE(@ENDPOINT_AUTH_DESCRIPTION, [CFG_ENDPOINT_AUTH].[DESCRIPTION]),
[TYPE_ID] = COALESCE(@ENDPOINT_AUTH_TYPE_ID, [CFG_ENDPOINT_AUTH].[TYPE_ID]),
[API_KEY] = COALESCE(@ENDPOINT_AUTH_API_KEY, [CFG_ENDPOINT_AUTH].[API_KEY]),
[API_VALUE] = COALESCE(@ENDPOINT_AUTH_API_VALUE, [CFG_ENDPOINT_AUTH].[API_VALUE]),
[API_KEY_ADD_TO_ID] = COALESCE(@ENDPOINT_AUTH_API_KEY_ADD_TO_ID,[CFG_ENDPOINT_AUTH].[API_KEY_ADD_TO_ID]),
[TOKEN] = COALESCE(@ENDPOINT_AUTH_TOKEN, [CFG_ENDPOINT_AUTH].[TOKEN]),
[USERNAME] = COALESCE(@ENDPOINT_AUTH_USERNAME, [CFG_ENDPOINT_AUTH].[USERNAME]),
[PASSWORD] = COALESCE(@ENDPOINT_AUTH_PASSWORD, [CFG_ENDPOINT_AUTH].[PASSWORD]),
[DOMAIN] = COALESCE(@ENDPOINT_AUTH_DOMAIN, [CFG_ENDPOINT_AUTH].[DOMAIN]),
[WORKSTATION] = COALESCE(@ENDPOINT_AUTH_WORKSTATION, [CFG_ENDPOINT_AUTH].[WORKSTATION]),
[CHANGED_WHO] = COALESCE(@CHANGED_WHO, [CFG_ENDPOINT_AUTH].[CHANGED_WHO]),
[CHANGED_WHEN] = COALESCE(@CHANGED_WHEN, [CFG_ENDPOINT_AUTH].[CHANGED_WHEN])
FROM [dbo].[TBREC_CFG_ENDPOINT_AUTH] as [CFG_ENDPOINT_AUTH]
WHERE [CFG_ENDPOINT_AUTH].[GUID] = @GUID;
SET @RETURN_STATUS_TEXT = 'INFO: Updated ENDPOINT_AUTH GUID=' + CONVERT(NVARCHAR(30), @GUID);
END;
END; ELSE IF (@ENTITY = 'PROFILE') BEGIN
IF NOT EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_PROFILE] WHERE [GUID] = @GUID) BEGIN
SET @RETURN_STATUS = 50214;
SET @RETURN_STATUS_TEXT = 'ERROR: PROFILE with GUID=' + CONVERT(NVARCHAR(30), @GUID) + ' not found.';
END; ELSE BEGIN
UPDATE [CFG_PROFILE] SET
[ACTIVE] = COALESCE(@PROFILE_ACTIVE, [CFG_PROFILE].[ACTIVE]),
[TYPE_ID] = COALESCE(@PROFILE_TYPE_ID, [CFG_PROFILE].[TYPE_ID]),
[MANDANTOR] = COALESCE(@PROFILE_MANDANTOR, [CFG_PROFILE].[MANDANTOR]),
[PROFILE_NAME] = COALESCE(@PROFILE_NAME, [CFG_PROFILE].[PROFILE_NAME]),
[DESCRIPTION] = COALESCE(@PROFILE_DESCRIPTION, [CFG_PROFILE].[DESCRIPTION]),
[LOG_LEVEL_ID] = COALESCE(@PROFILE_LOG_LEVEL_ID, [CFG_PROFILE].[LOG_LEVEL_ID]),
[LANGUAGE_ID] = COALESCE(@PROFILE_LANGUAGE_ID, [CFG_PROFILE].[LANGUAGE_ID]),
[CHANGED_WHO] = COALESCE(@CHANGED_WHO, [CFG_PROFILE].[CHANGED_WHO]),
[CHANGED_WHEN] = COALESCE(@CHANGED_WHEN, [CFG_PROFILE].[CHANGED_WHEN])
FROM [dbo].[TBREC_CFG_PROFILE] as [CFG_PROFILE]
WHERE [CFG_PROFILE].[GUID] = @GUID;
IF EXISTS (SELECT 1 FROM [dbo].[TBREC_RUN_PROFILE] WHERE [PROFILE_ID] = @GUID) BEGIN
UPDATE [RUN_PROFILE] SET
[FIRST_RUN] = COALESCE(@PROFILE_FIRST_RUN, [RUN_PROFILE].[FIRST_RUN]),
[LAST_RUN] = COALESCE(@PROFILE_LAST_RUN, [RUN_PROFILE].[LAST_RUN]),
[LAST_RESULT] = COALESCE(@PROFILE_LAST_RESULT, [RUN_PROFILE].[LAST_RESULT])
FROM [dbo].[TBREC_RUN_PROFILE] as [RUN_PROFILE]
WHERE [RUN_PROFILE].[PROFILE_ID] = @GUID;
END; ELSE BEGIN
INSERT INTO [dbo].[TBREC_RUN_PROFILE] ([PROFILE_ID],[FIRST_RUN],[LAST_RUN],[LAST_RESULT])
VALUES (@GUID, @PROFILE_FIRST_RUN, @PROFILE_LAST_RUN, @PROFILE_LAST_RESULT);
END;
SET @RETURN_STATUS_TEXT = 'INFO: Updated PROFILE and RUN_PROFILE for GUID=' + CONVERT(NVARCHAR(30), @GUID);
END;
END; ELSE IF (@ENTITY = 'ENDPOINT_PARAMS') BEGIN
IF NOT EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_ENDPOINT_PARAMS] WHERE [GUID] = @GUID) BEGIN
SET @RETURN_STATUS = 50215;
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT_PARAMS with GUID=' + CONVERT(NVARCHAR(30), @GUID) + ' not found.';
END; ELSE BEGIN
UPDATE [CFG_ENDPOINT_PARAMS] SET
[ACTIVE] = COALESCE(@ENDPOINT_PARAMS_ACTIVE, [CFG_ENDPOINT_PARAMS].[ACTIVE]),
[DESCRIPTION] = COALESCE(@ENDPOINT_PARAMS_DESCRIPTION, [CFG_ENDPOINT_PARAMS].[DESCRIPTION]),
[GROUP_ID] = COALESCE(@ENDPOINT_PARAMS_GROUP_ID, [CFG_ENDPOINT_PARAMS].[GROUP_ID]),
[SEQUENCE] = COALESCE(@ENDPOINT_PARAMS_SEQUENCE, [CFG_ENDPOINT_PARAMS].[SEQUENCE]),
[KEY] = COALESCE(@ENDPOINT_PARAMS_KEY, [CFG_ENDPOINT_PARAMS].[KEY]),
[VALUE] = COALESCE(@ENDPOINT_PARAMS_VALUE, [CFG_ENDPOINT_PARAMS].[VALUE]),
[CHANGED_WHO] = COALESCE(@CHANGED_WHO, [CFG_ENDPOINT_PARAMS].[CHANGED_WHO]),
[CHANGED_WHEN] = COALESCE(@CHANGED_WHEN, [CFG_ENDPOINT_PARAMS].[CHANGED_WHEN])
FROM [dbo].[TBREC_CFG_ENDPOINT_PARAMS] as [CFG_ENDPOINT_PARAMS]
WHERE [CFG_ENDPOINT_PARAMS].[GUID] = @GUID;
SET @RETURN_STATUS_TEXT = 'INFO: Updated ENDPOINT_PARAMS GUID=' + CONVERT(NVARCHAR(30), @GUID);
END;
END; ELSE IF (@ENTITY = 'RESULT') BEGIN
IF NOT EXISTS (SELECT 1 FROM [dbo].[TBREC_OUT_RESULT] WHERE [GUID] = @GUID) BEGIN
SET @RETURN_STATUS = 50216;
SET @RETURN_STATUS_TEXT = 'ERROR: RESULT with GUID=' + CONVERT(NVARCHAR(30), @GUID) + ' not found.';
END; ELSE BEGIN
UPDATE [OUT_RESULT] SET
[ACTION_ID] = COALESCE(@RESULT_ACTION_ID, [OUT_RESULT].[ACTION_ID]),
[STATUS_ID] = COALESCE(@RESULT_STATUS_ID, [OUT_RESULT].[STATUS_ID]),
[RESULT_TYPE_ID] = COALESCE(@RESULT_STATUS_ID, [OUT_RESULT].[RESULT_TYPE_ID]),
[RESULT_HEADER] = COALESCE(@RESULT_HEADER, [OUT_RESULT].[RESULT_HEADER]),
[RESULT_BODY] = COALESCE(@RESULT_BODY, [OUT_RESULT].[RESULT_BODY]),
[RESULT_INFO] = COALESCE(@RESULT_INFO, [OUT_RESULT].[RESULT_INFO]),
[RESULT_ERROR] = COALESCE(@RESULT_ERROR, [OUT_RESULT].[RESULT_ERROR]),
[CHANGED_WHO] = COALESCE(@CHANGED_WHO, [OUT_RESULT].[CHANGED_WHO]),
[CHANGED_WHEN] = COALESCE(@CHANGED_WHEN, [OUT_RESULT].[CHANGED_WHEN])
FROM [dbo].[TBREC_OUT_RESULT] as [OUT_RESULT]
WHERE [OUT_RESULT].[GUID] = @GUID;
SET @RETURN_STATUS_TEXT = 'INFO: Updated RESULT GUID=' + CONVERT(NVARCHAR(30), @GUID);
END;
END;
IF (@RETURN_STATUS > 0) BEGIN
IF (XACT_STATE() <> 0) ROLLBACK TRANSACTION;
END; ELSE BEGIN
COMMIT TRANSACTION;
END;
--======================================================-- Output result --======================================================--
SET @RETURN_STATUS_TEXT = 'END PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(VARCHAR(50), GETDATE(), 120);
PRINT '';
PRINT @RETURN_STATUS_TEXT;
PRINT '====================================================================================================';
-----------------------------------------------------------------------------------------------------------------------------------
RETURN @RETURN_STATUS;
END TRY BEGIN CATCH
IF (XACT_STATE() <> 0) ROLLBACK TRANSACTION;
--======================================================-- Output result --======================================================--
SET @RETURN_STATUS_TEXT = 'ERROR: ' + ERROR_MESSAGE();
RAISERROR(@RETURN_STATUS_TEXT,16,1);
SET @RETURN_STATUS_TEXT = 'END PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(VARCHAR(50), GETDATE(), 120);
PRINT '';
PRINT @RETURN_STATUS_TEXT;
PRINT '====================================================================================================';
-----------------------------------------------------------------------------------------------------------------------------------
RETURN @RETURN_STATUS;
END CATCH;
-----------------------------------------------------------------------------------------------------------------------------
END;
GO

View File

@@ -0,0 +1,137 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TBREC_CFG_ACTION](
[GUID] [bigint] IDENTITY(1,1) NOT NULL,
[PROFILE_ID] [bigint] NOT NULL,
[ACTIVE] [bit] NOT NULL,
[SEQUENCE] [tinyint] NOT NULL,
[ENDPOINT_ID] [bigint] NOT NULL,
[ENDPOINT_AUTH_ID] [bigint] NULL,
[ENDPOINT_PARAMS_ID] [smallint] NULL,
[SQL_CONNECTION_ID] [smallint] NULL,
[TYPE_ID] [tinyint] NOT NULL,
[PREPROCESSING_QUERY] [nvarchar](max) NULL,
[HEADER_QUERY] [nvarchar](max) NULL,
[BODY_QUERY] [nvarchar](max) NULL,
[POSTPROCESSING_QUERY] [nvarchar](max) NULL,
[ERROR_ACTION_ID] [tinyint] NOT NULL,
[ADDED_WHO] [nvarchar](50) NOT NULL,
[ADDED_WHEN] [datetime] NOT NULL,
[CHANGED_WHO] [nvarchar](50) NULL,
[CHANGED_WHEN] [datetime] NULL,
CONSTRAINT [PK_TBREC_CFG_ACTION_GUID] PRIMARY KEY CLUSTERED
(
[GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] ADD CONSTRAINT [DF_TBREC_CFG_ACTION_ACTIVE] DEFAULT ((0)) FOR [ACTIVE]
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] ADD CONSTRAINT [DF_TBREC_CFG_ACTION_SEQUENCE] DEFAULT ((0)) FOR [SEQUENCE]
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] ADD CONSTRAINT [DF_TBREC_CFG_ACTION_TYPE_ID] DEFAULT ((1)) FOR [TYPE_ID]
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] ADD CONSTRAINT [DF_TBREC_CFG_ACTION_ERROR_ACTION_ID] DEFAULT ((0)) FOR [ERROR_ACTION_ID]
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] ADD CONSTRAINT [DF_TBREC_CFG_ACTION_ADDED_WHO] DEFAULT (suser_sname()) FOR [ADDED_WHO]
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] ADD CONSTRAINT [DF_TBREC_CFG_ACTION_ADDED_WHEN] DEFAULT (sysdatetime()) FOR [ADDED_WHEN]
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] WITH CHECK ADD CONSTRAINT [FK_TBREC_CFG_ACTION_TBDD_CONNECTION] FOREIGN KEY([SQL_CONNECTION_ID])
REFERENCES [dbo].[TBDD_CONNECTION] ([GUID])
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] CHECK CONSTRAINT [FK_TBREC_CFG_ACTION_TBDD_CONNECTION]
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] WITH CHECK ADD CONSTRAINT [FK_TBREC_CFG_ACTION_TBREC_CFG_ENDPOINT] FOREIGN KEY([ENDPOINT_ID])
REFERENCES [dbo].[TBREC_CFG_ENDPOINT] ([GUID])
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] CHECK CONSTRAINT [FK_TBREC_CFG_ACTION_TBREC_CFG_ENDPOINT]
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] WITH CHECK ADD CONSTRAINT [FK_TBREC_CFG_ACTION_TBREC_CFG_ENDPOINT_AUTH] FOREIGN KEY([ENDPOINT_AUTH_ID])
REFERENCES [dbo].[TBREC_CFG_ENDPOINT_AUTH] ([GUID])
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] CHECK CONSTRAINT [FK_TBREC_CFG_ACTION_TBREC_CFG_ENDPOINT_AUTH]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Primärschlüssel' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'GUID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Profil-Referenz' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'PROFILE_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Ein-/Ausschalter' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'ACTIVE'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Reihenfolge im Profil' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'SEQUENCE'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Endpoint-Referenz' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'ENDPOINT_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Auth-Referenz' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'ENDPOINT_AUTH_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Parameterguppe' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'ENDPOINT_PARAMS_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'SQL-Verbindungs-Referenz' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'SQL_CONNECTION_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'HTTP-Methode (0 = NONE; 1 = GET; 2 = POST; 3 = PUT; 4 = PATCH; 5 = DELETE; 6 = HEAD; 7 = OPTIONS; 8 = CONNECT; 9 = TRACE)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'TYPE_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'SQL vor Request' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'PREPROCESSING_QUERY'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'SQL fuer Header-Erzeugung' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'HEADER_QUERY'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'SQL fuer Body-Erzeugung' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'BODY_QUERY'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'SQL nach Request' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'POSTPROCESSING_QUERY'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Fehlerbehandlung (0 = STOP; 1 = CONTINUE)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'ERROR_ACTION_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Angelegt von' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'ADDED_WHO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Angelegt am' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'ADDED_WHEN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Geaendert von' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'CHANGED_WHO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Geaendert am' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ACTION', @level2type=N'COLUMN',@level2name=N'CHANGED_WHEN'
GO
--------------------------------------------------------------------------------------
CREATE OR ALTER TRIGGER [dbo].[TBREC_CFG_ACTION_AFT_UPD] ON [dbo].[TBREC_CFG_ACTION]
FOR UPDATE
AS
UPDATE [TBREC_CFG_ACTION]
SET [CHANGED_WHEN] = (SYSDATETIME())
FROM [INSERTED]
WHERE [TBREC_CFG_ACTION].[GUID] = [INSERTED].[GUID]
GO
ALTER TABLE [dbo].[TBREC_CFG_ACTION] ENABLE TRIGGER [TBREC_CFG_ACTION_AFT_UPD]
GO

View File

@@ -0,0 +1,64 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TBREC_CFG_ENDPOINT](
[GUID] [bigint] IDENTITY(1,1) NOT NULL,
[ACTIVE] [bit] NOT NULL,
[DESCRIPTION] [nvarchar](250) NULL,
[URI] [nvarchar](2000) NOT NULL,
[ADDED_WHO] [nvarchar](50) NOT NULL,
[ADDED_WHEN] [datetime] NOT NULL,
[CHANGED_WHO] [nvarchar](50) NULL,
[CHANGED_WHEN] [datetime] NULL,
CONSTRAINT [PK_TBREC_CFG_ENDPOINT] PRIMARY KEY CLUSTERED
(
[GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TBREC_CFG_ENDPOINT] ADD CONSTRAINT [DF_TBREC_CFG_ENDPOINT_ADDED_WHO] DEFAULT (SUSER_SNAME()) FOR [ADDED_WHO]
GO
ALTER TABLE [dbo].[TBREC_CFG_ENDPOINT] ADD CONSTRAINT [DF_TBREC_CFG_ENDPOINT_ADDED_WHEN] DEFAULT (sysdatetime()) FOR [ADDED_WHEN]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Primärschlüssel' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT', @level2type=N'COLUMN',@level2name=N'GUID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Ein-/Ausschalter' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT', @level2type=N'COLUMN',@level2name=N'ACTIVE'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Beschreibung' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT', @level2type=N'COLUMN',@level2name=N'DESCRIPTION'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Ziel-URI' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT', @level2type=N'COLUMN',@level2name=N'URI'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Angelegt von' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT', @level2type=N'COLUMN',@level2name=N'ADDED_WHO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Angelegt am' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT', @level2type=N'COLUMN',@level2name=N'ADDED_WHEN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Geaendert von' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT', @level2type=N'COLUMN',@level2name=N'CHANGED_WHO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Geaendert am' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT', @level2type=N'COLUMN',@level2name=N'CHANGED_WHEN'
GO
--------------------------------------------------------------------------------------
CREATE OR ALTER TRIGGER [dbo].[TBREC_CFG_ENDPOINT_AFT_UPD] ON [dbo].[TBREC_CFG_ENDPOINT]
FOR UPDATE
AS
UPDATE [TBREC_CFG_ENDPOINT]
SET [CHANGED_WHEN] = (SYSDATETIME())
FROM [INSERTED]
WHERE [TBREC_CFG_ENDPOINT].[GUID] = [INSERTED].[GUID]
GO
ALTER TABLE [dbo].[TBREC_CFG_ENDPOINT] ENABLE TRIGGER [TBREC_CFG_ENDPOINT_AFT_UPD]
GO

View File

@@ -0,0 +1,102 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TBREC_CFG_ENDPOINT_AUTH](
[GUID] [bigint] IDENTITY(1,1) NOT NULL,
[ACTIVE] [bit] NOT NULL,
[DESCRIPTION] [nvarchar](250) NULL,
[TYPE_ID] [tinyint] NOT NULL,
[API_KEY] [nvarchar](150) NULL,
[API_VALUE] [nvarchar](150) NULL,
[API_KEY_ADD_TO_ID] [bit] NULL,
[TOKEN] [nvarchar](150) NULL,
[USERNAME] [nvarchar](100) NULL,
[PASSWORD] [nvarchar](100) NULL,
[DOMAIN] [nvarchar](50) NULL,
[WORKSTATION] [nvarchar](50) NULL,
[ADDED_WHO] [nvarchar](50) NOT NULL,
[ADDED_WHEN] [datetime] NOT NULL,
[CHANGED_WHO] [nvarchar](50) NULL,
[CHANGED_WHEN] [datetime] NULL,
CONSTRAINT [PK_TBREC_CFG_ENDPOINT_AUTH_GUID] PRIMARY KEY CLUSTERED
(
[GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TBREC_CFG_ENDPOINT_AUTH] ADD CONSTRAINT [DF_TBREC_CFG_ENDPOINT_AUTH_ACTIVE] DEFAULT ((1)) FOR [ACTIVE]
GO
ALTER TABLE [dbo].[TBREC_CFG_ENDPOINT_AUTH] ADD CONSTRAINT [DF_TBREC_CFG_ENDPOINT_AUTH_TYPE_ID] DEFAULT ((0)) FOR [TYPE_ID]
GO
ALTER TABLE [dbo].[TBREC_CFG_ENDPOINT_AUTH] ADD CONSTRAINT [DF_TBREC_CFG_ENDPOINT_AUTH_ADDED_WHO] DEFAULT (suser_sname()) FOR [ADDED_WHO]
GO
ALTER TABLE [dbo].[TBREC_CFG_ENDPOINT_AUTH] ADD CONSTRAINT [DF_TBREC_CFG_ENDPOINT_AUTH_ADDED_WHEN] DEFAULT (sysdatetime()) FOR [ADDED_WHEN]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Primärschlüssel' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'GUID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Ein-/Ausschalter' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'ACTIVE'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Beschreibung' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'DESCRIPTION'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Auth-Typ ("0 = No Auth", "1 = API Key", "2 = Bearer Token", "3 = JWT Bearer", "4 = Basic Auth", "5 = Digest Auth", "6 = OAuth 1.0", "7 = OAuth 2.0", "8 = AWS Signature", "9 = NTLM Auth")' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'TYPE_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'API-Key-Name/-Header' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'API_KEY'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'API-Key-Wert' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'API_VALUE'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Platzierung (0 = HEADER; 1 = QUERY)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'API_KEY_ADD_TO_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Bearer/JWT-Token' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'TOKEN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Username Basic/Digest/NTLM' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'USERNAME'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Passwort Basic/Digest/NTLM' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'PASSWORD'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Domain fuer NTLM' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'DOMAIN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Workstation fuer NTLM' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'WORKSTATION'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Angelegt von' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'ADDED_WHO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Angelegt am' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'ADDED_WHEN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Geaendert von' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'CHANGED_WHO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Geaendert am' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_AUTH', @level2type=N'COLUMN',@level2name=N'CHANGED_WHEN'
GO
--------------------------------------------------------------------------------------
CREATE OR ALTER TRIGGER [dbo].[TBREC_CFG_ENDPOINT_AUTH_AFT_UPD] ON [dbo].[TBREC_CFG_ENDPOINT_AUTH]
FOR UPDATE
AS
UPDATE [TBREC_CFG_ENDPOINT_AUTH]
SET [CHANGED_WHEN] = (SYSDATETIME())
FROM [INSERTED]
WHERE [TBREC_CFG_ENDPOINT_AUTH].[GUID] = [INSERTED].[GUID]
GO
ALTER TABLE [dbo].[TBREC_CFG_ENDPOINT_AUTH] ENABLE TRIGGER [TBREC_CFG_ENDPOINT_AUTH_AFT_UPD]
GO

View File

@@ -0,0 +1,79 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TBREC_CFG_ENDPOINT_PARAMS](
[GUID] [bigint] IDENTITY(1,1) NOT NULL,
[ACTIVE] [bit] NOT NULL,
[DESCRIPTION] [nvarchar](250) NULL,
[GROUP_ID] [smallint] NOT NULL,
[SEQUENCE] [tinyint] NULL,
[KEY] [nvarchar](150) NULL,
[VALUE] [nvarchar](150) NULL,
[ADDED_WHO] [nvarchar](50) NOT NULL,
[ADDED_WHEN] [datetime] NOT NULL,
[CHANGED_WHO] [nvarchar](50) NULL,
[CHANGED_WHEN] [datetime] NULL,
CONSTRAINT [PK_TBREC_CFG_ENDPOINT_PARAMS_GUID] PRIMARY KEY CLUSTERED
(
[GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TBREC_CFG_ENDPOINT_PARAMS] ADD CONSTRAINT [DF_TBREC_CFG_ENDPOINT_PARAMS_ACTIVE] DEFAULT ((1)) FOR [ACTIVE]
GO
ALTER TABLE [dbo].[TBREC_CFG_ENDPOINT_PARAMS] ADD CONSTRAINT [DF_TBREC_CFG_ENDPOINT_PARAMS_ADDED_WHO] DEFAULT (suser_sname()) FOR [ADDED_WHO]
GO
ALTER TABLE [dbo].[TBREC_CFG_ENDPOINT_PARAMS] ADD CONSTRAINT [DF_TBREC_CFG_ENDPOINT_PARAMS_ADDED_WHEN] DEFAULT (sysdatetime()) FOR [ADDED_WHEN]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Primärschlüssel' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_PARAMS', @level2type=N'COLUMN',@level2name=N'GUID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Ein-/Ausschalter' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_PARAMS', @level2type=N'COLUMN',@level2name=N'ACTIVE'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Beschreibung' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_PARAMS', @level2type=N'COLUMN',@level2name=N'DESCRIPTION'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Parameterguppe' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_PARAMS', @level2type=N'COLUMN',@level2name=N'GROUP_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Reihenfolge' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_PARAMS', @level2type=N'COLUMN',@level2name=N'SEQUENCE'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Parameter-Name' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_PARAMS', @level2type=N'COLUMN',@level2name=N'KEY'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Parameter-Wert' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_PARAMS', @level2type=N'COLUMN',@level2name=N'VALUE'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Angelegt von' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_PARAMS', @level2type=N'COLUMN',@level2name=N'ADDED_WHO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Angelegt am' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_PARAMS', @level2type=N'COLUMN',@level2name=N'ADDED_WHEN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Geaendert von' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_PARAMS', @level2type=N'COLUMN',@level2name=N'CHANGED_WHO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Geaendert am' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_ENDPOINT_PARAMS', @level2type=N'COLUMN',@level2name=N'CHANGED_WHEN'
GO
--------------------------------------------------------------------------------------
CREATE OR ALTER TRIGGER [dbo].[TBREC_CFG_ENDPOINT_PARAMS_AFT_UPD] ON [dbo].[TBREC_CFG_ENDPOINT_PARAMS]
FOR UPDATE
AS
UPDATE [TBREC_CFG_ENDPOINT_PARAMS]
SET [CHANGED_WHEN] = (SYSDATETIME())
FROM [INSERTED]
WHERE [TBREC_CFG_ENDPOINT_PARAMS].[GUID] = [INSERTED].[GUID]
GO
ALTER TABLE [dbo].[TBREC_CFG_ENDPOINT_PARAMS] ENABLE TRIGGER [TBREC_CFG_ENDPOINT_PARAMS_AFT_UPD]
GO

View File

@@ -0,0 +1,96 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TBREC_CFG_PROFILE](
[GUID] [bigint] IDENTITY(1,1) NOT NULL,
[ACTIVE] [bit] NOT NULL,
[TYPE_ID] [tinyint] NOT NULL,
[MANDANTOR] [nvarchar](50) NOT NULL,
[PROFILE_NAME] [nvarchar](50) NOT NULL,
[DESCRIPTION] [nvarchar](250) NULL,
[LOG_LEVEL_ID] [tinyint] NOT NULL,
[LANGUAGE_ID] [smallint] NOT NULL,
[ADDED_WHO] [nvarchar](50) NOT NULL,
[ADDED_WHEN] [datetime] NOT NULL,
[CHANGED_WHO] [nvarchar](50) NULL,
[CHANGED_WHEN] [datetime] NULL,
CONSTRAINT [PK_TBREC_CFG_PROFILE_GUID] PRIMARY KEY CLUSTERED
(
[GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TBREC_CFG_PROFILE] ADD CONSTRAINT [DF_TBREC_CFG_PROFILE_ACTIVE] DEFAULT ((0)) FOR [ACTIVE]
GO
ALTER TABLE [dbo].[TBREC_CFG_PROFILE] ADD CONSTRAINT [DF_TBREC_CFG_PROFILE_TYPE_ID] DEFAULT ((1)) FOR [TYPE_ID]
GO
ALTER TABLE [dbo].[TBREC_CFG_PROFILE] ADD CONSTRAINT [DF_TBREC_CFG_PROFILE_MANDANTOR] DEFAULT ('DEFAULT') FOR [MANDANTOR]
GO
ALTER TABLE [dbo].[TBREC_CFG_PROFILE] ADD CONSTRAINT [DF_TBREC_CFG_PROFILE_LOG_LEVEL_ID] DEFAULT ((4)) FOR [LOG_LEVEL_ID]
GO
ALTER TABLE [dbo].[TBREC_CFG_PROFILE] ADD CONSTRAINT [DF_TBREC_CFG_PROFILE_LANGUAGE_ID] DEFAULT ((1031)) FOR [LANGUAGE_ID]
GO
ALTER TABLE [dbo].[TBREC_CFG_PROFILE] ADD CONSTRAINT [DF_TBREC_CFG_PROFILE_ADDED_WHO] DEFAULT (suser_sname()) FOR [ADDED_WHO]
GO
ALTER TABLE [dbo].[TBREC_CFG_PROFILE] ADD CONSTRAINT [DF_TBREC_CFG_PROFILE_ADDED_WHEN] DEFAULT (sysdatetime()) FOR [ADDED_WHEN]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Primärschlüssel' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_PROFILE', @level2type=N'COLUMN',@level2name=N'GUID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Ein-/Ausschalter' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_PROFILE', @level2type=N'COLUMN',@level2name=N'ACTIVE'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Profiltyp (1 = HTTP; 2 = HTTPS)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_PROFILE', @level2type=N'COLUMN',@level2name=N'TYPE_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Mandant/Kunde' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_PROFILE', @level2type=N'COLUMN',@level2name=N'MANDANTOR'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Profilname' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_PROFILE', @level2type=N'COLUMN',@level2name=N'PROFILE_NAME'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Beschreibung' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_PROFILE', @level2type=N'COLUMN',@level2name=N'DESCRIPTION'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Protokollstufe (0 = TRACE , 1 = DEBUG, 2 = INFO, 3 = WARN, 4 = ERROR, 5 = CRITICAL und 6 = NONE)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_PROFILE', @level2type=N'COLUMN',@level2name=N'LOG_LEVEL_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Sprache nach LCID (Dec) Standard' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_PROFILE', @level2type=N'COLUMN',@level2name=N'LANGUAGE_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Angelegt von' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_PROFILE', @level2type=N'COLUMN',@level2name=N'ADDED_WHO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Angelegt am' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_PROFILE', @level2type=N'COLUMN',@level2name=N'ADDED_WHEN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Geaendert von' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_PROFILE', @level2type=N'COLUMN',@level2name=N'CHANGED_WHO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Geaendert am' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_CFG_PROFILE', @level2type=N'COLUMN',@level2name=N'CHANGED_WHEN'
GO
--------------------------------------------------------------------------------------
CREATE OR ALTER TRIGGER [dbo].[TBREC_CFG_PROFILE_AFT_UPD] ON [dbo].[TBREC_CFG_PROFILE]
FOR UPDATE
AS
UPDATE [TBREC_CFG_PROFILE]
SET [CHANGED_WHEN] = (SYSDATETIME())
FROM [INSERTED]
WHERE [TBREC_CFG_PROFILE].[GUID] = [INSERTED].[GUID];
GO
ALTER TABLE [dbo].[TBREC_CFG_PROFILE] ENABLE TRIGGER [TBREC_CFG_PROFILE_AFT_UPD]
GO

View File

@@ -0,0 +1,66 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TBREC_OUT_RESULT](
[GUID] [bigint] IDENTITY(1,1) NOT NULL,
[ACTION_ID] [bigint] NOT NULL,
[STATUS_ID] [smallint] NOT NULL,
[RESULT_TYPE_ID] [tinyint] NOT NULL,
[RESULT_HEADER] [nvarchar](max) NULL,
[RESULT_BODY] [nvarchar](max) NULL,
[RESULT_INFO] [nvarchar](max) NULL,
[RESULT_ERROR] [nvarchar](max) NULL,
[ADDED_WHO] [nvarchar](50) NOT NULL,
[ADDED_WHEN] [datetime] NOT NULL,
[CHANGED_WHO] [nvarchar](50) NULL,
[CHANGED_WHEN] [datetime] NULL,
CONSTRAINT [PK_TBREC_OUT_RESULT_GUID] PRIMARY KEY CLUSTERED
(
[GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[TBREC_OUT_RESULT] ADD CONSTRAINT [DF_TBREC_OUT_RESULT_ADDED_WHO] DEFAULT (suser_sname()) FOR [ADDED_WHO]
GO
ALTER TABLE [dbo].[TBREC_OUT_RESULT] ADD CONSTRAINT [DF_TBREC_OUT_RESULT_ADDED_WHEN] DEFAULT (sysdatetime()) FOR [ADDED_WHEN]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Primärschlüssel' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_OUT_RESULT', @level2type=N'COLUMN',@level2name=N'GUID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Action-Referenz' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_OUT_RESULT', @level2type=N'COLUMN',@level2name=N'ACTION_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Antwort-Code' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_OUT_RESULT', @level2type=N'COLUMN',@level2name=N'STATUS_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Antwort von Schritt 1=Pre; 2=Main; 3=Post' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_OUT_RESULT', @level2type=N'COLUMN',@level2name=N'RESULT_TYPE_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Antwort-Header' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_OUT_RESULT', @level2type=N'COLUMN',@level2name=N'RESULT_HEADER'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Antwort-Body' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_OUT_RESULT', @level2type=N'COLUMN',@level2name=N'RESULT_BODY'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Optionaler Antwort Infotext' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_OUT_RESULT', @level2type=N'COLUMN',@level2name=N'RESULT_INFO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Optionaler Antwort Fehlertext' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_OUT_RESULT', @level2type=N'COLUMN',@level2name=N'RESULT_ERROR'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Angelegt von' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_OUT_RESULT', @level2type=N'COLUMN',@level2name=N'ADDED_WHO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Angelegt am' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_OUT_RESULT', @level2type=N'COLUMN',@level2name=N'ADDED_WHEN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Geaendert von' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_OUT_RESULT', @level2type=N'COLUMN',@level2name=N'CHANGED_WHO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Geaendert am' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_OUT_RESULT', @level2type=N'COLUMN',@level2name=N'CHANGED_WHEN'
GO

View File

@@ -0,0 +1,32 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TBREC_RUN_PROFILE](
[GUID] [bigint] IDENTITY(1,1) NOT NULL,
[PROFILE_ID] [bigint] NOT NULL,
[FIRST_RUN] [datetime] NULL,
[LAST_RUN] [datetime] NULL,
[LAST_RESULT] [nvarchar](250) NULL,
CONSTRAINT [PK_TBREC_RUN_PROFILE_GUID] PRIMARY KEY CLUSTERED
(
[GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Primärschlüssel' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_RUN_PROFILE', @level2type=N'COLUMN',@level2name=N'GUID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Profil-Referenz' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_RUN_PROFILE', @level2type=N'COLUMN',@level2name=N'PROFILE_ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Erste Ausfuehrung' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_RUN_PROFILE', @level2type=N'COLUMN',@level2name=N'FIRST_RUN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Letzte Ausfuehrung' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_RUN_PROFILE', @level2type=N'COLUMN',@level2name=N'LAST_RUN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Letztes Ergebnis' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBREC_RUN_PROFILE', @level2type=N'COLUMN',@level2name=N'LAST_RESULT'
GO

View File

@@ -0,0 +1,131 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE OR ALTER VIEW [dbo].[VWREC_ACTION]
AS
SELECT TOP (100) PERCENT
[CFG_ACTION].[GUID] as 'ACTION_GUID',
[CFG_ACTION].[PROFILE_ID] as 'PROFILE_ID',
[CFG_PROFILE].[PROFILE_NAME] as 'PROFILE_NAME',
[CFG_PROFILE].[TYPE_ID] as 'PROFILE_TYPE_ID',
CASE
WHEN [CFG_PROFILE].[TYPE_ID] = 1 THEN 'HTTP'
WHEN [CFG_PROFILE].[TYPE_ID] = 2 THEN 'HTTPS'
ELSE 'INVALID'
END as 'PROFILE_TYPE',
[CFG_ACTION].[SEQUENCE] as 'SEQUENCE',
[CFG_ACTION].[ENDPOINT_ID] as 'ENDPOINT_ID',
[CFG_ENDPOINT].[URI] as 'ENDPOINT_URI',
[CFG_ACTION].[ENDPOINT_AUTH_ID] as 'ENDPOINT_AUTH_ID',
[CFG_ENDPOINT_AUTH].[TYPE_ID] as 'ENDPOINT_AUTH_TYPE_ID',
CASE
WHEN [CFG_ENDPOINT_AUTH].[TYPE_ID] = 0 THEN 'No Auth'
WHEN [CFG_ENDPOINT_AUTH].[TYPE_ID] = 1 THEN 'API Key'
WHEN [CFG_ENDPOINT_AUTH].[TYPE_ID] = 2 THEN 'Bearer Token'
WHEN [CFG_ENDPOINT_AUTH].[TYPE_ID] = 3 THEN 'JWT Bearer'
WHEN [CFG_ENDPOINT_AUTH].[TYPE_ID] = 4 THEN 'Basic Auth'
WHEN [CFG_ENDPOINT_AUTH].[TYPE_ID] = 5 THEN 'Digest Auth'
WHEN [CFG_ENDPOINT_AUTH].[TYPE_ID] = 6 THEN 'OAuth 1.0'
WHEN [CFG_ENDPOINT_AUTH].[TYPE_ID] = 7 THEN 'OAuth 2.0'
WHEN [CFG_ENDPOINT_AUTH].[TYPE_ID] = 8 THEN 'AWS Signature'
WHEN [CFG_ENDPOINT_AUTH].[TYPE_ID] = 9 THEN 'NTLM Auth'
ELSE 'INVALID'
END as 'ENDPOINT_AUTH_TYPE',
[CFG_ENDPOINT_AUTH].[API_KEY] as 'ENDPOINT_AUTH_API_KEY',
[CFG_ENDPOINT_AUTH].[API_VALUE] as 'ENDPOINT_AUTH_API_VALUE',
[CFG_ENDPOINT_AUTH].[API_KEY_ADD_TO_ID] as 'ENDPOINT_AUTH_API_KEY_ADD_TO_ID',
CASE
WHEN [CFG_ENDPOINT_AUTH].[API_KEY_ADD_TO_ID] = 0 THEN 'HEADER'
WHEN [CFG_ENDPOINT_AUTH].[API_KEY_ADD_TO_ID] = 1 THEN 'QUERY'
ELSE NULL
END as 'ENDPOINT_AUTH_API_KEY_ADD_TO',
[CFG_ENDPOINT_AUTH].[TOKEN] as 'ENDPOINT_AUTH_TOKEN',
[CFG_ENDPOINT_AUTH].[USERNAME] as 'ENDPOINT_AUTH_USERNAME',
[CFG_ENDPOINT_AUTH].[PASSWORD] as 'ENDPOINT_AUTH_PASSWORD',
[CFG_ENDPOINT_AUTH].[DOMAIN] as 'ENDPOINT_AUTH_DOMAIN',
[CFG_ENDPOINT_AUTH].[WORKSTATION] as 'ENDPOINT_AUTH_WORKSTATION',
[CFG_ACTION].[ENDPOINT_PARAMS_ID] as 'ENDPOINT_PARAMS_ID',
[CFG_ACTION].[SQL_CONNECTION_ID] as 'SQL_CONNECTION_ID',
[CFG_SQL_CONNECTION].[SERVER] as 'SQL_CONNECTION_SERVER',
[CFG_SQL_CONNECTION].[DATENBANK] as 'SQL_CONNECTION_DB',
[CFG_SQL_CONNECTION].[USERNAME] as 'SQL_CONNECTION_USERNAME',
[CFG_SQL_CONNECTION].[PASSWORD] as 'SQL_CONNECTION_PASSWORD',
[CFG_ACTION].[TYPE_ID] as 'REST_TYPE_ID',
CASE
WHEN [CFG_ACTION].[TYPE_ID] = 0 THEN 'NONE'
WHEN [CFG_ACTION].[TYPE_ID] = 1 THEN 'GET'
WHEN [CFG_ACTION].[TYPE_ID] = 2 THEN 'POST'
WHEN [CFG_ACTION].[TYPE_ID] = 3 THEN 'PUT'
WHEN [CFG_ACTION].[TYPE_ID] = 4 THEN 'PATCH'
WHEN [CFG_ACTION].[TYPE_ID] = 5 THEN 'DELETE'
WHEN [CFG_ACTION].[TYPE_ID] = 6 THEN 'HEAD'
WHEN [CFG_ACTION].[TYPE_ID] = 7 THEN 'OPTIONS'
WHEN [CFG_ACTION].[TYPE_ID] = 8 THEN 'CONNECT'
WHEN [CFG_ACTION].[TYPE_ID] = 9 THEN 'TRACE'
ELSE 'INVALID'
END as 'REST_TYPE',
[CFG_ACTION].[PREPROCESSING_QUERY] as 'PREPROCESSING_QUERY',
[CFG_ACTION].[HEADER_QUERY] as 'HEADER_QUERY',
[CFG_ACTION].[BODY_QUERY] as 'BODY_QUERY',
[CFG_ACTION].[POSTPROCESSING_QUERY] as 'POSTPROCESSING_QUERY',
[CFG_ACTION].[ERROR_ACTION_ID] as 'ERROR_ACTION_ID',
CASE
WHEN [CFG_ACTION].[ERROR_ACTION_ID] = 0 THEN 'STOP'
WHEN [CFG_ACTION].[ERROR_ACTION_ID] = 1 THEN 'CONTINUE'
ELSE 'INVALID'
END as 'ERROR_ACTION'
FROM [TBREC_CFG_ACTION] as [CFG_ACTION] WITH (NOLOCK)
INNER JOIN [TBREC_CFG_PROFILE] as [CFG_PROFILE] WITH (NOLOCK) ON [CFG_ACTION].[PROFILE_ID] = [CFG_PROFILE].[GUID]
INNER JOIN [TBREC_CFG_ENDPOINT] as [CFG_ENDPOINT] WITH (NOLOCK) ON [CFG_ACTION].[ENDPOINT_ID] = [CFG_ENDPOINT].[GUID]
LEFT JOIN [TBREC_CFG_ENDPOINT_AUTH] as [CFG_ENDPOINT_AUTH] WITH (NOLOCK) ON [CFG_ACTION].[ENDPOINT_AUTH_ID] = [CFG_ENDPOINT_AUTH].[GUID]
LEFT JOIN [TBDD_CONNECTION] as [CFG_SQL_CONNECTION] WITH (NOLOCK) ON [CFG_ACTION].[SQL_CONNECTION_ID] = [CFG_SQL_CONNECTION].[GUID]
WHERE [CFG_ACTION].[ACTIVE] = 1
AND [CFG_PROFILE].[ACTIVE] = 1
AND [CFG_ENDPOINT].[ACTIVE] = 1
AND ([CFG_ACTION].[ENDPOINT_AUTH_ID] IS NULL OR [CFG_ENDPOINT_AUTH].[ACTIVE] = 1)
ORDER BY [CFG_ACTION].[PROFILE_ID] ASC, [CFG_ACTION].[SEQUENCE] ASC, [CFG_ACTION].[GUID] ASC;
GO
--------------------------------------------------------------------------------------
CREATE OR ALTER TRIGGER [dbo].[VWREC_ACTION_IO_INS]
ON [dbo].[VWREC_ACTION]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
THROW 51000, 'DML is not allowed on view [dbo].[VWREC_ACTION]. Use these Procedure instead: [PRREC_INSERT_OBJECT]', 1;
END;
GO
--------------------------------------------------------------------------------------
CREATE OR ALTER TRIGGER [dbo].[VWREC_ACTION_IO_UPD]
ON [dbo].[VWREC_ACTION]
INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;
THROW 52000, 'DML is not allowed on view [dbo].[VWREC_ACTION]. Use these Procedure instead: [PRREC_UPDATE_OBJECT]', 1;
END;
GO
--------------------------------------------------------------------------------------
CREATE OR ALTER TRIGGER [dbo].[VWREC_ACTION_IO_DEL]
ON [dbo].[VWREC_ACTION]
INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
THROW 53000, 'DML is not allowed on view [dbo].[VWREC_ACTION]. Use these Procedure instead: [PRREC_DELETE_OBJECT]', 1;
END;
GO
--------------------------------------------------------------------------------------

View File

@@ -0,0 +1,86 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE OR ALTER VIEW [dbo].[VWREC_PROFILE]
AS
SELECT TOP (100) PERCENT
[CFG_PROFILE].[GUID] as 'PROFILE_GUID',
[CFG_PROFILE].[ACTIVE] as 'ACTIVE',
[CFG_PROFILE].[TYPE_ID] as 'TYPE_ID',
CASE
WHEN [CFG_PROFILE].[TYPE_ID] = 1 THEN 'HTTP'
WHEN [CFG_PROFILE].[TYPE_ID] = 2 THEN 'HTTPS'
ELSE 'INVALID'
END as 'TYPE',
[CFG_PROFILE].[MANDANTOR] as 'MANDANTOR',
[CFG_PROFILE].[PROFILE_NAME] as 'PROFILE_NAME',
[CFG_PROFILE].[DESCRIPTION] as 'DESCRIPTION',
[CFG_PROFILE].[LOG_LEVEL_ID] as 'LOG_LEVEL_ID',
CASE
WHEN [CFG_PROFILE].[LOG_LEVEL_ID] = 0 THEN 'TRACE'
WHEN [CFG_PROFILE].[LOG_LEVEL_ID] = 1 THEN 'DEBUG'
WHEN [CFG_PROFILE].[LOG_LEVEL_ID] = 2 THEN 'INFO'
WHEN [CFG_PROFILE].[LOG_LEVEL_ID] = 3 THEN 'WARN'
WHEN [CFG_PROFILE].[LOG_LEVEL_ID] = 4 THEN 'ERROR'
WHEN [CFG_PROFILE].[LOG_LEVEL_ID] = 5 THEN 'CRITICAL'
WHEN [CFG_PROFILE].[LOG_LEVEL_ID] = 6 THEN 'NONE'
ELSE 'INVALID'
END as 'LOG_LEVEL',
[CFG_PROFILE].[LANGUAGE_ID] as 'LANGUAGE_ID',
CASE
WHEN [CFG_PROFILE].[LANGUAGE_ID] = 1031 THEN 'de-de'
WHEN [CFG_PROFILE].[LANGUAGE_ID] = 1033 THEN 'en-us'
ELSE 'INVALID'
END as 'LANGUAGE',
[CFG_PROFILE].[ADDED_WHO] as 'ADDED_WHO',
[CFG_PROFILE].[ADDED_WHEN] as 'ADDED_WHEN',
[CFG_PROFILE].[CHANGED_WHO] as 'CHANGED_WHO',
[CFG_PROFILE].[CHANGED_WHEN] as 'CHANGED_WHEN',
[RUN_PROFILE].[FIRST_RUN] as 'FIRST_RUN',
[RUN_PROFILE].[LAST_RUN] as 'LAST_RUN',
[RUN_PROFILE].[LAST_RESULT] as 'LAST_RESULT'
FROM [TBREC_CFG_PROFILE] as [CFG_PROFILE] WITH (NOLOCK)
LEFT JOIN [TBREC_RUN_PROFILE] as [RUN_PROFILE] WITH (NOLOCK) ON [CFG_PROFILE].[GUID] = [RUN_PROFILE].[PROFILE_ID]
ORDER BY [CFG_PROFILE].[GUID] ASC;
GO
--------------------------------------------------------------------------------------
CREATE OR ALTER TRIGGER [dbo].[TRREC_VWREC_PROFILE_IO_INS]
ON [dbo].[VWREC_PROFILE]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
THROW 51000, 'DML is not allowed on view [dbo].[VWREC_PROFILE]. Use these Procedure instead: [PRREC_INSERT_OBJECT]', 1;
END;
GO
--------------------------------------------------------------------------------------
CREATE OR ALTER TRIGGER [dbo].[TRREC_VWREC_PROFILE_IO_UPD]
ON [dbo].[VWREC_PROFILE]
INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;
THROW 52000, 'DML is not allowed on view [dbo].[VWREC_PROFILE]. Use these Procedure instead: [PRREC_UPDATE_OBJECT]', 1;
END;
GO
--------------------------------------------------------------------------------------
CREATE OR ALTER TRIGGER [dbo].[TRREC_VWREC_PROFILE_IO_DEL]
ON [dbo].[VWREC_PROFILE]
INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
THROW 53000, 'DML is not allowed on view [dbo].[VWREC_PROFILE]. Use these Procedure instead: [PRREC_DELETE_OBJECT]', 1;
END;
GO

View File

@@ -0,0 +1,77 @@
USE [DD_ECM]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE OR ALTER VIEW [dbo].[VWREC_RESULT]
AS
SELECT TOP (100) PERCENT
[OUT_RESULT].[GUID] as 'RESULT_GUID',
[OUT_RESULT].[ACTION_ID] as 'ACTION_ID',
[CFG_ACTION].[PROFILE_ID] as 'PROFILE_ID',
[CFG_PROFILE].[PROFILE_NAME] as 'PROFILE_NAME',
[OUT_RESULT].[STATUS_ID] as 'STATUS_ID',
CASE
-- None HTTP codes
WHEN [OUT_RESULT].[STATUS_ID] = 0 THEN 'OK'
WHEN [OUT_RESULT].[STATUS_ID] = 999 THEN 'Error'
-- 1xx Informational
WHEN [OUT_RESULT].[STATUS_ID] = 100 THEN 'Continue'
WHEN [OUT_RESULT].[STATUS_ID] = 101 THEN 'Switching Protocols'
WHEN [OUT_RESULT].[STATUS_ID] = 103 THEN 'Early Hints'
-- 2xx Success
WHEN [OUT_RESULT].[STATUS_ID] = 200 THEN 'OK'
WHEN [OUT_RESULT].[STATUS_ID] = 201 THEN 'Created'
WHEN [OUT_RESULT].[STATUS_ID] = 202 THEN 'Accepted'
WHEN [OUT_RESULT].[STATUS_ID] = 204 THEN 'No Content'
WHEN [OUT_RESULT].[STATUS_ID] = 206 THEN 'Partial Content'
-- 3xx Redirection
WHEN [OUT_RESULT].[STATUS_ID] = 301 THEN 'Moved Permanently'
WHEN [OUT_RESULT].[STATUS_ID] = 302 THEN 'Found'
WHEN [OUT_RESULT].[STATUS_ID] = 304 THEN 'Not Modified'
WHEN [OUT_RESULT].[STATUS_ID] = 307 THEN 'Temporary Redirect'
WHEN [OUT_RESULT].[STATUS_ID] = 308 THEN 'Permanent Redirect'
-- 4xx Client Error
WHEN [OUT_RESULT].[STATUS_ID] = 400 THEN 'Bad Request'
WHEN [OUT_RESULT].[STATUS_ID] = 401 THEN 'Unauthorized'
WHEN [OUT_RESULT].[STATUS_ID] = 403 THEN 'Forbidden'
WHEN [OUT_RESULT].[STATUS_ID] = 404 THEN 'Not Found'
WHEN [OUT_RESULT].[STATUS_ID] = 405 THEN 'Method Not Allowed'
WHEN [OUT_RESULT].[STATUS_ID] = 408 THEN 'Request Timeout'
WHEN [OUT_RESULT].[STATUS_ID] = 429 THEN 'Too Many Requests'
WHEN [OUT_RESULT].[STATUS_ID] = 451 THEN 'Unavailable For Legal Reasons'
-- 5xx Server Error
WHEN [OUT_RESULT].[STATUS_ID] = 500 THEN 'Internal Server Error'
WHEN [OUT_RESULT].[STATUS_ID] = 501 THEN 'Not Implemented'
WHEN [OUT_RESULT].[STATUS_ID] = 502 THEN 'Bad Gateway'
WHEN [OUT_RESULT].[STATUS_ID] = 503 THEN 'Service Unavailable'
WHEN [OUT_RESULT].[STATUS_ID] = 504 THEN 'Gateway Timeout'
WHEN [OUT_RESULT].[STATUS_ID] = 511 THEN 'Network Authentication Required'
ELSE 'UNKNOWN STATUS'
END as 'STATUS',
[OUT_RESULT].[RESULT_TYPE_ID] as 'RESULT_TYPE_ID',
CASE
WHEN [OUT_RESULT].[RESULT_TYPE_ID] = 1 THEN 'PRE'
WHEN [OUT_RESULT].[RESULT_TYPE_ID] = 2 THEN 'MAIN'
WHEN [OUT_RESULT].[RESULT_TYPE_ID] = 3 THEN 'POST'
ELSE 'INVALID'
END as 'RESULT_TYPE',
[OUT_RESULT].[RESULT_HEADER] as 'RESULT_HEADER',
[OUT_RESULT].[RESULT_BODY] as 'RESULT_BODY',
[OUT_RESULT].[RESULT_INFO] as 'RESULT_INFO',
[OUT_RESULT].[RESULT_ERROR] as 'RESULT_ERROR',
[OUT_RESULT].[ADDED_WHO] as 'ADDED_WHO',
[OUT_RESULT].[ADDED_WHEN] as 'ADDED_WHEN',
[OUT_RESULT].[CHANGED_WHO] as 'CHANGED_WHO',
[OUT_RESULT].[CHANGED_WHEN] as 'CHANGED_WHEN'
FROM [dbo].[TBREC_OUT_RESULT] as [OUT_RESULT] WITH (NOLOCK)
LEFT JOIN [dbo].[TBREC_CFG_ACTION] as [CFG_ACTION] WITH (NOLOCK) ON [OUT_RESULT].[ACTION_ID] = [CFG_ACTION].[GUID]
LEFT JOIN [dbo].[TBREC_CFG_PROFILE] as [CFG_PROFILE] WITH (NOLOCK) ON [CFG_ACTION].[PROFILE_ID] = [CFG_PROFILE].[GUID]
ORDER BY [OUT_RESULT].[GUID];
GO

View File

@@ -0,0 +1,190 @@
USE [DD_ECM]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [FNCUST_GET_EDMI_ITEM_VALUE]
-- =================================================================
-- Returns item values from [TBEDMI_ITEM_VALUE] with optional filters,
-- fallback handling and EB normalization for INVOICE_REFERENCE specs.
--
-- Returns: Table (max. 10.000 rows)
-- =================================================================
CREATE OR ALTER FUNCTION [dbo].[FNCUST_GET_EDMI_ITEM_VALUE]
(
@REFERENCE_GUID NVARCHAR(250) = NULL,
@SPEC_NAME NVARCHAR(100) = NULL
)
RETURNS TABLE
AS
RETURN
(
--====================================-- SPEC fallback configuration --====================================--
-- FALLBACK_ITEM_VALUE: value used when EB is invalid/missing
-- ALLOW_FALLBACK: 1 = use fallback, 0 = keep original ITEM_VALUE
WITH [CFG_INVOICE_REFERENCE_SPEC] AS
(
SELECT N'INVOICE_REFERENCE' AS [SPEC_NAME], CAST(N'EB9999999' AS NVARCHAR(100)) AS [FALLBACK_ITEM_VALUE], CAST(1 AS BIT) AS [ALLOW_FALLBACK]
UNION ALL SELECT N'INVOICE_REFERENCE2', CAST(NULL AS NVARCHAR(100)), CAST(0 AS BIT)
UNION ALL SELECT N'INVOICE_REFERENCE3', N'', CAST(0 AS BIT)
),
--=======================================-- Source data (filtered) --=======================================--
[SRC_FILTERED_DATA] AS
(
SELECT
[GUID],
[REFERENCE_GUID],
[ITEM_DESCRIPTION],
[ITEM_VALUE],
[CREATEDWHEN],
[CREATEDWHO],
[CHANGEDWHEN],
[GROUP_COUNTER],
[SPEC_NAME],
[IS_REQUIRED],
[CHANGEDWHO],
[COMMENT]
FROM [dbo].[TBEDMI_ITEM_VALUE]
WHERE (@REFERENCE_GUID IS NULL OR [REFERENCE_GUID] = @REFERENCE_GUID)
AND (@SPEC_NAME IS NULL OR [SPEC_NAME] = @SPEC_NAME)
)
--========================================-- Final output resultset --========================================--
SELECT TOP (10000)
[GUID],
[REFERENCE_GUID],
[ITEM_DESCRIPTION],
CASE
-- Normalize ITEM_VALUE for configured INVOICE_REFERENCE specs only
WHEN [CHK_SPEC].[IS_INVOICE_REFERENCE_SPEC] = 1
THEN [NORM_EB].[NORMALIZED_EB_VALUE]
ELSE [OUT_RESULT_DATA].[ITEM_VALUE]
END AS [ITEM_VALUE],
[OUT_RESULT_DATA].[CREATEDWHEN],
[OUT_RESULT_DATA].[CREATEDWHO],
[OUT_RESULT_DATA].[CHANGEDWHEN],
[OUT_RESULT_DATA].[GROUP_COUNTER],
[OUT_RESULT_DATA].[SPEC_NAME],
[OUT_RESULT_DATA].[IS_REQUIRED],
[OUT_RESULT_DATA].[CHANGEDWHO],
[OUT_RESULT_DATA].[COMMENT],
[OUT_RESULT_DATA].[IS_FALLBACK],
CASE
-- Flag rows where configured EB fallback was actually applied
WHEN [CHK_SPEC].[IS_INVOICE_REFERENCE_SPEC] = 1
AND
[CHK_SPEC].[ALLOW_FALLBACK] = 1
AND
(
([CHK_SPEC].[CONFIGURED_FALLBACK_ITEM_VALUE] IS NULL AND [NORM_EB].[NORMALIZED_EB_VALUE] IS NULL)
OR [NORM_EB].[NORMALIZED_EB_VALUE] = [CHK_SPEC].[CONFIGURED_FALLBACK_ITEM_VALUE]
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT)
END AS [IS_EB_FALLBACK]
FROM
(
-- Real rows from source table
SELECT
[GUID],
[REFERENCE_GUID],
[ITEM_DESCRIPTION],
[ITEM_VALUE],
[CREATEDWHEN],
[CREATEDWHO],
[CHANGEDWHEN],
[GROUP_COUNTER],
[SPEC_NAME],
[IS_REQUIRED],
[CHANGEDWHO],
[COMMENT],
CAST(0 AS BIT) AS [IS_FALLBACK]
FROM [SRC_FILTERED_DATA]
UNION ALL
-- Failsafe row if source query returns no row
SELECT
CAST(0 AS BIGINT) AS [GUID],
ISNULL(@REFERENCE_GUID, N'FAILSAFE') AS [REFERENCE_GUID],
N'NO_DATA_FOUND' AS [ITEM_DESCRIPTION],
N'' AS [ITEM_VALUE],
GETDATE() AS [CREATEDWHEN],
N'SYSTEM' AS [CREATEDWHO],
NULL AS [CHANGEDWHEN],
CAST(0 AS INT) AS [GROUP_COUNTER],
ISNULL(@SPEC_NAME, N'FAILSAFE') AS [SPEC_NAME],
CAST(0 AS BIT) AS [IS_REQUIRED],
'SYSTEM' AS [CHANGEDWHO],
'FAILSAFE_ROW_RETURNED' AS [COMMENT],
CAST(1 AS BIT) AS [IS_FALLBACK]
WHERE NOT EXISTS (SELECT 1 FROM [SRC_FILTERED_DATA])
) AS [OUT_RESULT_DATA]
--===================================-- Resolve spec configuration --===================================--
OUTER APPLY (
SELECT TOP (1)
v.[SPEC_NAME] AS [MATCHED_SPEC_NAME],
v.[FALLBACK_ITEM_VALUE] AS [CONFIGURED_FALLBACK_ITEM_VALUE],
v.[ALLOW_FALLBACK] AS [ALLOW_FALLBACK]
FROM [CFG_INVOICE_REFERENCE_SPEC] v
WHERE v.[SPEC_NAME] = UPPER(CONVERT(NVARCHAR(200), ISNULL([OUT_RESULT_DATA].[SPEC_NAME], N'')))
) AS [CFG_SPEC]
--=============================-- Derived check flags and fallback value --=============================--
CROSS APPLY (
SELECT
CASE
WHEN [CFG_SPEC].[MATCHED_SPEC_NAME] IS NULL THEN CAST(0 AS BIT)
ELSE CAST(1 AS BIT)
END AS [IS_INVOICE_REFERENCE_SPEC],
[CFG_SPEC].[CONFIGURED_FALLBACK_ITEM_VALUE] AS [CONFIGURED_FALLBACK_ITEM_VALUE],
ISNULL([CFG_SPEC].[ALLOW_FALLBACK], CAST(0 AS BIT)) AS [ALLOW_FALLBACK]
) AS [CHK_SPEC]
--=============================-- Preprocessing for EB pattern matching --=============================--
CROSS APPLY (
SELECT LTRIM(RTRIM(ISNULL([OUT_RESULT_DATA].[ITEM_VALUE], N''))) AS [CLEAN_ITEM_VALUE]
) AS [VAL_CLEAN]
CROSS APPLY (
SELECT N' ' + [VAL_CLEAN].[CLEAN_ITEM_VALUE] + N' ' AS [PADDED_ITEM_VALUE]
) AS [VAL_PADDED]
CROSS APPLY (
-- Match EB + 8 digits with non-digit boundaries left and right
SELECT PATINDEX(
N'%[^0-9]EB[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%',
[VAL_PADDED].[PADDED_ITEM_VALUE]
) AS [EB_PATTERN_POS]
) AS [PAT_EB]
--====================================-- Normalize EB output value --====================================--
CROSS APPLY (
SELECT
CASE
-- Exact EB value
WHEN [VAL_CLEAN].[CLEAN_ITEM_VALUE] LIKE N'EB[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
THEN [VAL_CLEAN].[CLEAN_ITEM_VALUE]
-- Extract EB value from a longer free-text string
WHEN [PAT_EB].[EB_PATTERN_POS] > 0
THEN SUBSTRING([VAL_PADDED].[PADDED_ITEM_VALUE], [PAT_EB].[EB_PATTERN_POS] + 1, 10)
-- No valid EB found: fallback if allowed, otherwise keep original value
ELSE CASE
WHEN [CHK_SPEC].[ALLOW_FALLBACK] = 1 THEN [CHK_SPEC].[CONFIGURED_FALLBACK_ITEM_VALUE]
ELSE [OUT_RESULT_DATA].[ITEM_VALUE]
END
END AS [NORMALIZED_EB_VALUE]
) AS [NORM_EB]
--=========================================-- Default result ordering --=========================================--
ORDER BY [GROUP_COUNTER] ASC
);
GO

View File

@@ -0,0 +1,374 @@
USE [DD_SYS]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [PRDD_TEST_PERFORMANCE]
-- =================================================================
-- Runs a configurable performance smoke test: creates a table, inserts data and queries it.
-- Minimum requirement: MS SQL Server 2016
--
-- Returns: INT Value - 0 = Everything worked well
-- =================================================================
-- Copyright (c) 2025 by Digital Data GmbH
--
-- Digital Data GmbH Ludwig-Rinn-Strasse 16 D-35452 Heuchelheim
-- Tel.: 0641/202360 E-Mail: info-flow@digitaldata.works
-- =================================================================
-- Creation Date / Author: 15.12.2025 / MK
-- Version Date / Editor: 23.12.2025 / MK
-- Version Number: 1.1.0.1
-- =================================================================
-- History:
-- 15.12.2025 / MK - First Version
-- 23.12.2025 / MK - Add DATA_COMPRESSION = PAGE to log table PK, fix minor formatting, add pRANDOMDATA parameter
CREATE OR ALTER PROCEDURE [dbo].[PRDD_TEST_PERFORMANCE] (
@pTARGETDB NVARCHAR(128) = NULL, -- Database to run the test against (defaults to current database)
@pSCHEMA NVARCHAR(128) = 'dbo', -- Schema of the test table
@pTABLENAME NVARCHAR(128) = 'TBDD_TEST_PERFORMANCE', -- Name of the test table to create/use
@pROWCOUNT BIGINT = 1000000, -- Number of rows to insert
@pBATCHSIZE BIGINT = 100000, -- Rows per batch; controls transaction size/log impact
@pPADLENGTH INT = 100, -- Length of the CHAR padding column
@pRANDOMDATA BIT = 0, -- 1 = insert randomized Payload/Pad values
@pDROPANDRECREATE BIT = 1, -- Set to 1 to drop/recreate the table before inserting, otherwise reuse existing table
@pLOGLEVEL NVARCHAR(25) = 'INFO' -- Set to 'INFO','WARN' or 'ERROR' (or NULL to disable) logging to table: [TBDD_TEST_PERFORMANCE_LOG]
)
AS
BEGIN
--================================================-- Set session options --===============================================--
SET NOCOUNT ON;
----------------------------------------------------------------------------------------------------------------------------
--=========================================-- Parameter copies (avoid sniffing) --========================================--
DECLARE @TARGETDB NVARCHAR(128) = LTRIM(RTRIM(ISNULL(@pTARGETDB,DB_NAME()))),
@SCHEMA NVARCHAR(128) = LTRIM(RTRIM(ISNULL(@pSCHEMA,'dbo'))),
@TABLENAME NVARCHAR(128) = LTRIM(RTRIM(ISNULL(@pTABLENAME,'TBDD_TEST_PERFORMANCE'))),
@ROWCOUNT BIGINT = ISNULL(@pROWCOUNT,1000000),
@BATCHSIZE BIGINT = ISNULL(@pBATCHSIZE,100000),
@PADLENGTH INT = ISNULL(@pPADLENGTH,100),
@RANDOMDATA BIT = ISNULL(@pRANDOMDATA,0),
@DROPANDRECREATE BIT = ISNULL(@pDROPANDRECREATE,1),
@LOGLEVEL NVARCHAR(25) = UPPER(LTRIM(RTRIM(ISNULL(@pLOGLEVEL,'INFO'))));
----------------------------------------------------------------------------------------------------------------------------
--=================================================-- Declare runtime variables --========================================--
DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID);
DECLARE @QualifiedTable NVARCHAR(300) = QUOTENAME(@SCHEMA) + '.' + QUOTENAME(@TABLENAME),
@FullTable NVARCHAR(400) = QUOTENAME(@TARGETDB) + '.' + QUOTENAME(@SCHEMA) + '.' + QUOTENAME(@TABLENAME),
@ProductVersion sql_variant,
@ProductMainVersion INT,
@ProductLevel sql_variant,
@ProductEdition sql_variant,
@SQLCommand NVARCHAR(MAX) = NULL,
@RowsRemaining BIGINT = 0,
@RowsInserted BIGINT = 0,
@BatchStart BIGINT = 1,
@BatchNumber INT = 0,
@InsertStart DATETIME2(3) = NULL,
@InsertEnd DATETIME2(3) = NULL,
@return_status INT = 0,
@return_status_text NVARCHAR(MAX) = 'START PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(varchar(50),GETDATE(),120),
@return_error_text NVARCHAR(MAX) = '';
----------------------------------------------------------------------------------------------------------------------------
--=================================================-- Failsafe settings --=================================================--
IF (@ROWCOUNT < 0) SET @ROWCOUNT = 0;
IF (@BATCHSIZE <= 0) SET @BATCHSIZE = @ROWCOUNT;
IF (@PADLENGTH < 1) SET @PADLENGTH = 1;
IF (@LOGLEVEL NOT IN ('INFO','WARN','ERROR')) SET @LOGLEVEL = 'ERROR';
-----------------------------------------------------------------------------------------------------------------------------
--=================================================-- Output parameters --================================================--
PRINT '====================================================================================================';
PRINT @return_status_text;
PRINT '';
PRINT 'PARAMETER01 - @TARGETDB: ' + CONVERT(NVARCHAR(128),@TARGETDB);
PRINT 'PARAMETER02 - @SCHEMA: ' + CONVERT(NVARCHAR(128),@SCHEMA);
PRINT 'PARAMETER03 - @TABLENAME: ' + CONVERT(NVARCHAR(128),@TABLENAME);
PRINT 'PARAMETER04 - @ROWCOUNT: ' + CONVERT(NVARCHAR(100),@ROWCOUNT);
PRINT 'PARAMETER05 - @BATCHSIZE: ' + CONVERT(NVARCHAR(100),@BATCHSIZE);
PRINT 'PARAMETER06 - @PADLENGTH: ' + CONVERT(NVARCHAR(100),@PADLENGTH);
PRINT 'PARAMETER07 - @RANDOMDATA: ' + CONVERT(NVARCHAR(1),@RANDOMDATA);
PRINT 'PARAMETER08 - @DROPANDRECREATE: ' + CONVERT(NVARCHAR(1),@DROPANDRECREATE);
PRINT 'PARAMETER09 - @LOGLEVEL: ' + CONVERT(NVARCHAR(25),@LOGLEVEL);
PRINT '';
-----------------------------------------------------------------------------------------------------------------------------
--=================================================-- Get server infos --==================================================--
SELECT @ProductVersion = SERVERPROPERTY('productversion'), @ProductLevel = SERVERPROPERTY ('productlevel'), @ProductEdition = SERVERPROPERTY ('edition');
SET @ProductMainVersion = ISNULL(LEFT(convert(NVARCHAR(100),@ProductVersion), CHARINDEX('.', convert(NVARCHAR(100),@ProductVersion)) - 1),0);
PRINT 'Informations about this Server:';
PRINT '@MySessionID: ' + CONVERT(NVARCHAR(100),@@SPID);
PRINT '@ProductVersion: ' + CONVERT(NVARCHAR(100),@ProductVersion);
PRINT '@ProductMainVersion: ' + CONVERT(NVARCHAR(100),@ProductMainVersion);
PRINT '@ProductLevel: ' + CONVERT(NVARCHAR(100),@ProductLevel);
PRINT '@ProductEdition: ' + CONVERT(NVARCHAR(100),@ProductEdition);
-----------------------------------------------------------------------------------------------------------------------------
--==============================================-- Prepare the log table --================================================--
IF (@LOGLEVEL is not NULL) BEGIN
PRINT '';
IF EXISTS (SELECT * FROM [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_NAME] = N'TBDD_TEST_PERFORMANCE_LOG') BEGIN
PRINT 'INFO: Log table already exists';
END; ELSE BEGIN
PRINT 'INFO: Log table does not exist, trying to create...';
CREATE TABLE [dbo].[TBDD_TEST_PERFORMANCE_LOG](
[GUID] [bigint] IDENTITY(1,1) NOT NULL,
[LOG_LEVEL] [NVARCHAR](25) NOT NULL,
[MESSAGE1] [NVARCHAR](max) NOT NULL,
[MESSAGE2] [NVARCHAR](max) NULL,
[MESSAGE3] [NVARCHAR](max) NULL,
[MESSAGE4] [NVARCHAR](max) NULL,
[MESSAGE5] [NVARCHAR](max) NULL,
[COMMENT] [NVARCHAR](max) NULL,
[ADDED_WHO] [NVARCHAR](50) NOT NULL,
[ADDED_WHEN] [datetime] NOT NULL,
CONSTRAINT [PK_TBDD_TEST_PERFORMANCE_LOG_GUID] PRIMARY KEY CLUSTERED
(
[GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, DATA_COMPRESSION = PAGE) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];
ALTER TABLE [dbo].[TBDD_TEST_PERFORMANCE_LOG] ADD CONSTRAINT [DF_TBDD_TEST_PERFORMANCE_LOG_ADDED_WHO] DEFAULT (suser_sname()) FOR [ADDED_WHO];
ALTER TABLE [dbo].[TBDD_TEST_PERFORMANCE_LOG] ADD CONSTRAINT [DF_TBDD_TEST_PERFORMANCE_LOG_ADDED_WHEN] DEFAULT (sysdatetime()) FOR [ADDED_WHEN];
END;
END; ELSE BEGIN
PRINT '';
PRINT 'WARN: Skipping Logging to log table!';
END;
-----------------------------------------------------------------------------------------------------------------------------
--===============================================-- Check for log table --================================================--
IF NOT EXISTS (SELECT * FROM [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_NAME] = N'TBDD_TEST_PERFORMANCE_LOG') BEGIN
SET @LOGLEVEL = 'NONE';
PRINT 'ERROR: Because the log table [TBDD_TEST_PERFORMANCE_LOG] does not exist, logging is disabled for this run!';
END;
-----------------------------------------------------------------------------------------------------------------------------
--===============================================-- Log start to table --=================================================--
IF ((@LOGLEVEL in ('INFO')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN
INSERT INTO [TBDD_TEST_PERFORMANCE_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN])
VALUES (@LOGLEVEL,'preparing', 'procedure', @return_status, @return_status_text, @MY_PROCEDURE_NAME, GetDate());
END;
-----------------------------------------------------------------------------------------------------------------------------
--===============================================-- Validate target database --============================================--
IF NOT EXISTS (SELECT 1 FROM [sys].[databases] WHERE [name] = @TARGETDB) BEGIN
SET @return_status = 10;
SET @return_status_text = 'ERROR: Target database [' + @TARGETDB + '] does not exist!';
PRINT @return_status_text;
IF ((@LOGLEVEL in ('INFO','WARN','ERROR')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN
INSERT INTO [TBDD_TEST_PERFORMANCE_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN])
VALUES ('ERROR', 'validation', 'database', @return_status, @return_status_text, @MY_PROCEDURE_NAME, GetDate());
END;
RETURN @return_status;
END;
-----------------------------------------------------------------------------------------------------------------------------
BEGIN TRY
--======================================-- Drop and recreate or ensure table --==========================================--
IF (@DROPANDRECREATE = 1) BEGIN
SET @return_status_text = 'INFO: Dropping and recreating table ' + @FullTable;
PRINT @return_status_text;
SET @SQLCommand = N'USE ' + QUOTENAME(@TARGETDB) + N';
IF OBJECT_ID(''' + @QualifiedTable + ''',''U'') IS NOT NULL
DROP TABLE ' + @QualifiedTable + N';
CREATE TABLE ' + @QualifiedTable + N'(
[Id] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Payload] BIGINT NOT NULL,
[CreatedAt] DATETIME2(3) NOT NULL DEFAULT SYSUTCDATETIME(),
[Pad] CHAR(' + CONVERT(NVARCHAR(10),@PADLENGTH) + N') NOT NULL DEFAULT REPLICATE(''X'',' + CONVERT(NVARCHAR(10),@PADLENGTH) + N')
);';
END; ELSE BEGIN
SET @return_status_text = 'INFO: Ensuring table ' + @FullTable + ' exists (DROPANDRECREATE = 0)';
PRINT @return_status_text;
SET @SQLCommand = N'USE ' + QUOTENAME(@TARGETDB) + N';
IF NOT EXISTS (SELECT 1 FROM sys.tables WHERE [name] = N''' + @TABLENAME + N''' AND [schema_id] = SCHEMA_ID(N''' + @SCHEMA + N'''))
BEGIN
CREATE TABLE ' + @QualifiedTable + N'(
[Id] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Payload] BIGINT NOT NULL,
[CreatedAt] DATETIME2(3) NOT NULL DEFAULT SYSUTCDATETIME(),
[Pad] CHAR(' + CONVERT(NVARCHAR(10),@PADLENGTH) + N') NOT NULL DEFAULT REPLICATE(''X'',' + CONVERT(NVARCHAR(10),@PADLENGTH) + N')
);
END;';
END;
EXEC @return_status = sp_executesql @SQLCommand;
IF (@LOGLEVEL in ('INFO','WARN','ERROR')) BEGIN
INSERT INTO [TBDD_TEST_PERFORMANCE_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN])
VALUES (@LOGLEVEL, 'table', @FullTable, @return_status, @return_status_text, @MY_PROCEDURE_NAME, GetDate());
END;
-----------------------------------------------------------------------------------------------------------------------------
--================================================-- Insert test data --=================================================--
IF (@ROWCOUNT > 0) and (@return_status = 0) BEGIN
SET @RowsRemaining = @ROWCOUNT;
SET @RowsInserted = 0;
SET @BatchStart = 1;
SET @BatchNumber = 0;
SET @InsertStart = SYSUTCDATETIME();
WHILE (@RowsRemaining > 0) AND (@return_status = 0) BEGIN
DECLARE @CurrentBatch BIGINT = CASE WHEN @RowsRemaining > @BATCHSIZE THEN @BATCHSIZE ELSE @RowsRemaining END;
SET @BatchNumber = @BatchNumber + 1;
SET @SQLCommand = N'USE ' + QUOTENAME(@TARGETDB) + N';
SET NOCOUNT ON;
;WITH Numbers AS (
SELECT TOP (@BatchSize)
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS n
FROM sys.all_objects a
CROSS JOIN sys.all_objects b
CROSS JOIN sys.all_objects c
)
INSERT INTO ' + @QualifiedTable + N' ([Payload],[CreatedAt],[Pad])
SELECT
CASE WHEN @RandomData = 1 THEN ABS(CAST(CHECKSUM(NEWID()) AS BIGINT)) ELSE @BatchStart + n - 1 END,
DATEADD(SECOND, @BatchStart + n - 1, SYSUTCDATETIME()),
CASE WHEN @RandomData = 1
THEN LEFT(REPLICATE(REPLACE(CONVERT(VARCHAR(36), NEWID()), ''-'', ''''), CAST(CEILING(@PadLength / 32.0) AS INT)), @PadLength)
ELSE REPLICATE(''X'', @PadLength)
END
FROM Numbers;';
EXEC @return_status = sp_executesql @SQLCommand,
N'@BatchSize BIGINT, @PadLength INT, @BatchStart BIGINT, @RandomData BIT',
@BatchSize = @CurrentBatch,
@PadLength = @PADLENGTH,
@BatchStart = @BatchStart,
@RandomData = @RANDOMDATA;
IF (@return_status = 0) BEGIN
SET @RowsRemaining = @RowsRemaining - @CurrentBatch;
SET @BatchStart = @BatchStart + @CurrentBatch;
SET @RowsInserted = @RowsInserted + @CurrentBatch;
SET @return_status_text = 'INFO: Batch ' + CONVERT(NVARCHAR(20),@BatchNumber) + ' inserted ' + CONVERT(NVARCHAR(20),@CurrentBatch) + ' rows (total ' + CONVERT(NVARCHAR(20),@RowsInserted) + ').';
PRINT @return_status_text;
IF (@LOGLEVEL in ('INFO','WARN')) BEGIN
INSERT INTO [TBDD_TEST_PERFORMANCE_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN])
VALUES ('INFO', 'insert_batch', @FullTable, @RowsInserted, @return_status_text, @MY_PROCEDURE_NAME, GetDate());
END;
END; ELSE BEGIN
SET @return_error_text = 'ERROR: Insert batch ' + CONVERT(NVARCHAR(20),@BatchNumber) + ' failed!';
PRINT @return_error_text;
IF (@LOGLEVEL in ('INFO','WARN','ERROR')) BEGIN
INSERT INTO [TBDD_TEST_PERFORMANCE_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [ADDED_WHO], [ADDED_WHEN])
VALUES ('ERROR', 'insert_batch', @FullTable, @return_error_text, @MY_PROCEDURE_NAME, GetDate());
END;
END;
END;
SET @InsertEnd = SYSUTCDATETIME();
IF (@return_status = 0) BEGIN
SET @return_status_text = 'INFO: Inserted ' + CONVERT(NVARCHAR(50),@RowsInserted) + ' rows in ' + CONVERT(NVARCHAR(50),CAST(DATEDIFF(MILLISECOND,@InsertStart,@InsertEnd)/1000.0 AS DECIMAL(18,2))) + ' seconds.';
PRINT @return_status_text;
IF (@LOGLEVEL in ('INFO','WARN')) BEGIN
INSERT INTO [TBDD_TEST_PERFORMANCE_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN])
VALUES ('INFO', 'insert_total', @FullTable, @return_status, @return_status_text, @MY_PROCEDURE_NAME, GetDate());
END;
END;
END; ELSE BEGIN
SET @return_status_text = 'WARN: ROWCOUNT was 0, skipping insert!';
PRINT @return_status_text;
IF (@LOGLEVEL in ('INFO','WARN')) BEGIN
INSERT INTO [TBDD_TEST_PERFORMANCE_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN])
VALUES ('WARN', 'insert_total', @FullTable, @return_status, @return_status_text, @MY_PROCEDURE_NAME, GetDate());
END;
END;
-----------------------------------------------------------------------------------------------------------------------------
--================================================-- Query the test data --================================================--
IF (@return_status = 0) BEGIN
SET @return_status_text = 'INFO: Running query phase for table ' + @FullTable;
PRINT @return_status_text;
SET @SQLCommand = N'USE ' + QUOTENAME(@TARGETDB) + N';
SELECT COUNT(*) AS TotalRows, MIN(Id) AS MinId, MAX(Id) AS MaxId FROM ' + @QualifiedTable + N';
SELECT TOP (10) * FROM ' + @QualifiedTable + N' ORDER BY Id DESC;
SELECT AVG(CONVERT(FLOAT, [Payload])) AS AvgPayload FROM ' + @QualifiedTable + N';';
EXEC @return_status = sp_executesql @SQLCommand;
IF (@LOGLEVEL in ('INFO','WARN','ERROR')) BEGIN
INSERT INTO [TBDD_TEST_PERFORMANCE_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN])
VALUES (@LOGLEVEL, 'query', @FullTable, @return_status, @return_status_text, @MY_PROCEDURE_NAME, GetDate());
END;
END;
-----------------------------------------------------------------------------------------------------------------------------
END TRY BEGIN CATCH
-- Handle any errors that occur during the process.
SELECT @return_status = ERROR_NUMBER(), @return_error_text = ERROR_MESSAGE();
SET @return_status_text = 'ERROR: ' + @return_error_text;
PRINT @return_status_text;
IF ((@LOGLEVEL in ('INFO','WARN','ERROR')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN
INSERT INTO [TBDD_TEST_PERFORMANCE_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN])
VALUES ('ERROR', 'catch', @FullTable, @return_status, @return_status_text, @MY_PROCEDURE_NAME, GetDate());
END;
END CATCH;
-----------------------------------------------------------------------------------------------------------------------------
SET @return_status_text = 'END PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(varchar(50),GETDATE(),120);
--================================================-- Log end to table --===================================================--
IF ((@LOGLEVEL in ('INFO')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN
INSERT INTO [TBDD_TEST_PERFORMANCE_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN])
VALUES (@LOGLEVEL, 'closing', 'procedure', @return_status, @return_status_text, @MY_PROCEDURE_NAME, GetDate());
END;
-----------------------------------------------------------------------------------------------------------------------------
PRINT '';
PRINT @return_status_text;
PRINT '====================================================================================================';
Return @return_status;
END;
GO
-- Example execution:
-- EXEC dbo.PRDD_TEST_PERFORMANCE @pTARGETDB = 'DD_ECM', @pROWCOUNT = 1000000, @pBATCHSIZE = 100000, @pDROPANDRECREATE = 1;

View File

@@ -0,0 +1,35 @@
USE [DD_ECM]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TBEDMI_ITEM_VALUE](
[GUID] [bigint] IDENTITY(1,1) NOT NULL,
[REFERENCE_GUID] [nvarchar](250) NULL,
[ITEM_DESCRIPTION] [nvarchar](250) NULL,
[ITEM_VALUE] [nvarchar](4000) NULL,
[CREATEDWHEN] [datetime] NOT NULL,
[CREATEDWHO] [nvarchar](100) NULL,
[CHANGEDWHEN] [datetime] NULL,
[GROUP_COUNTER] [int] NULL,
[SPEC_NAME] [nvarchar](100) NULL,
[IS_REQUIRED] [bit] NOT NULL,
[CHANGEDWHO] [varchar](100) NULL,
[COMMENT] [varchar](3000) NULL,
CONSTRAINT [PK_TBEDMI_ITEM_VALUE] PRIMARY KEY CLUSTERED
(
[GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TBEDMI_ITEM_VALUE] ADD CONSTRAINT [DF__TBEDMI_IT__CREAT__04EFA97D] DEFAULT (getdate()) FOR [CREATEDWHEN]
GO
ALTER TABLE [dbo].[TBEDMI_ITEM_VALUE] ADD CONSTRAINT [DF__TBEDMI_IT__IS_RE__05E3CDB6] DEFAULT ((0)) FOR [IS_REQUIRED]
GO

View File

@@ -0,0 +1,36 @@
/* ============================================================================
MASTER DEPLOY
Führt die getrennten Deploy-Skripte in korrekter Reihenfolge aus.
WICHTIG:
- Dieses Skript benötigt SQLCMD-Modus (SSMS/ADS).
- Ausführung im gleichen Verzeichnis wie die referenzierten Dateien.
============================================================================ */
:on error exit
PRINT 'Starte Deploy: Schema';
:r "[SCHEMA_META].sql"
PRINT 'Starte Deploy: Tabelle';
:r "[TBDD_CFG_SYSTEM_INFO].sql"
PRINT 'Starte Deploy: Prozeduren';
:r "[TBDD_CFG_SYSTEM_INFO_PROCEDURES].sql"
PRINT 'Starte Deploy: Trigger';
:r "[TBDD_CFG_SYSTEM_INFO_TRIGGER].sql"
PRINT 'Starte Deploy: Tabelle FUNCTION_MODULE';
:r "[TBDD_CFG_FUNCTION_MODULE].sql"
PRINT 'Starte Deploy: Prozeduren FUNCTION_MODULE';
:r "[TBDD_CFG_FUNCTION_MODULE_PROCEDURES].sql"
PRINT 'Starte Deploy: Trigger FUNCTION_MODULE';
:r "[TBDD_CFG_FUNCTION_MODULE_TRIGGER].sql"
PRINT 'Starte Deploy: Security Baseline';
:r "[SECURITY_META_CFG].sql"
PRINT 'Deploy abgeschlossen.';

View File

@@ -0,0 +1,12 @@
/* ============================================================================
META SCHEMA-SKRIPT
============================================================================ */
USE [DD_IIM];
GO
IF SCHEMA_ID(N'_meta') IS NULL
BEGIN
EXEC(N'CREATE SCHEMA [_meta] AUTHORIZATION [dbo];');
END;
GO

View File

@@ -0,0 +1,28 @@
/* ============================================================================
META SECURITY BASELINE
Ziel: Direkte DML auf Konfigurationstabellen unterbinden,
Zugriff über freigegebene Prozeduren steuern.
============================================================================ */
USE [DD_IIM];
GO
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = N'RL_META_CFG_EXEC')
BEGIN
CREATE ROLE [RL_META_CFG_EXEC] AUTHORIZATION [dbo];
END;
GO
DENY INSERT, UPDATE, DELETE ON OBJECT::[_meta].[TBDD_CFG_SYSTEM_INFO] TO [public];
DENY INSERT, UPDATE, DELETE ON OBJECT::[_meta].[TBDD_CFG_FUNCTION_MODULE] TO [public];
GO
GRANT EXECUTE ON OBJECT::[_meta].[PRDD_UPSERT_SYSTEM_INFO] TO [RL_META_CFG_EXEC];
GRANT EXECUTE ON OBJECT::[_meta].[PRDD_DELETE_SYSTEM_INFO] TO [RL_META_CFG_EXEC];
GRANT EXECUTE ON OBJECT::[_meta].[PRDD_UPSERT_FUNCTION_MODULE] TO [RL_META_CFG_EXEC];
GRANT EXECUTE ON OBJECT::[_meta].[PRDD_DELETE_FUNCTION_MODULE] TO [RL_META_CFG_EXEC];
GO
/* Mitgliedschaften projektspezifisch vergeben, z. B.:
ALTER ROLE [RL_META_CFG_EXEC] ADD MEMBER [<AppUserOderRole>];
*/

View File

@@ -0,0 +1,83 @@
USE [DD_IIM]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID(N'_meta.TBDD_CFG_FUNCTION_MODULE', N'U') IS NULL
BEGIN
CREATE TABLE [_meta].[TBDD_CFG_FUNCTION_MODULE]
(
[PK_CFG_FUNCTION_MODULE_ID] [bigint] IDENTITY(1,1) NOT NULL,
[ACTIVE] [bit] NOT NULL,
[INTERNAL] [bit] NOT NULL,
[FUNCTION_NAME] [nvarchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[FUNCTION_TYPE] [nvarchar](10) COLLATE Latin1_General_CI_AS NOT NULL,
[FUNCTION_DEFINITION] [nvarchar](max) COLLATE Latin1_General_CI_AS NOT NULL,
[COMMENT] [nvarchar](500) COLLATE Latin1_General_CI_AS NULL,
[VERSION] [smallint] NOT NULL,
[CREATED_WHO] [bigint] NOT NULL,
[CREATED_WHEN] [datetime2](0) NOT NULL,
[CHANGED_WHO] [bigint] NULL,
[CHANGED_WHEN] [datetime2](0) NULL,
CONSTRAINT [TBDD_CFG_FUNCTION_MODULE_primaryKey] PRIMARY KEY NONCLUSTERED HASH
(
[PK_CFG_FUNCTION_MODULE_ID]
)WITH ( BUCKET_COUNT = 65536)
)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA );
END;
GO
IF NOT EXISTS
(
SELECT 1
FROM sys.default_constraints dc
JOIN sys.columns c
ON c.object_id = dc.parent_object_id
AND c.column_id = dc.parent_column_id
WHERE dc.parent_object_id = OBJECT_ID(N'_meta.TBDD_CFG_FUNCTION_MODULE', N'U')
AND c.name = N'ACTIVE'
)
BEGIN
ALTER TABLE [_meta].[TBDD_CFG_FUNCTION_MODULE]
ADD CONSTRAINT [DF_TBDD_CFG_FUNCTION_MODULE_ACTIVE] DEFAULT ((1)) FOR [ACTIVE];
END;
GO
IF NOT EXISTS
(
SELECT 1
FROM sys.default_constraints dc
JOIN sys.columns c
ON c.object_id = dc.parent_object_id
AND c.column_id = dc.parent_column_id
WHERE dc.parent_object_id = OBJECT_ID(N'_meta.TBDD_CFG_FUNCTION_MODULE', N'U')
AND c.name = N'INTERNAL'
)
BEGIN
ALTER TABLE [_meta].[TBDD_CFG_FUNCTION_MODULE]
ADD CONSTRAINT [DF_TBDD_CFG_FUNCTION_MODULE_INTERNAL] DEFAULT ((0)) FOR [INTERNAL];
END;
GO
IF NOT EXISTS
(
SELECT 1
FROM sys.default_constraints dc
JOIN sys.columns c
ON c.object_id = dc.parent_object_id
AND c.column_id = dc.parent_column_id
WHERE dc.parent_object_id = OBJECT_ID(N'_meta.TBDD_CFG_FUNCTION_MODULE', N'U')
AND c.name = N'VERSION'
)
BEGIN
ALTER TABLE [_meta].[TBDD_CFG_FUNCTION_MODULE]
ADD CONSTRAINT [DF_TBDD_CFG_FUNCTION_MODULE_VERSION] DEFAULT ((1)) FOR [VERSION];
END;
GO

View File

@@ -0,0 +1,207 @@
/* ============================================================================
FUNCTION_MODULE PROZEDUREN
Voraussetzung: Tabelle [_meta].[TBDD_CFG_FUNCTION_MODULE] existiert
============================================================================ */
USE [DD_IIM];
GO
CREATE OR ALTER PROCEDURE [_meta].[PRDD_UPSERT_FUNCTION_MODULE]
@PK_CFG_FUNCTION_MODULE_ID BIGINT = NULL,
@ACTIVE BIT,
@INTERNAL BIT,
@FUNCTION_NAME NVARCHAR(50),
@FUNCTION_TYPE NVARCHAR(10),
@FUNCTION_DEFINITION NVARCHAR(MAX),
@COMMENT NVARCHAR(500) = NULL,
@VERSION SMALLINT = 1,
@CREATED_WHO BIGINT,
@CREATED_WHEN DATETIME2(0),
@CHANGED_WHO BIGINT = NULL,
@CHANGED_WHEN DATETIME2(0) = NULL,
@OUT_PK_CFG_FUNCTION_MODULE_ID BIGINT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @identity_insert_enabled BIT = 0;
DECLARE @next_insert_id BIGINT;
DECLARE @app_lock_result INT;
BEGIN TRY
SET CONTEXT_INFO 0x544244445F46554E4354494F4E5F4D4F44554C45;
IF @PK_CFG_FUNCTION_MODULE_ID IS NOT NULL
BEGIN
UPDATE [_meta].[TBDD_CFG_FUNCTION_MODULE]
SET [ACTIVE] = @ACTIVE,
[INTERNAL] = @INTERNAL,
[FUNCTION_NAME] = @FUNCTION_NAME,
[FUNCTION_TYPE] = @FUNCTION_TYPE,
[FUNCTION_DEFINITION] = @FUNCTION_DEFINITION,
[COMMENT] = @COMMENT,
[VERSION] = @VERSION,
[CHANGED_WHO] = @CHANGED_WHO,
[CHANGED_WHEN] = @CHANGED_WHEN
WHERE [PK_CFG_FUNCTION_MODULE_ID] = @PK_CFG_FUNCTION_MODULE_ID;
IF @@ROWCOUNT = 1
BEGIN
SET @OUT_PK_CFG_FUNCTION_MODULE_ID = @PK_CFG_FUNCTION_MODULE_ID;
END
ELSE
BEGIN
IF @PK_CFG_FUNCTION_MODULE_ID < 100001
BEGIN
THROW 52011, 'Explizite PK_CFG_FUNCTION_MODULE_ID muss >= 100001 sein.', 1;
END;
SET @identity_insert_enabled = 1;
SET IDENTITY_INSERT [_meta].[TBDD_CFG_FUNCTION_MODULE] ON;
INSERT INTO [_meta].[TBDD_CFG_FUNCTION_MODULE]
(
[PK_CFG_FUNCTION_MODULE_ID],
[ACTIVE],
[INTERNAL],
[FUNCTION_NAME],
[FUNCTION_TYPE],
[FUNCTION_DEFINITION],
[COMMENT],
[VERSION],
[CREATED_WHO],
[CREATED_WHEN],
[CHANGED_WHO],
[CHANGED_WHEN]
)
VALUES
(
@PK_CFG_FUNCTION_MODULE_ID,
@ACTIVE,
0,
@FUNCTION_NAME,
@FUNCTION_TYPE,
@FUNCTION_DEFINITION,
@COMMENT,
@VERSION,
@CREATED_WHO,
@CREATED_WHEN,
@CHANGED_WHO,
@CHANGED_WHEN
);
SET IDENTITY_INSERT [_meta].[TBDD_CFG_FUNCTION_MODULE] OFF;
SET @identity_insert_enabled = 0;
SET @OUT_PK_CFG_FUNCTION_MODULE_ID = @PK_CFG_FUNCTION_MODULE_ID;
END;
END
ELSE
BEGIN
EXEC @app_lock_result = sys.sp_getapplock
@Resource = N'_meta.PRDD_UPSERT_FUNCTION_MODULE.IDENTITY_RANGE',
@LockMode = N'Exclusive',
@LockOwner = N'Session',
@LockTimeout = 10000;
IF @app_lock_result < 0
BEGIN
THROW 52010, 'Konnte keine exklusive ID-Sperre für [_meta].[TBDD_CFG_FUNCTION_MODULE] erhalten.', 1;
END;
SELECT @next_insert_id = CASE
WHEN MAX([PK_CFG_FUNCTION_MODULE_ID]) IS NULL OR MAX([PK_CFG_FUNCTION_MODULE_ID]) < 100000 THEN 100001
ELSE MAX([PK_CFG_FUNCTION_MODULE_ID]) + 1
END
FROM [_meta].[TBDD_CFG_FUNCTION_MODULE];
SET @identity_insert_enabled = 1;
SET IDENTITY_INSERT [_meta].[TBDD_CFG_FUNCTION_MODULE] ON;
INSERT INTO [_meta].[TBDD_CFG_FUNCTION_MODULE]
(
[PK_CFG_FUNCTION_MODULE_ID],
[ACTIVE],
[INTERNAL],
[FUNCTION_NAME],
[FUNCTION_TYPE],
[FUNCTION_DEFINITION],
[COMMENT],
[VERSION],
[CREATED_WHO],
[CREATED_WHEN],
[CHANGED_WHO],
[CHANGED_WHEN]
)
VALUES
(
@next_insert_id,
@ACTIVE,
0,
@FUNCTION_NAME,
@FUNCTION_TYPE,
@FUNCTION_DEFINITION,
@COMMENT,
@VERSION,
@CREATED_WHO,
@CREATED_WHEN,
@CHANGED_WHO,
@CHANGED_WHEN
);
SET IDENTITY_INSERT [_meta].[TBDD_CFG_FUNCTION_MODULE] OFF;
SET @identity_insert_enabled = 0;
EXEC sys.sp_releaseapplock
@Resource = N'_meta.PRDD_UPSERT_FUNCTION_MODULE.IDENTITY_RANGE',
@LockOwner = N'Session';
SET @OUT_PK_CFG_FUNCTION_MODULE_ID = @next_insert_id;
END;
SET CONTEXT_INFO 0x00;
END TRY
BEGIN CATCH
IF @identity_insert_enabled = 1
BEGIN
BEGIN TRY
SET IDENTITY_INSERT [_meta].[TBDD_CFG_FUNCTION_MODULE] OFF;
END TRY
BEGIN CATCH
END CATCH
END;
BEGIN TRY
EXEC sys.sp_releaseapplock
@Resource = N'_meta.PRDD_UPSERT_FUNCTION_MODULE.IDENTITY_RANGE',
@LockOwner = N'Session';
END TRY
BEGIN CATCH
END CATCH
SET CONTEXT_INFO 0x00;
THROW;
END CATCH
END;
GO
CREATE OR ALTER PROCEDURE [_meta].[PRDD_DELETE_FUNCTION_MODULE]
@PK_CFG_FUNCTION_MODULE_ID BIGINT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SET CONTEXT_INFO 0x544244445F46554E4354494F4E5F4D4F44554C45;
DELETE FROM [_meta].[TBDD_CFG_FUNCTION_MODULE]
WHERE [PK_CFG_FUNCTION_MODULE_ID] = @PK_CFG_FUNCTION_MODULE_ID;
SET CONTEXT_INFO 0x00;
END TRY
BEGIN CATCH
SET CONTEXT_INFO 0x00;
THROW;
END CATCH
END;
GO

View File

@@ -0,0 +1,58 @@
/* ============================================================================
FUNCTION_MODULE TRIGGER
Voraussetzung: Tabelle [_meta].[TBDD_CFG_FUNCTION_MODULE] und Prozeduren existieren
============================================================================ */
USE [DD_IIM];
GO
CREATE OR ALTER TRIGGER [_meta].[TBDD_CFG_FUNCTION_MODULE_IO_INS]
ON [_meta].[TBDD_CFG_FUNCTION_MODULE]
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AFTER INSERT
AS
BEGIN ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'us_english'
)
IF CONTEXT_INFO() IS NULL OR CONTEXT_INFO() <> 0x544244445F46554E4354494F4E5F4D4F44554C45
BEGIN
THROW 51101, 'Direktes INSERT auf [_meta].[TBDD_CFG_FUNCTION_MODULE] ist nicht erlaubt. Bitte Prozedur [_meta].[PRDD_UPSERT_FUNCTION_MODULE] verwenden.', 1;
END;
END;
GO
CREATE OR ALTER TRIGGER [_meta].[TBDD_CFG_FUNCTION_MODULE_IO_UPD]
ON [_meta].[TBDD_CFG_FUNCTION_MODULE]
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AFTER UPDATE
AS
BEGIN ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'us_english'
)
IF CONTEXT_INFO() IS NULL OR CONTEXT_INFO() <> 0x544244445F46554E4354494F4E5F4D4F44554C45
BEGIN
THROW 51102, 'Direktes UPDATE auf [_meta].[TBDD_CFG_FUNCTION_MODULE] ist nicht erlaubt. Bitte Prozedur [_meta].[PRDD_UPSERT_FUNCTION_MODULE] verwenden.', 1;
END;
END;
GO
CREATE OR ALTER TRIGGER [_meta].[TBDD_CFG_FUNCTION_MODULE_IO_DEL]
ON [_meta].[TBDD_CFG_FUNCTION_MODULE]
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AFTER DELETE
AS
BEGIN ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'us_english'
)
IF CONTEXT_INFO() IS NULL OR CONTEXT_INFO() <> 0x544244445F46554E4354494F4E5F4D4F44554C45
BEGIN
THROW 51103, 'Direktes DELETE auf [_meta].[TBDD_CFG_FUNCTION_MODULE] ist nicht erlaubt. Bitte Prozedur [_meta].[PRDD_DELETE_FUNCTION_MODULE] verwenden.', 1;
END;
END;
GO

View File

@@ -0,0 +1,74 @@
/* ============================================================================
SYSTEM_INFO TABELLEN-SKRIPT
Voraussetzung: Schema [_meta] existiert (siehe [SCHEMA_META].sql)
============================================================================ */
USE [DD_IIM];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRAN;
IF OBJECT_ID(N'_meta.TBDD_CFG_SYSTEM_INFO', N'U') IS NULL
BEGIN
CREATE TABLE [_meta].[TBDD_CFG_SYSTEM_INFO]
(
[PK_CFG_SYSTEM_INFO_ID] BIGINT IDENTITY(1,1) NOT NULL,
[SYSTEM_VERSION] NVARCHAR(50) NOT NULL,
[COMMENT] NVARCHAR(4000) NULL,
[CREATED_WHO] BIGINT NOT NULL,
[CREATED_WHEN] DATETIME2(0) NOT NULL,
[CHANGED_WHO] BIGINT NULL,
[CHANGED_WHEN] DATETIME2(0) NULL
);
END;
IF NOT EXISTS
(
SELECT 1
FROM sys.key_constraints kc
JOIN sys.tables t ON t.object_id = kc.parent_object_id
JOIN sys.schemas s ON s.schema_id = t.schema_id
WHERE s.name = N'_meta'
AND t.name = N'TBDD_CFG_SYSTEM_INFO'
AND kc.type = N'PK'
)
BEGIN
ALTER TABLE [_meta].[TBDD_CFG_SYSTEM_INFO]
ADD CONSTRAINT [PK_CFG_SYSTEM_INFO_ID]
PRIMARY KEY CLUSTERED ([PK_CFG_SYSTEM_INFO_ID]);
END;
IF NOT EXISTS (SELECT 1 FROM [_meta].[TBDD_CFG_SYSTEM_INFO] WITH (HOLDLOCK, UPDLOCK))
BEGIN
INSERT INTO [_meta].[TBDD_CFG_SYSTEM_INFO]
(
[SYSTEM_VERSION],
[COMMENT],
[CREATED_WHO],
[CREATED_WHEN]
)
VALUES
(
N'1.0.0.0',
N'Initiale Anlage',
1,
GETDATE()
);
END;
COMMIT TRAN;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRAN;
DECLARE @msg NVARCHAR(4000) = ERROR_MESSAGE();
DECLARE @num INT = ERROR_NUMBER();
DECLARE @sev INT = ERROR_SEVERITY();
DECLARE @stt INT = ERROR_STATE();
RAISERROR(N'Fehler %d: %s', @sev, @stt, @num, @msg);
END CATCH;
GO

View File

@@ -0,0 +1,139 @@
/* ============================================================================
SYSTEM_INFO PROZEDUREN
Voraussetzung: Tabelle [_meta].[TBDD_CFG_SYSTEM_INFO] existiert
============================================================================ */
USE [DD_IIM];
GO
DROP PROCEDURE IF EXISTS [_meta].[PRDD_INSERT_SYSTEM_INFO];
DROP PROCEDURE IF EXISTS [_meta].[PRDD_UPDATE_SYSTEM_INFO];
GO
CREATE OR ALTER PROCEDURE [_meta].[PRDD_UPSERT_SYSTEM_INFO]
@PK_CFG_SYSTEM_INFO_ID BIGINT = NULL,
@SYSTEM_VERSION NVARCHAR(50),
@COMMENT NVARCHAR(4000) = NULL,
@CREATED_WHO BIGINT,
@CREATED_WHEN DATETIME2(0),
@CHANGED_WHO BIGINT = NULL,
@CHANGED_WHEN DATETIME2(0) = NULL,
@OUT_PK_CFG_SYSTEM_INFO_ID BIGINT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @identity_insert_enabled BIT = 0;
BEGIN TRY
EXEC sys.sp_set_session_context @key = N'_meta_allow_tbdd_system_info_dml', @value = 1;
IF @PK_CFG_SYSTEM_INFO_ID IS NULL
BEGIN
EXEC sys.sp_set_session_context @key = N'_meta_tbdd_system_info_use_input_pk', @value = 0;
INSERT INTO [_meta].[TBDD_CFG_SYSTEM_INFO]
(
[SYSTEM_VERSION],
[COMMENT],
[CREATED_WHO],
[CREATED_WHEN],
[CHANGED_WHO],
[CHANGED_WHEN]
)
VALUES
(
@SYSTEM_VERSION,
@COMMENT,
@CREATED_WHO,
@CREATED_WHEN,
@CHANGED_WHO,
@CHANGED_WHEN
);
SET @OUT_PK_CFG_SYSTEM_INFO_ID = CAST(@@IDENTITY AS BIGINT);
END
ELSE
BEGIN
UPDATE [_meta].[TBDD_CFG_SYSTEM_INFO]
SET [SYSTEM_VERSION] = @SYSTEM_VERSION,
[COMMENT] = @COMMENT,
[CHANGED_WHO] = @CHANGED_WHO,
[CHANGED_WHEN] = @CHANGED_WHEN
WHERE [PK_CFG_SYSTEM_INFO_ID] = @PK_CFG_SYSTEM_INFO_ID;
IF @@ROWCOUNT = 0
BEGIN
SET @identity_insert_enabled = 1;
EXEC sys.sp_set_session_context @key = N'_meta_tbdd_system_info_use_input_pk', @value = 1;
SET IDENTITY_INSERT [_meta].[TBDD_CFG_SYSTEM_INFO] ON;
INSERT INTO [_meta].[TBDD_CFG_SYSTEM_INFO]
(
[PK_CFG_SYSTEM_INFO_ID],
[SYSTEM_VERSION],
[COMMENT],
[CREATED_WHO],
[CREATED_WHEN],
[CHANGED_WHO],
[CHANGED_WHEN]
)
VALUES
(
@PK_CFG_SYSTEM_INFO_ID,
@SYSTEM_VERSION,
@COMMENT,
@CREATED_WHO,
@CREATED_WHEN,
@CHANGED_WHO,
@CHANGED_WHEN
);
SET IDENTITY_INSERT [_meta].[TBDD_CFG_SYSTEM_INFO] OFF;
SET @identity_insert_enabled = 0;
EXEC sys.sp_set_session_context @key = N'_meta_tbdd_system_info_use_input_pk', @value = 0;
END;
SET @OUT_PK_CFG_SYSTEM_INFO_ID = @PK_CFG_SYSTEM_INFO_ID;
END;
EXEC sys.sp_set_session_context @key = N'_meta_tbdd_system_info_use_input_pk', @value = NULL;
EXEC sys.sp_set_session_context @key = N'_meta_allow_tbdd_system_info_dml', @value = NULL;
END TRY
BEGIN CATCH
IF @identity_insert_enabled = 1
BEGIN
BEGIN TRY
SET IDENTITY_INSERT [_meta].[TBDD_CFG_SYSTEM_INFO] OFF;
END TRY
BEGIN CATCH
END CATCH
END;
EXEC sys.sp_set_session_context @key = N'_meta_tbdd_system_info_use_input_pk', @value = NULL;
EXEC sys.sp_set_session_context @key = N'_meta_allow_tbdd_system_info_dml', @value = NULL;
THROW;
END CATCH
END;
GO
CREATE OR ALTER PROCEDURE [_meta].[PRDD_DELETE_SYSTEM_INFO]
@PK_CFG_SYSTEM_INFO_ID BIGINT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
EXEC sys.sp_set_session_context @key = N'_meta_allow_tbdd_system_info_dml', @value = 1;
DELETE FROM [_meta].[TBDD_CFG_SYSTEM_INFO]
WHERE [PK_CFG_SYSTEM_INFO_ID] = @PK_CFG_SYSTEM_INFO_ID;
EXEC sys.sp_set_session_context @key = N'_meta_allow_tbdd_system_info_dml', @value = NULL;
END TRY
BEGIN CATCH
EXEC sys.sp_set_session_context @key = N'_meta_allow_tbdd_system_info_dml', @value = NULL;
THROW;
END CATCH
END;
GO

View File

@@ -0,0 +1,114 @@
/* ============================================================================
SYSTEM_INFO TRIGGER
Voraussetzung: Tabelle [_meta].[TBDD_CFG_SYSTEM_INFO] und Prozeduren existieren
============================================================================ */
USE [DD_IIM];
GO
CREATE OR ALTER TRIGGER [_meta].[TBDD_CFG_SYSTEM_INFO_IO_INS]
ON [_meta].[TBDD_CFG_SYSTEM_INFO]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
IF TRY_CAST(SESSION_CONTEXT(N'_meta_allow_tbdd_system_info_dml') AS bit) = 1
BEGIN
IF TRY_CAST(SESSION_CONTEXT(N'_meta_tbdd_system_info_use_input_pk') AS bit) = 1
BEGIN
INSERT INTO [_meta].[TBDD_CFG_SYSTEM_INFO]
(
[PK_CFG_SYSTEM_INFO_ID],
[SYSTEM_VERSION],
[COMMENT],
[CREATED_WHO],
[CREATED_WHEN],
[CHANGED_WHO],
[CHANGED_WHEN]
)
SELECT
i.[PK_CFG_SYSTEM_INFO_ID],
i.[SYSTEM_VERSION],
i.[COMMENT],
i.[CREATED_WHO],
i.[CREATED_WHEN],
i.[CHANGED_WHO],
i.[CHANGED_WHEN]
FROM inserted i;
END
ELSE
BEGIN
INSERT INTO [_meta].[TBDD_CFG_SYSTEM_INFO]
(
[SYSTEM_VERSION],
[COMMENT],
[CREATED_WHO],
[CREATED_WHEN],
[CHANGED_WHO],
[CHANGED_WHEN]
)
SELECT
i.[SYSTEM_VERSION],
i.[COMMENT],
i.[CREATED_WHO],
i.[CREATED_WHEN],
i.[CHANGED_WHO],
i.[CHANGED_WHEN]
FROM inserted i;
END;
RETURN;
END;
THROW 51001, 'Direktes INSERT auf [_meta].[TBDD_CFG_SYSTEM_INFO] ist nicht erlaubt. Bitte Prozedur [_meta].[PRDD_UPSERT_SYSTEM_INFO] verwenden.', 1;
END;
GO
CREATE OR ALTER TRIGGER [_meta].[TBDD_CFG_SYSTEM_INFO_IO_UPD]
ON [_meta].[TBDD_CFG_SYSTEM_INFO]
INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF TRY_CAST(SESSION_CONTEXT(N'_meta_allow_tbdd_system_info_dml') AS bit) = 1
BEGIN
UPDATE t
SET t.[SYSTEM_VERSION] = i.[SYSTEM_VERSION],
t.[COMMENT] = i.[COMMENT],
t.[CREATED_WHO] = i.[CREATED_WHO],
t.[CREATED_WHEN] = i.[CREATED_WHEN],
t.[CHANGED_WHO] = i.[CHANGED_WHO],
t.[CHANGED_WHEN] = i.[CHANGED_WHEN]
FROM [_meta].[TBDD_CFG_SYSTEM_INFO] t
JOIN inserted i
ON i.[PK_CFG_SYSTEM_INFO_ID] = t.[PK_CFG_SYSTEM_INFO_ID];
RETURN;
END;
THROW 51002, 'Direktes UPDATE auf [_meta].[TBDD_CFG_SYSTEM_INFO] ist nicht erlaubt. Bitte Prozedur [_meta].[PRDD_UPSERT_SYSTEM_INFO] verwenden.', 1;
END;
GO
CREATE OR ALTER TRIGGER [_meta].[TBDD_CFG_SYSTEM_INFO_IO_DEL]
ON [_meta].[TBDD_CFG_SYSTEM_INFO]
INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
IF TRY_CAST(SESSION_CONTEXT(N'_meta_allow_tbdd_system_info_dml') AS bit) = 1
BEGIN
DELETE t
FROM [_meta].[TBDD_CFG_SYSTEM_INFO] t
JOIN deleted d
ON d.[PK_CFG_SYSTEM_INFO_ID] = t.[PK_CFG_SYSTEM_INFO_ID];
RETURN;
END;
THROW 51003, 'Direktes DELETE auf [_meta].[TBDD_CFG_SYSTEM_INFO] ist nicht erlaubt. Bitte Prozedur [_meta].[PRDD_DELETE_SYSTEM_INFO] verwenden.', 1;
END;
GO

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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.

View File

@@ -26,7 +26,7 @@ GO
-- 26.03.2025 / MK - First Version
CREATE OR ALTER PROCEDURE [dbo].[PRDD_GET_DATABASE_DEADLOCK](
pKILL_DEADLOCK_SESSIONS BIT = NULL
@pKILL_DEADLOCK_SESSIONS BIT = NULL
)
AS
BEGIN

View File

@@ -0,0 +1,47 @@
use [DD_ECM]
go
create view [VWCUST_WINLINE_EMAIL_OUT_DD_CWLDATEN_DDVP]
as
SELECT
--[mesokey]
--,[c000]
--,[c001]
--,[c002]
--,[c003]
--,[c004]
--,[c005]
--,[c006]
--,[c007]
--,[c008]
--,[c009]
'invoice-flow@digitaldata.works' as 'E-Mail-From'
,[c010] as 'E-Mail-To'
,SUBSTRING(convert(VARCHAR(100),[c010]),(charindex('<',convert(VARCHAR(100),[c010]),0)+1),(charindex('>',convert(VARCHAR(100),[c010]),0)-(charindex('<',convert(VARCHAR(100),[c010]),0)+1))) as 'E-Mail-To_clean'
,RTRIM(LTRIM([c016])) as 'E-Mail-Subject'
,convert(date,[c012]) as 'E-Mail-Date'
--,[c013]
--,[c014]
--,[c015]
--,[c017]
--,[c018]
--,[c019]
--,[c020]
--,[c021]
--,[c022]
--,[c023]
--,[c024]
--,[c025]
--,[c026]
--,[c027]
--,[c028]
--,[c029]
--,[c030]
--,[c031]
--,[c032]
--,[c033]
--,[mesobin]
--,[mesocomp]
--,[mesoyear]
--,[ts]
FROM [DD_CWLDATEN_DDVP].[dbo].[T190]