8
0

The complete folder structure has been changed or updated

This commit is contained in:
2025-09-19 18:24:40 +02:00
parent 796473a8c9
commit 1f0d1613a5
216 changed files with 330971 additions and 809 deletions

View File

@@ -0,0 +1,150 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [FNDD_CONVERT_RTF2TEXT]
-- =================================================================
-- Converts a RTF text to a regular text
--
-- Returns: NVARCHAR - text
-- =================================================================
-- 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: 26.09.2024 / HE,MK
-- Version Date / Editor: 25.03.2025 / HE,MK
-- Version Number: 1.2.0.0
-- =================================================================
-- History:
-- 26.09.2024 / HE,MK - First Version
-- 14.12.2024 / MK - code optimisation, new additional parameters
-- 25.03.2025 / HE,MK - Remove rtf format strings
CREATE OR ALTER FUNCTION [dbo].[FNDD_CONVERT_RTF2TEXT](
@pRTF nvarchar(max), -- Give the RTF text, you want to convert
@pREMOVE_LINE_WRAP BIT = NULL, -- Set to 1 to remove line wraps
@pREMOVE_DOUBLE_BLANKS BIT = NULL -- Set to 1 to remove unnecessary blanks
)
RETURNS nvarchar(max)
AS
BEGIN
-- decalare new vars because of parameter sniffing
DECLARE @RTF NVARCHAR(max) = ISNULL(@pRTF,''),
@REMOVE_LINE_WRAP BIT = ISNULL(@pREMOVE_LINE_WRAP,1),
@REMOVE_DOUBLE_BLANKS BIT = ISNULL(@pREMOVE_DOUBLE_BLANKS,1);
-- decalare runtime vars
DECLARE @Pos1 int,
@Pos2 int,
@hex varchar(316);
DECLARE @Stage table ([Char] char(1), [Pos] int);
IF (LEN(@RTF) > 1) BEGIN
INSERT @Stage ([Char], [Pos])
SELECT SUBSTRING(@rtf, [Number], 1),
[Number]
FROM [master]..[spt_values]
WHERE ([Type] = 'p')
AND (SUBSTRING(@rtf, Number, 1) IN ('{', '}'));
SELECT @Pos1 = MIN([Pos])
, @Pos2 = MAX([Pos])
FROM @Stage;
DELETE
FROM @Stage
WHERE ([Pos] IN (@Pos1, @Pos2));
WHILE (1 = 1) BEGIN
SELECT TOP 1 @Pos1 = s1.[Pos]
, @Pos2 = s2.[Pos]
FROM @Stage s1
INNER JOIN @Stage s2 ON s2.[Pos] > s1.[Pos]
WHERE (s1.[Char] = '{')
AND (s2.[Char] = '}')
ORDER BY s2.[Pos] - s1.[Pos];
IF @@ROWCOUNT = 0
BREAK
DELETE
FROM @Stage
WHERE ([Pos] IN (@Pos1, @Pos2));
UPDATE @Stage
SET [Pos] = [Pos] - @Pos2 + @Pos1 - 1
WHERE ([Pos] > @Pos2);
SET @rtf = STUFF(@rtf, @Pos1, @Pos2 - @Pos1 + 1, '');
END;
SET @rtf = REPLACE(@rtf, '\pard', '');
SET @rtf = REPLACE(@rtf, '\par', '');
SET @rtf = STUFF(@rtf, 1, CHARINDEX(' ', @rtf), '');
WHILE (Right(@rtf, 1) IN (' ', CHAR(13), CHAR(10), '}')) BEGIN
SELECT @rtf = SUBSTRING(@rtf, 1, (LEN(@rtf + 'x') - 2));
IF LEN(@rtf) = 0 BREAK
END;
SET @Pos1 = CHARINDEX('\''', @rtf);
WHILE (@Pos1 > 0) BEGIN
IF (@Pos1 > 0) BEGIN
SET @hex = '0x' + SUBSTRING(@rtf, @Pos1 + 2, 2);
SET @rtf = REPLACE(@rtf, SUBSTRING(@rtf, @Pos1, 4),CHAR(CONVERT(int, CONVERT (binary(1), @hex,1))));
SET @Pos1 = CHARINDEX('\''', @rtf);
END;
END;
SET @rtf = @rtf + ' ';
SET @Pos1 = PATINDEX('%\%[0123456789][\ ]%', @rtf);
WHILE (@Pos1 > 0) BEGIN
SET @Pos2 = CHARINDEX(' ', @rtf, @Pos1 + 1);
IF (@Pos2 < @Pos1) BEGIN
SET @Pos2 = CHARINDEX('\', @rtf, @Pos1 + 1);
END;
IF (@Pos2 < @Pos1) BEGIN
SET @rtf = SUBSTRING(@rtf, 1, @Pos1 - 1);
SET @Pos1 = 0;
END; ELSE BEGIN
SET @rtf = STUFF(@rtf, @Pos1, @Pos2 - @Pos1 + 1, '');
SET @Pos1 = PATINDEX('%\%[0123456789][\ ]%', @rtf);
END;
END;
IF (@REMOVE_LINE_WRAP = 1) BEGIN
SET @rtf = REPLACE(@rtf,char(10),' ');
SET @rtf = REPLACE(@rtf,char(13),' ');
END;
IF (@REMOVE_DOUBLE_BLANKS = 1) BEGIN
WHILE (@rtf like '% %') BEGIN
IF (@rtf like '% %') BEGIN
SET @rtf = REPLACE(@rtf,' ',' ');
END;
END;
END;
-- Anyway remove trailing spaces
SET @rtf = LTRIM(RTRIM(@rtf));
-- Replace rtf format strings
SET @rtf = Replace(@rtf,'Riched20 10.0.17763} ','');
END;
RETURN @rtf;
END;

View File

@@ -0,0 +1,109 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [FNDD_GET_LICENSE_COUNT]
-- =================================================================
-- Reads the table [TBDD_USER_LOGIN_OUT] for used licenses
--
-- Returns: An integer value
-- =================================================================
-- 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: 13.06.2023 / MS
-- Version Date / Editor: 15.09.2025 / MK
-- Version Number: 2.0.0.0
-- =================================================================
-- History:
-- 13.06.2023 / MS - First Version
-- 15.09.2025 / MK - Enhanced functionality and parameters
CREATE OR ALTER FUNCTION [dbo].[FNDD_GET_LICENSE_COUNT](
@pCLIENT_ID TINYINT, -- Give the mandator ID from [TBDD_CLIENT] or 0, for all mandators.
@pMODULE_ID TINYINT, -- Give the module ID from [TBDD_MODULES] the get the module name.
@pLOOKBACK_IN_DAYS SMALLINT -- Give the timespan you want to monitor in the past.
-- By giving 0, function will check sql table [TBDD_CATALOG] for global variables: <MODULE_NAME>_LICENSE_LOOKBACK_IN_DAYS.
-- Failsafe value is 90 days.
)
RETURNS INTEGER
AS
BEGIN
-- declare new vars because of parameter sniffing
DECLARE @CLIENT_ID TINYINT = @pCLIENT_ID,
@MODULE_ID TINYINT = @pMODULE_ID,
@LOOKBACK_IN_DAYS SMALLINT = @pLOOKBACK_IN_DAYS;
-- declare runtime vars
DECLARE @USED_LICENSE_COUNT INTEGER = 0,
@MODULE_NAME NVARCHAR(50) = NULL,
@MODULE_SHORT_NAME NVARCHAR(50) = NULL,
@CATALOG_TITLE_TERM NVARCHAR(50) = '_LICENSE_LOOKBACK_IN_DAYS';
--=================================================-- Get module name --===================================================--
SELECT @MODULE_NAME = [NAME],
@MODULE_SHORT_NAME = [SHORT_NAME]
FROM [TBDD_MODULES] (NOLOCK)
WHERE [GUID] = @MODULE_ID AND [ACTIVE] = 1;
-----------------------------------------------------------------------------------------------------------------------------
--===========================================-- Exit because of missing data --============================================--
IF (LEN(@MODULE_NAME) = 0) AND (LEN(@MODULE_SHORT_NAME) = 0) BEGIN
RETURN ISNULL(@USED_LICENSE_COUNT,0);
END;
-----------------------------------------------------------------------------------------------------------------------------
--===================================-- Determ how long in the past we need to check --===================================--
IF (@LOOKBACK_IN_DAYS = 0) BEGIN
IF (EXISTS (SELECT * FROM [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_NAME] = 'TBDD_CATALOG')) BEGIN
SELECT TOP (1) @LOOKBACK_IN_DAYS = CONVERT(INTEGER,[CAT_STRING])
FROM [TBDD_CATALOG] (NOLOCK)
WHERE [CAT_TITLE] IN (CONCAT(@MODULE_NAME,@CATALOG_TITLE_TERM),CONCAT(@MODULE_SHORT_NAME,@CATALOG_TITLE_TERM));
END;
IF ((@LOOKBACK_IN_DAYS is null) or (@LOOKBACK_IN_DAYS = 0)) BEGIN -- Failsafe is 90 days
SET @LOOKBACK_IN_DAYS = 90;
END;
END;
-----------------------------------------------------------------------------------------------------------------------------
--===========================================-- Exit because of missing table --===========================================--
IF NOT (EXISTS (SELECT * FROM [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_NAME] = 'TBDD_USER_LOGIN_OUT')) BEGIN
RETURN ISNULL(@USED_LICENSE_COUNT,0);
END;
-----------------------------------------------------------------------------------------------------------------------------
--=====================================================-- main part --=====================================================--
IF (@CLIENT_ID = 0) BEGIN
SET @USED_LICENSE_COUNT = (SELECT COUNT(DISTINCT [USER_ID])
FROM [TBDD_USER_LOGIN_OUT] (NOLOCK)
WHERE LEN([MACHINE_NAME]) > 0
AND [CLIENT_ID] IS NOT NULL
AND [MODULE] IN (@MODULE_NAME,@MODULE_SHORT_NAME)
AND CONVERT(DATE,[LOGIN]) BETWEEN DATEADD(DAY, (@LOOKBACK_IN_DAYS*(-1)), GETDATE()) AND GETDATE());
END; ELSE BEGIN
SET @USED_LICENSE_COUNT = (SELECT COUNT(DISTINCT [USER_ID])
FROM [TBDD_USER_LOGIN_OUT] (NOLOCK)
WHERE LEN([MACHINE_NAME]) > 0
AND [CLIENT_ID] = @CLIENT_ID
AND [MODULE] IN (@MODULE_NAME,@MODULE_SHORT_NAME)
AND CONVERT(DATE,[LOGIN]) BETWEEN DATEADD(DAY, (@LOOKBACK_IN_DAYS*(-1)), GETDATE()) AND GETDATE());
END;
-----------------------------------------------------------------------------------------------------------------------------
--===============================================-- Returning final count --===============================================--
RETURN ISNULL(@USED_LICENSE_COUNT,0);
-----------------------------------------------------------------------------------------------------------------------------
END;
GO

View File

@@ -0,0 +1,36 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [FNDD_GET_WINDREAM_CHOICELIST_ITEMS]
-- =================================================================
-- Reads the windream database choice list and gives the
-- choice list items
--
-- Returns: Table (1 column)
-- =================================================================
-- Copyright (c) 2024 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: 13.12.2024 / MK
-- Version Date / Editor: 23.04.2025 / HE, MK
-- Version Number: 1.1.0.0
-- =================================================================
-- History:
-- 13.12.2024 / MK - First Version
-- 23.04.2025 / HE, MK - Adding Support for other data types
CREATE OR ALTER FUNCTION [dbo].[FNDD_GET_WINDREAM_CHOICELIST_ITEMS] (
@szListName NVARCHAR(255)
)
RETURNS TABLE
AS
RETURN
SELECT TOP (100) PERCENT COALESCE([szValue],CONVERT(NVARCHAR,[dwValue]),CONVERT(NVARCHAR,[decValue]),CONVERT(NVARCHAR,[blValue]),CONVERT(NVARCHAR,[lfValue])) as 'Auswahlliste'
FROM [windreamDB].[dbo].[ChoiceListItem]
WHERE [dwChoiceListID] = (SELECT [dwChoiceListID] FROM [windreamDB].[dbo].[ChoiceList] WHERE [szListName] = @szListName)
ORDER BY [dwValueOrdNr] ASC

View File

@@ -0,0 +1,104 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [FNDD_GET_WINDREAM_USER_DATA]
-- =================================================================
-- Reads the windream and maybe digitaldata database
-- to give you user infos including the group affiliation.
--
-- Returns: Table
-- =================================================================
-- 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: 10.06.2025 / MK
-- Version Date / Editor: 10.06.2025 / MK
-- Version Number: 1.0.0.0
-- =================================================================
-- History:
-- 10.06.2025 / MK - First Version
CREATE OR ALTER FUNCTION [FNDD_GET_WINDREAM_USER_DATA] (
@pWindreamUsername NVARCHAR(255), -- Give windream username
@pISSyncedWithDD BIT, -- 1 = Check of user is in digitaldata db as well; 0 = Check only windream db
@pIncludeGroup NVARCHAR(500), -- Substring (LIKE Operator!) for groups you want to include in the result
@pExcludeGroup NVARCHAR(500) -- Substring (LIKE Operator!) for groups you want to exclude in the result
)
RETURNS @USER_DATA TABLE ([GUID] [bigint] IDENTITY(1,1) NOT NULL,
[szNTDomain] [NVARCHAR] (255) NOT NULL,
[szUserName] [NVARCHAR] (255) NOT NULL,
[szUserFullName] [NVARCHAR] (255) NOT NULL,
[szMailAddress] [NVARCHAR] (255) NULL,
[szGroupName] [NVARCHAR] (255) NOT NULL)
AS
BEGIN
-- declare new vars because of parameter sniffing
DECLARE @WindreamUsername NVARCHAR(255) = UPPER(LTRIM(RTRIM(@pWindreamUsername))),
@ISSyncedWithDD BIT = @pISSyncedWithDD,
@IncludeGroup NVARCHAR(500) = UPPER(LTRIM(RTRIM(@pIncludeGroup))),
@ExcludeGroup NVARCHAR(500) = UPPER(LTRIM(RTRIM(@pExcludeGroup)))
-- Give user infos if user is in windream db
IF (@ISSyncedWithDD = 0) BEGIN
INSERT INTO @USER_DATA( [szNTDomain], [szUserName], [szUserFullName], [szMailAddress], [szGroupName])
SELECT DISTINCT [wdUI].[szNTDomain], [wdUI].[szUserName], [wdUI].[szUserFullName], [wdUI].[szMailAddress], [wdGI].[szGroupName]
FROM [windreamDB].[dbo].[UserInfo] as [wdUI] (NOLOCK)
INNER JOIN [windreamDB].[dbo].[UserGroup] as [wdU2G] (NOLOCK) ON [wdUI].[dwUserID] = [wdU2G].[dwUserOrGroupID]
INNER JOIN [windreamDB].[dbo].[GroupInfo] as [wdGI] (NOLOCK) ON [wdU2G].[dwGroupID] = [wdGI].[dwGroupID]
WHERE UPPER([wdUI].[szUserName]) = @WindreamUsername
AND [wdGI].[szGroupName] LIKE '%' + ISNULL(@IncludeGroup,'_') + '%'
AND [wdGI].[szGroupName] NOT LIKE '%' + ISNULL(@ExcludeGroup,'$!dummy_value!$') + '%';
-- Give user infos if user is in windream and digitaldata db
END; ELSE IF (@ISSyncedWithDD = 1) BEGIN
INSERT INTO @USER_DATA( [szNTDomain], [szUserName], [szUserFullName], [szMailAddress], [szGroupName])
SELECT DISTINCT [wdUI].[szNTDomain], [wdUI].[szUserName], [wdUI].[szUserFullName], [wdUI].[szMailAddress], [wdGI].[szGroupName]
FROM [windreamDB].[dbo].[UserInfo] as [wdUI] (NOLOCK)
INNER JOIN [windreamDB].[dbo].[UserGroup] as [wdU2G] (NOLOCK) ON [wdUI].[dwUserID] = [wdU2G].[dwUserOrGroupID]
INNER JOIN [windreamDB].[dbo].[GroupInfo] as [wdGI] (NOLOCK) ON [wdU2G].[dwGroupID] = [wdGI].[dwGroupID]
INNER JOIN [DD_ECM].[dbo].[TBDD_USER] as [ddUI] (NOLOCK) ON [wdUI].[dwUserID] = [ddUI].[USERID_FK_INT_ECM]
INNER JOIN [DD_ECM].[dbo].[TBDD_GROUPS_USER] as [ddU2G] (NOLOCK) ON [ddUI].[GUID] = [ddU2G].[USER_ID]
INNER JOIN [DD_ECM].[dbo].[TBDD_GROUPS] as [ddGI] (NOLOCK) ON [ddU2G].[GROUP_ID] = [ddGI].[GUID]
WHERE UPPER([wdUI].[szUserName]) = @WindreamUsername
AND [wdGI].[szGroupName] LIKE '%' + ISNULL(@IncludeGroup,'_') + '%'
AND [wdGI].[szGroupName] NOT LIKE '%' + ISNULL(@ExcludeGroup,'$!dummy_value!$') + '%';
END;
RETURN;
END;
----------------------------------------------------------------------------------------------------------------------------------
-- Example call
-- SELECT * FROM [FNDD_GET_WINDREAM_USER_DATA]('IIMAdmin',0,'Admin','User')
----------------------------------------------------------------------------------------------------------------------------------
-- OLD ONE
--SELECT concat([wdGI].[szNTDomain],'\',[wdGI].[szGroupName]) as 'RightGroups'
--FROM [windreamDB].[dbo].[BaseAttributes] as [wdBA] (NOLOCK)
--INNER JOIN [windreamDB].[dbo].[UserInfo] as [wdUI] (NOLOCK) ON UPPER([wdBA].[szText22]) = UPPER([wdUI].[szUserName]) -- Username for UserID
--INNER JOIN [windreamDB].[dbo].[UserGroup] as [wdU2G] (NOLOCK) ON [wdUI].[dwUserID] = [wdU2G].[dwUserOrGroupID] -- UserID for GroupsID
--INNER JOIN [windreamDB].[dbo].[GroupInfo] as [wdGI] (NOLOCK) ON [wdU2G].[dwGroupID] = [wdGI].[dwGroupID] -- GroupIDs for Groupnames
--INNER JOIN [DD_ECM].[dbo].[TBDD_USER] as [ddUI] (NOLOCK) ON [wdUI].[dwUserID] = [ddUI].[USERID_FK_INT_ECM] -- windream UserID to DD UserID
--INNER JOIN [DD_ECM].[dbo].[TBDD_GROUPS_USER] as [ddU2G] (NOLOCK) ON [ddUI].[GUID] = [ddU2G].[USER_ID] -- UserID for GroupsID
--INNER JOIN [DD_ECM].[dbo].[TBDD_GROUPS] as [ddGI] (NOLOCK) ON [ddU2G].[GROUP_ID] = [ddGI].[GUID] -- GroupIDs for Groupnames
--WHERE UPPER([wdGI].[szGroupName]) = UPPER([ddGI].[NAME])
-- AND [wdBA].[dwDocID] = @pWindreamUsername
-- AND [wdGI].[szGroupName] LIKE '%' + ISNULL(@pIncludeGroup,'_') + '%'
-- AND [wdGI].[szGroupName] NOT LIKE '%' + ISNULL(@pExcludeGroup,'') + '%'

View File

@@ -0,0 +1,435 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [PRDD_GET_TRANSLATED_CHOICELIST]
-- =================================================================
-- Replaces placeholders like "%term%" to a translated term
-- for the choise list column header.
--
-- 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: 19.09.2025 / MK
-- Version Date / Editor: 19.09.2025 / MK
-- Version Number: 1.0.0.0
-- =================================================================
-- History:
-- 19.09.2025 / MK - First Version
CREATE OR ALTER PROCEDURE [dbo].[PRDD_GET_TRANSLATED_CHOICELIST]
@pSOURCE_QUERY NVARCHAR(2000),
@pLANGUAGE NVARCHAR(5)
AS
BEGIN TRY
SET NOCOUNT ON;
-- declare new vars because of parameter sniffing
DECLARE @SOURCE_QUERY NVARCHAR(2000) = LTRIM(RTRIM(ISNULL(@pSOURCE_QUERY,''))),
@LANGUAGE NVARCHAR(5) = UPPER(LTRIM(RTRIM(ISNULL(@pLANGUAGE,'DE-de'))));
DECLARE @vTB_DICTIONARY TABLE ([GUID] [BIGINT] IDENTITY(1,1) NOT NULL,
[LANGUAGE] [NVARCHAR](5) NOT NULL,
[TERM] [NVARCHAR](150) NOT NULL,
[TRANSLATION] [NVARCHAR](150) NOT NULL);
-- declare runtime vars
DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID);
DECLARE @TERM NVARCHAR(150),
@TRANSLATION NVARCHAR(150),
@PERCENT_COUNT TINYINT = 0,
@RETURN_STATUS NVARCHAR(50) = 0,
@RETURN_STATUS_TEXT NVARCHAR(MAX) = 'START [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(varchar(50),GETDATE(),120),
@RETURN_ERROR_TEXT NVARCHAR(MAX) = '';
PRINT '====================================================================================================';
PRINT 'PROCEDURE - ' + @return_status_text;
PRINT 'PARAMETER01 - @SOURCE_QUERY: ' + CONVERT(NVARCHAR(50),@SOURCE_QUERY);
PRINT 'PARAMETER02 - @LANGUAGE: ' + CONVERT(NVARCHAR(50),@LANGUAGE);
--===============================================-- Common translations --=================================================--
IF (@LANGUAGE IN ('DE-DE','DE_DE')) BEGIN
INSERT INTO @vTB_DICTIONARY([LANGUAGE],[TERM],[TRANSLATION])
SELECT 'DE-de','id','ID'
UNION ALL
SELECT 'DE-de','selection','Auswahl'
UNION ALL
SELECT 'DE-de','result','Ergebnis'
UNION ALL
SELECT 'DE-de','description','Beschreibung'
UNION ALL
SELECT 'DE-de','customer','Kunde'
UNION ALL
SELECT 'DE-de','vendor','Lieferant'
UNION ALL
SELECT 'DE-de','number','Nummer'
UNION ALL
SELECT 'DE-de','payment','Zahlung'
UNION ALL
SELECT 'DE-de','flag','Kennzeichen'
UNION ALL
SELECT 'DE-de','street','Straße'
UNION ALL
SELECT 'DE-de','city','Ort'
UNION ALL
SELECT 'DE-de','postal code','Postleitzahl'
UNION ALL
SELECT 'DE-de','zip code','PLZ'
UNION ALL
SELECT 'DE-de','user','Benutzer'
UNION ALL
SELECT 'DE-de','group','Gruppe'
UNION ALL
SELECT 'DE-de','VAT-ID','Umsatzsteuer-ID'
UNION ALL
SELECT 'DE-de','accounting','Kontierung'
UNION ALL
SELECT 'DE-de','history','Historie'
UNION ALL
SELECT 'DE-de','item','Artikel'
UNION ALL
SELECT 'DE-de','head','Kopf'
UNION ALL
SELECT 'DE-de','account','Konto'
UNION ALL
SELECT 'DE-de','date','Datum'
UNION ALL
SELECT 'DE-de','quantity','Menge'
UNION ALL
SELECT 'DE-de','amount','Betrag'
UNION ALL
SELECT 'DE-de','discount','Rabatt'
UNION ALL
SELECT 'DE-de','charge','Gebühr'
UNION ALL
SELECT 'DE-de','fee','Gebühr'
UNION ALL
SELECT 'DE-de','rate','Rate'
UNION ALL
SELECT 'DE-de','confirmed','Bestätigt'
UNION ALL
SELECT 'DE-de','rejected','Abgelehnt'
UNION ALL
SELECT 'DE-de','document','Dokument'
UNION ALL
SELECT 'DE-de','documents','Dokumente'
UNION ALL
SELECT 'DE-de','approval','Freigabe'
UNION ALL
SELECT 'DE-de','approvals','Freigaben'
UNION ALL
SELECT 'DE-de','creditor','Kreditor'
UNION ALL
SELECT 'DE-de','no','Nr'
UNION ALL
SELECT 'DE-de','name','Name'
END; ELSE IF (@LANGUAGE IN ('FR-fr','FR_fr')) BEGIN
INSERT INTO @vTB_DICTIONARY([LANGUAGE],[TERM],[TRANSLATION])
SELECT 'FR-fr','id','ID'
UNION ALL
SELECT 'FR-fr','selection','Sélection'
UNION ALL
SELECT 'FR-fr','result','Résultat'
UNION ALL
SELECT 'FR-fr','description','Description'
UNION ALL
SELECT 'FR-fr','customer','Client'
UNION ALL
SELECT 'FR-fr','vendor','Fournisseur'
UNION ALL
SELECT 'FR-fr','number','Numéro'
UNION ALL
SELECT 'FR-fr','payment','Paiement'
UNION ALL
SELECT 'FR-fr','flag','Plaque d'+ char(39) +'immatriculation'
UNION ALL
SELECT 'FR-fr','street','Rue'
UNION ALL
SELECT 'FR-fr','city','Ville'
UNION ALL
SELECT 'FR-fr','postal code','Code postal'
UNION ALL
SELECT 'FR-fr','zip code','CP'
UNION ALL
SELECT 'FR-fr','user','Utilisateur'
UNION ALL
SELECT 'FR-fr','group','Groupe'
UNION ALL
SELECT 'FR-fr','VAT-ID','Numéro d' + char(39) + 'identification fiscale'
UNION ALL
SELECT 'FR-fr','accounting','Imputation'
UNION ALL
SELECT 'FR-fr','history','Historique'
UNION ALL
SELECT 'FR-fr','item','Article'
UNION ALL
SELECT 'FR-fr','head','En-tête'
UNION ALL
SELECT 'FR-fr','account','Compte'
UNION ALL
SELECT 'FR-fr','date','Date'
UNION ALL
SELECT 'FR-fr','quantity','Quantité'
UNION ALL
SELECT 'FR-fr','amount','Montant'
UNION ALL
SELECT 'FR-fr','discount','Remise'
UNION ALL
SELECT 'FR-fr','charge','Frais'
UNION ALL
SELECT 'FR-fr','fee','Frais'
UNION ALL
SELECT 'FR-fr','rate','Taux'
UNION ALL
SELECT 'FR-fr','confirmed','Confirmé'
UNION ALL
SELECT 'FR-fr','rejected','Refusé'
UNION ALL
SELECT 'FR-fr','document','Document'
UNION ALL
SELECT 'FR-fr','documents','Documents'
UNION ALL
SELECT 'FR-fr','approval','Validation'
UNION ALL
SELECT 'FR-fr','approvals','Validations'
UNION ALL
SELECT 'FR-fr','creditor','Créditer'
UNION ALL
SELECT 'FR-fr','No','No'
UNION ALL
SELECT 'FR-fr','Name','Nom'
END;
-----------------------------------------------------------------------------------------------------------------------------
--=============================================-- Replace term placeholder --==============================================--
DECLARE CURSOR_REPLACE_TERMS CURSOR STATIC LOCAL FOR
SELECT [TERM], [TRANSLATION]
FROM @vTB_DICTIONARY
WHERE UPPER([LANGUAGE]) IN (REPLACE(@LANGUAGE,'-','_'),REPLACE(@LANGUAGE,'_','-'));
OPEN CURSOR_REPLACE_TERMS
FETCH NEXT FROM CURSOR_REPLACE_TERMS INTO @TERM, @TRANSLATION;
WHILE @@FETCH_STATUS = 0 BEGIN
BEGIN
PRINT 'Replacing Term: ' + @TERM + ', with translation: ' + @TRANSLATION;
SET @SOURCE_QUERY = REPLACE(@SOURCE_QUERY,concat('%',@TERM,'%'),@TRANSLATION);
END;
FETCH NEXT FROM CURSOR_REPLACE_TERMS INTO @TERM, @TRANSLATION;
END;
CLOSE CURSOR_REPLACE_TERMS;
DEALLOCATE CURSOR_REPLACE_TERMS;
-----------------------------------------------------------------------------------------------------------------------------
--==============================================-- Additional ressource 1 --===============================================--
IF (@SOURCE_QUERY LIKE '%%%') BEGIN
PRINT 'Found further terms for replacement!';
SET @PERCENT_COUNT = (SELECT LEN(@SOURCE_QUERY) - LEN(REPLACE(@SOURCE_QUERY,'%','')));
IF (@PERCENT_COUNT % 2 = 0) BEGIN
PRINT 'There are an even amount of "%" found!';
IF EXISTS (SELECT * FROM [INFORMATION_SCHEMA].[TABLES] WHERE TABLE_NAME = N'TBDD_TRANSLATED_CHOICELIST_COLUMNS') BEGIN
PRINT 'Getting additional ressources from [TBDD_TRANSLATED_CHOICELIST_COLUMNS]';
IF ((SELECT COUNT(*) FROM @vTB_DICTIONARY) = 0) BEGIN
PRINT 'Query additional source table';
DELETE FROM @vTB_DICTIONARY;
INSERT INTO @vTB_DICTIONARY([LANGUAGE],[TERM],[TRANSLATION])
SELECT @LANGUAGE, [TERM],[TRANSLATION]
FROM [TBDD_TRANSLATED_CHOICELIST_COLUMNS] WITH (SNAPSHOT)
WHERE UPPER([LANGUAGE]) IN (REPLACE(@LANGUAGE,'-','_'),REPLACE(@LANGUAGE,'_','-'));
--=============================================-- Replace term placeholder --==============================================--
DECLARE CURSOR_REPLACE_TERMS CURSOR STATIC LOCAL FOR
SELECT [TERM], [TRANSLATION]
FROM @vTB_DICTIONARY
WHERE UPPER([LANGUAGE]) IN (REPLACE(@LANGUAGE,'-','_'),REPLACE(@LANGUAGE,'_','-'));
OPEN CURSOR_REPLACE_TERMS
FETCH NEXT FROM CURSOR_REPLACE_TERMS INTO @TERM, @TRANSLATION;
WHILE @@FETCH_STATUS = 0 BEGIN
BEGIN
PRINT 'Replacing Term: ' + @TERM + ', with translation: ' + @TRANSLATION;
SET @SOURCE_QUERY = REPLACE(@SOURCE_QUERY,concat('%',@TERM,'%'),@TRANSLATION);
END;
FETCH NEXT FROM CURSOR_REPLACE_TERMS INTO @TERM, @TRANSLATION;
END;
CLOSE CURSOR_REPLACE_TERMS;
DEALLOCATE CURSOR_REPLACE_TERMS;
-----------------------------------------------------------------------------------------------------------------------------
END; ELSE BEGIN
PRINT 'No content in additional source table!';
END;
END; ELSE BEGIN
PRINT 'Additional ressources table [TBDD_TRANSLATED_CHOICELIST_COLUMNS] not found!';
END;
END; ELSE BEGIN
PRINT 'There are an odd amount of "%" found!';
END;
END; ELSE BEGIN
PRINT 'No further terms for replacement found!';
END;
-----------------------------------------------------------------------------------------------------------------------------
--==============================================-- Additional ressource 2 --===============================================--
IF (@SOURCE_QUERY LIKE '%%%') BEGIN
PRINT 'Found further terms for replacement!';
SET @PERCENT_COUNT = (SELECT LEN(@SOURCE_QUERY) - LEN(REPLACE(@SOURCE_QUERY,'%','')));
IF (@PERCENT_COUNT % 2 = 0) BEGIN
PRINT 'There are an even amount of "%" found!';
IF EXISTS (SELECT * FROM [INFORMATION_SCHEMA].[TABLES] WHERE TABLE_NAME = N'TBDD_GUI_LANGUAGE_PHRASE') BEGIN
PRINT 'Getting additional ressources from [TBDD_GUI_LANGUAGE_PHRASE]';
IF ((SELECT COUNT(*) FROM @vTB_DICTIONARY) = 0) BEGIN
PRINT 'Query additional source table';
DELETE FROM @vTB_DICTIONARY;
INSERT INTO @vTB_DICTIONARY([LANGUAGE],[TERM],[TRANSLATION])
SELECT @LANGUAGE, [TITLE] as [TERM], [STRING1] as[TRANSLATION]
FROM [TBDD_GUI_LANGUAGE_PHRASE] (NOLOCK)
WHERE UPPER([LANGUAGE]) IN (REPLACE(@LANGUAGE,'-','_'),REPLACE(@LANGUAGE,'_','-'));
--=============================================-- Replace term placeholder --==============================================--
DECLARE CURSOR_REPLACE_TERMS CURSOR STATIC LOCAL FOR
SELECT [TERM], [TRANSLATION]
FROM @vTB_DICTIONARY
WHERE UPPER([LANGUAGE]) IN (REPLACE(@LANGUAGE,'-','_'),REPLACE(@LANGUAGE,'_','-'));
OPEN CURSOR_REPLACE_TERMS
FETCH NEXT FROM CURSOR_REPLACE_TERMS INTO @TERM, @TRANSLATION;
WHILE @@FETCH_STATUS = 0 BEGIN
BEGIN
PRINT 'Replacing Term: ' + @TERM + ', with translation: ' + @TRANSLATION;
SET @SOURCE_QUERY = REPLACE(@SOURCE_QUERY,concat('%',@TERM,'%'),@TRANSLATION);
END;
FETCH NEXT FROM CURSOR_REPLACE_TERMS INTO @TERM, @TRANSLATION;
END;
CLOSE CURSOR_REPLACE_TERMS;
DEALLOCATE CURSOR_REPLACE_TERMS;
-----------------------------------------------------------------------------------------------------------------------------
END; ELSE BEGIN
PRINT 'No content in additional source table!';
END;
END; ELSE BEGIN
PRINT 'Additional ressources table [TBDD_GUI_LANGUAGE_PHRASE] not found!';
END;
END; ELSE BEGIN
PRINT 'There are an odd amount of "%" found!';
END;
END; ELSE BEGIN
PRINT 'No further terms for replacement found!';
END;
-----------------------------------------------------------------------------------------------------------------------------
--=========================================-- Default language will not resolved --========================================--
IF (@LANGUAGE IN ('EN-EN','EN_EN','EN-US','EN_US')) BEGIN
IF (@SOURCE_QUERY LIKE '%%%') BEGIN
PRINT 'Found default terms to replace only the "%"!';
SET @PERCENT_COUNT = (SELECT LEN(@SOURCE_QUERY) - LEN(REPLACE(@SOURCE_QUERY,'%','')));
IF (@PERCENT_COUNT % 2 = 0) BEGIN
PRINT 'There are an even amount of "%" found!';
SET @SOURCE_QUERY = REPLACE(@SOURCE_QUERY,'%','');
END; ELSE BEGIN
PRINT 'There are an odd amount of "%" found!';
END;
END; ELSE BEGIN
PRINT 'No further terms for replacement found!';
END;
END;
-----------------------------------------------------------------------------------------------------------------------------
--===================================================-- Final steps --=====================================================--
SET @SOURCE_QUERY = REPLACE(@SOURCE_QUERY,'@LANGUAGE',@LANGUAGE);
PRINT @SOURCE_QUERY;
EXECUTE sp_executesql @SOURCE_QUERY;
-----------------------------------------------------------------------------------------------------------------------------
--======================================================-- Output result --======================================================--
SET @RETURN_STATUS = 0;
SET @RETURN_STATUS_TEXT = concat('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120));
SET @RETURN_ERROR_TEXT = concat('','');
PRINT '' + char(13) + @RETURN_STATUS_TEXT;
PRINT '====================================================================================================';
-----------------------------------------------------------------------------------------------------------------------------------
RETURN @RETURN_STATUS;
END TRY BEGIN CATCH
--======================================================-- Output result --======================================================--
SET @RETURN_STATUS = CASE WHEN @RETURN_STATUS > 50000 THEN @RETURN_STATUS ELSE 50000 END;
SET @RETURN_STATUS_TEXT = concat('END [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120));
SET @RETURN_ERROR_TEXT = concat('ERROR MESSAGE: ',CONVERT(NVARCHAR(500),ERROR_MESSAGE()));
PRINT '' + char(13) + 'ERROR IN PROCEDURE: [' + @MY_PROCEDURE_NAME + ']' + char(13) + @RETURN_ERROR_TEXT;
PRINT '' + char(13) + 'PROCEDURE - ' + @RETURN_STATUS_TEXT;
PRINT '====================================================================================================';
-----------------------------------------------------------------------------------------------------------------------------------
RETURN @RETURN_STATUS;
END CATCH;
---- Example call:
---- EXEC [dbo].[PRDD_GET_TRANSLATED_CHOICELIST]
---- @pSOURCE_QUERY = N'SELECT [ID] as ''%ID%'',[DESCRIPTION] as ''%DESCRIPTION%'' from [FNCUST_TF_GET_PAYMENT_METHODE](''@LANGUAGE'')',
---- @pLANGUAGE = N'de-de'
---- GO

View File

@@ -0,0 +1,101 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [PRDD_MOVE_USER_LOGIN_OUT_TO_ARCHIVE]
-- =================================================================
-- Reads the table [TBDD_USER_LOGIN_OUT] for used licenses
--
-- Returns: An integer value
-- =================================================================
-- 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: 16.09.2025 / MK
-- Version Date / Editor: 16.09.2025 / MK
-- Version Number: 1.0.0.0
-- =================================================================
-- History:
-- 16.09.2025 / MS - First Version
CREATE OR ALTER PROCEDURE [dbo].[PRDD_MOVE_USER_LOGIN_OUT_TO_ARCHIVE](
@pCLIENT_ID INTEGER, -- Give the mandator ID from [TBDD_CLIENT] or 0, for all mandators.
@pMODULE_ID INTEGER, -- Give the module ID from [TBDD_MODULES] the get the module name.
@pLOOKBACK_IN_DAYS SMALLINT -- Give the timespan you want to monitor in the past.
-- By giving 0, function will check sql table [TBDD_CATALOG] for global variables: <MODULE_NAME>_LICENSE_LOOKBACK_IN_DAYS.
-- Failsafe value is 90 days.
)
RETURNS INTEGER
AS
BEGIN
-- declare new vars because of parameter sniffing
DECLARE @CLIENT_ID INTEGER = @pCLIENT_ID,
@MODULE_ID INTEGER = @pMODULE_ID,
@LOOKBACK_IN_DAYS SMALLINT = @pLOOKBACK_I[F[DF_TBDD_USER_LOGIN_OUT_STATISTICS_ADDED_WHO]K_TBDD_USER_LOGIN_OUT_HISTORY_TBDD_CLIENT][FK_TBDD_USER_LOGIN_OUT_STATISTICS_TBDD_MODULES]N[FK_TBDD_USER_LOGIN_OUT_STATISTICS_TBDD_CLIENT]_DAYS;
-- declare runtime vars
DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID);
DECLARE @USED_LICENSE_COUNT INTEGER = 0,
@MODULE_NAME NVARCHAR(50) = NULL,
@MODULE_SHORT_NAME NVARCHAR(50) = NULL,
@CATALOG_TITLE_TERM NVARCHAR(50) = '_LICENSE_LOOKBACK_IN_DAYS';
--=================================================-- Get module name --===================================================--
SELECT @MODULE_NAME = [NAME],
@MODULE_SHORT_NAME = [SHORT_NAME]
FROM [TBDD_MODULES] (NOLOCK)
WHERE [GUID] = @MODULE_ID AND [ACTIVE] = 1;
-----------------------------------------------------------------------------------------------------------------------------
--===========================================-- Exit because of missing data --============================================--
IF (LEN(@MODULE_NAME) = 0) AND (LEN(@MODULE_SHORT_NAME) = 0) BEGIN
RETURN ISNULL(@USED_LICENSE_COUNT,0);
END;
-----------------------------------------------------------------------------------------------------------------------------
--===================================-- Determ how long in the past we need to check --===================================--
IF (@LOOKBACK_IN_DAYS = 0) BEGIN
SELECT TOP (1) @LOOKBACK_IN_DAYS = CONVERT(INTEGER,[CAT_STRING])
FROM [TBDD_CATALOG] (NOLOCK)
WHERE [CAT_TITLE] IN (CONCAT(@MODULE_NAME,@CATALOG_TITLE_TERM),CONCAT(@MODULE_SHORT_NAME,@CATALOG_TITLE_TERM));
IF ((@LOOKBACK_IN_DAYS is null) or (@LOOKBACK_IN_DAYS = 0)) BEGIN -- Failsafe is 90 days
SET @LOOKBACK_IN_DAYS = 90;
END;
END;
-----------------------------------------------------------------------------------------------------------------------------
--=====================================================-- main part --=====================================================--
IF (@CLIENT_ID = 0) BEGIN
SET @USED_LICENSE_COUNT = (SELECT COUNT(DISTINCT [USER_ID])
FROM [TBDD_USER_LOGIN_OUT] (NOLOCK)
WHERE LEN([MACHINE_NAME]) > 0
AND [CLIENT_ID] IS NOT NULL
AND [MODULE] IN (@MODULE_NAME,@MODULE_SHORT_NAME)
AND CONVERT(DATE,[LOGIN]) BETWEEN DATEADD(DAY, (@LOOKBACK_IN_DAYS*(-1)), GETDATE()) AND GETDATE());
END; ELSE BEGIN
SET @USED_LICENSE_COUNT = (SELECT COUNT(DISTINCT [USER_ID])
FROM [TBDD_USER_LOGIN_OUT] (NOLOCK)
WHERE LEN([MACHINE_NAME]) > 0
AND [CLIENT_ID] = @CLIENT_ID
AND [MODULE] IN (@MODULE_NAME,@MODULE_SHORT_NAME)
AND CONVERT(DATE,[LOGIN]) BETWEEN DATEADD(DAY, (@LOOKBACK_IN_DAYS*(-1)), GETDATE()) AND GETDATE());
END;
-----------------------------------------------------------------------------------------------------------------------------
--===============================================-- Returning final count --===============================================--
RETURN ISNULL(@USED_LICENSE_COUNT,0);
-----------------------------------------------------------------------------------------------------------------------------
END
GO

View File

@@ -0,0 +1,285 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [PRDD_SET_STATUS_IN_THIRDPARTY_DB]
-- =================================================================
-- Set status info into a text field
--
-- Returns: 1 = SUCCESS; 0 = FAILED
-- =================================================================
-- 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: 25.11.2024 / HE,MK
-- Version Date / Editor: 28.03.2025 / MK
-- Version Number: 1.1.1.0
-- =================================================================
-- History:
-- 25.11.2024 / HE,MK - First Version
-- 14.12.2024 / MK - @MyProcedureName variable implemented, Failsafe for parameters implemented
-- 28.03.2025 / MK - Result value set to success when duplicate detected
CREATE OR ALTER PROCEDURE [PRDD_SET_STATUS_IN_THIRDPARTY_DB](
@pTARGET_DB NVARCHAR(256) = '[DD_CWLDATEN_DDVP]', -- Give target DB name (without schema!)
@pTARGET_SCHEMA NVARCHAR(256) = '[dbo]', -- Give target DB schema
@pTARGET_TABLE NVARCHAR(256) = '[t025]', -- Give target DB table
@pTARGET_COLUMN NVARCHAR(256) = '[c069]', -- Give target DB column
@pTARGET_COLUMN_TYPE NVARCHAR(256) = 'NVARCHAR', -- Give target DB column type eg. INT or NVARCHAR
@pREF_DOC_TYPE NVARCHAR(256) = 'Ausgangsrechnung', -- Give REF_DOC_TYPE, eg.: Ausgangsangebot, Ausgangsauftrag, Ausgangslieferschein, Ausgangsrechnung (ONLY FOR LOGGING PURPOSE!)
@pREF_DOC_NR_COLUMN NVARCHAR(256) = '[c055]', -- Give the column where the REF_DOC_NR is stored (eg. WINLINE: Ausgangsangebot=[c043], Ausgangsauftrag=[c044], Ausgangslieferschein=[c045], Ausgangsrechnung=[c055])
@pREF_DOC_NR NVARCHAR(256), -- Give REF_DOC_NR, like 'ARE-20234187' or 'AANG-20241060'
@pADDITIONAL_WHERE NVARCHAR(256) = '', -- Give an additional WHERE clause like ' AND [COLUMN] IS NOT NULL'
@pSTATUS_VALUE NVARCHAR(256), -- Give text to write in @pTARGET_COLUMN
@pSTATUS_VALUE_MAX_LEN INT = 60, -- Give the max lenght of the target field for the status text
@pSTATUS_VALUE_DELIMITER NVARCHAR(3) = '; ', -- Give the separator to concat multiple status values, like "Text1; Text2; ..."
@pUSERNAME NVARCHAR(50), -- Give the user of the Frontend call, for the logging
@pOVERWRITE BIT = 0, -- Set overwrite for @pTARGET_COLUMN: 0 = concat; 1 = overwrite
@pLOGLEVEL NVARCHAR(25) = 'ERROR' -- Set Loglevel (ERROR or INFO) to be written to table [TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG]
)
AS
BEGIN TRY
SET NOCOUNT ON;
-- decalare new vars because of parameter sniffing
DECLARE @TARGET_DB NVARCHAR(256) = ISNULL(@pTARGET_DB,''),
@TARGET_SCHEMA NVARCHAR(256) = ISNULL(@pTARGET_SCHEMA,''),
@TARGET_TABLE NVARCHAR(256) = ISNULL(@pTARGET_TABLE,''),
@TARGET_COLUMN NVARCHAR(256) = ISNULL(@pTARGET_COLUMN,''),
@TARGET_COLUMN_TYPE NVARCHAR(256) = ISNULL(@pTARGET_COLUMN_TYPE,'NVARCHAR'),
@REF_DOC_TYPE NVARCHAR(256) = ISNULL(@pREF_DOC_TYPE,''),
@REF_DOC_NR_COLUMN NVARCHAR(256) = ISNULL(@pREF_DOC_NR_COLUMN,''),
@REF_DOC_NR NVARCHAR(256) = ISNULL(@pREF_DOC_NR,''),
@ADDITIONAL_WHERE NVARCHAR(256) = ISNULL(@pADDITIONAL_WHERE,''),
@STATUS_VALUE NVARCHAR(256) = ISNULL(@pSTATUS_VALUE,''),
@STATUS_VALUE_MAX_LEN INT = ISNULL(@pSTATUS_VALUE_MAX_LEN,60),
@STATUS_VALUE_DELIMITER NVARCHAR(3) = ISNULL(@pSTATUS_VALUE_DELIMITER,'; '),
@USERNAME NVARCHAR(50) = ISNULL(@pUSERNAME,LEFT(OBJECT_NAME(@@PROCID),50)),
@OVERWRITE BIT = ISNULL(@pOVERWRITE,0),
@LOGLEVEL NVARCHAR(25) = ISNULL(@pLOGLEVEL,'ERROR');
-- decalare runtime vars
DECLARE @MyProcedureName NVARCHAR(128) = OBJECT_NAME(@@PROCID);
DECLARE @LINE_COUNT_1 INT = 0,
@LINE_COUNT_2 INT = 0,
@SQL_COMMAND NVARCHAR(2000) = NULL,
@STATUS_VALUE_OLD NVARCHAR(256) = NULL,
@RETURN_STATUS NVARCHAR(256) = NULL,
@RETURN_STATUS_VALUE NVARCHAR(256) = 'START ' + @MyProcedureName + ' @ ' + CONVERT(varchar(50),GETDATE(),120);
PRINT '==============================='
PRINT 'PROCEDURE - ' + @RETURN_STATUS_VALUE;
PRINT 'PARAMETER01 - @TARGET_DB: ' + CONVERT(NVARCHAR(256),@TARGET_DB);
PRINT 'PARAMETER02 - @TARGET_SCHEMA: ' + CONVERT(NVARCHAR(256),@TARGET_SCHEMA);
PRINT 'PARAMETER03 - @TARGET_TABLE: ' + CONVERT(NVARCHAR(256),@TARGET_TABLE);
PRINT 'PARAMETER04 - @TARGET_COLUMN: ' + CONVERT(NVARCHAR(256),@TARGET_COLUMN);
PRINT 'PARAMETER05 - @TARGET_COLUMN_TYPE: ' + CONVERT(NVARCHAR(256),@TARGET_COLUMN_TYPE);
PRINT 'PARAMETER06 - @REF_DOC_TYPE: ' + CONVERT(NVARCHAR(256),@REF_DOC_TYPE);
PRINT 'PARAMETER07 - @REF_DOC_NR_COLUMN ' + CONVERT(NVARCHAR(256),@REF_DOC_NR_COLUMN);
PRINT 'PARAMETER08 - @REF_DOC_NR: ' + CONVERT(NVARCHAR(256),@REF_DOC_NR);
PRINT 'PARAMETER09 - @ADDITIONAL_WHERE ' + CONVERT(NVARCHAR(256),@ADDITIONAL_WHERE);
PRINT 'PARAMETER10 - @STATUS_VALUE: ' + CONVERT(NVARCHAR(256),@STATUS_VALUE);
PRINT 'PARAMETER11 - @STATUS_VALUE_MAX_LEN ' + CONVERT(NVARCHAR(256),@STATUS_VALUE_MAX_LEN);
PRINT 'PARAMETER12 - @STATUS_VALUE_DELIMITER ' + CONVERT(NVARCHAR(3),@STATUS_VALUE_DELIMITER);
PRINT 'PARAMETER13 - @USERNAME: ' + CONVERT(NVARCHAR(50),@USERNAME);
PRINT 'PARAMETER14 - @OVERWRITE: ' + CONVERT(NVARCHAR(1),@OVERWRITE);
PRINT 'PARAMETER15 - @LOGLEVEL: ' + CONVERT(NVARCHAR(25),@LOGLEVEL);
--==============================================-- Prepare the log table --================================================--
IF (@LOGLEVEL is not NULL) BEGIN
PRINT '';
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG') BEGIN
PRINT 'Log table already exists';
END; ELSE BEGIN
PRINT 'Log table does not exists, trying to create...';
CREATE TABLE [dbo].[TBDD_SET_STATUS_IN_THIRDPARTY_DB_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_SET_STATUS_IN_THIRDPARTY_DB_LOG] PRIMARY KEY CLUSTERED
(
[GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];
ALTER TABLE [dbo].[TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG] ADD CONSTRAINT [DF_TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO];
ALTER TABLE [dbo].[TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG] ADD CONSTRAINT [DF_TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN];
END;
END;
-----------------------------------------------------------------------------------------------------------------------------
--=====================================================-- main part --=====================================================--
PRINT 'Check if there is a valid target...'
SET @SQL_COMMAND = N'SELECT @LINE_COUNT_1 = count(*)
FROM ' + @TARGET_DB + '.' + @TARGET_SCHEMA + '.' + @TARGET_TABLE + '
WHERE ' + @REF_DOC_NR_COLUMN + ' = ''' + @REF_DOC_NR + ''' ' + @ADDITIONAL_WHERE;
PRINT 'Build Query @SQL_COMMAND: ' + @SQL_COMMAND;
EXEC @RETURN_STATUS = sp_executesql @SQL_COMMAND,N'@LINE_COUNT_1 INT OUTPUT', @LINE_COUNT_1 OUTPUT;
IF (@RETURN_STATUS = 0) BEGIN
IF (@LINE_COUNT_1 > 0) BEGIN
PRINT 'Found: ' + CONVERT(NVARCHAR(25),@LINE_COUNT_1) + ' docs to update!';
PRINT 'Checking if docs have a existing "status text"';
SET @SQL_COMMAND = N'SELECT @LINE_COUNT_2 = count(*)
FROM ' + @TARGET_DB + '.' + @TARGET_SCHEMA + '.' + @TARGET_TABLE + '
WHERE ' + @REF_DOC_NR_COLUMN + ' = ''' + @REF_DOC_NR + '''
AND (' + @TARGET_COLUMN + ' = ''' + @STATUS_VALUE + '''
OR ' + @TARGET_COLUMN + ' LIKE ''%' + @STATUS_VALUE + '''
OR ' + @TARGET_COLUMN + ' LIKE ''' + @STATUS_VALUE + '%''
OR ' + @TARGET_COLUMN + ' LIKE ''%' + @STATUS_VALUE + '%'') '
+ @ADDITIONAL_WHERE;
PRINT 'Build "status text" Query @SQL_COMMAND: ' + @SQL_COMMAND;
EXEC @RETURN_STATUS = sp_executesql @SQL_COMMAND,N'@LINE_COUNT_2 INT OUTPUT', @LINE_COUNT_2 OUTPUT;
IF (@RETURN_STATUS = 0) BEGIN
PRINT 'Query was successful!';
PRINT 'Found: ' + CONVERT(NVARCHAR(25),@LINE_COUNT_2) + ' docs with the status text duplicate!';
IF (@LINE_COUNT_2 > 0) BEGIN
PRINT 'Given status text is already there, no update needed!';
SET @RETURN_STATUS = 0;
END; ELSE BEGIN
PRINT 'Given status text is not there, update needed!';
IF ((@OVERWRITE = 0) and (@LINE_COUNT_1 > 0)) BEGIN
SET @SQL_COMMAND = N'SELECT TOP 1 @STATUS_VALUE_OLD = ' + @TARGET_COLUMN + '
FROM ' + @TARGET_DB + '.' + @TARGET_SCHEMA + '.' + @TARGET_TABLE + '
WHERE ' + @REF_DOC_NR_COLUMN + ' = ''' + @REF_DOC_NR + '''
AND ' + @TARGET_COLUMN + ' IS NOT NULL
AND ' + @TARGET_COLUMN + ' <> '''' '
+ @ADDITIONAL_WHERE;
PRINT 'Build "status text" Query for existing values @SQL_COMMAND: ' + @SQL_COMMAND;
PRINT 'Found: ' + CONVERT(NVARCHAR(25),@LINE_COUNT_1) + ' docs with a existing status text!';
EXEC @RETURN_STATUS = sp_executesql @SQL_COMMAND,N'@STATUS_VALUE_OLD NVARCHAR(256) OUTPUT', @STATUS_VALUE_OLD OUTPUT;
IF ((@RETURN_STATUS = 0)) BEGIN
PRINT 'Query was successful!';
IF (@STATUS_VALUE_OLD <> @STATUS_VALUE) BEGIN
PRINT 'Extending status text';
SET @STATUS_VALUE = concat(@STATUS_VALUE_OLD,@STATUS_VALUE_DELIMITER,@STATUS_VALUE);
END;
SET @STATUS_VALUE = CASE WHEN LEFT(@STATUS_VALUE,2) = @STATUS_VALUE_DELIMITER
THEN SUBSTRING(@STATUS_VALUE, 2, LEN(@STATUS_VALUE)-2)
ELSE @STATUS_VALUE
END;
END; ELSE BEGIN
PRINT 'Query has failed!';
PRINT '@STATUS_VALUE keeps untouched!';
END;
END; ELSE IF ((@OVERWRITE = 1) or (@LINE_COUNT_1 = 0)) BEGIN
PRINT 'Overwrite is enabled and or no doc with existing status text found!';
END;
--===========================================-- data collected updating row --=============================================--
-- Check STATUS TEXT for its lenght
SET @STATUS_VALUE = LTRIM(RTRIM(convert(NVARCHAR(MAX),@STATUS_VALUE)))
IF (LEN(@STATUS_VALUE) > @STATUS_VALUE_MAX_LEN) BEGIN
SET @STATUS_VALUE = LEFT(@STATUS_VALUE,@STATUS_VALUE_MAX_LEN);
END;
SET @SQL_COMMAND = N'SET NOCOUNT ON; UPDATE ' + @TARGET_DB + '.' + @TARGET_SCHEMA + '.' + @TARGET_TABLE + ' ';
IF (@TARGET_COLUMN_TYPE LIKE '%INT%') BEGIN
SET @STATUS_VALUE = convert(INT,@STATUS_VALUE);
SET @SQL_COMMAND += ' SET ' + @TARGET_COLUMN + ' = ' + @STATUS_VALUE;
END; ELSE BEGIN
-- NVARCHAR is always the failsafe
SET @SQL_COMMAND += ' SET ' + @TARGET_COLUMN + ' = ''' + @STATUS_VALUE + '''';
END;
SET @SQL_COMMAND += ' WHERE ' + @REF_DOC_NR_COLUMN + ' = ''' + @REF_DOC_NR + ''' ' + @ADDITIONAL_WHERE;
PRINT 'Build Update @SQL_COMMAND: ' + @SQL_COMMAND;
EXEC @RETURN_STATUS = sp_executesql @SQL_COMMAND;
IF (@RETURN_STATUS = 0) BEGIN
PRINT 'Update was successful!';
SET @RETURN_STATUS = 1;
END; ELSE BEGIN
PRINT 'Update has failed!';
PRINT '@RETURN_STATUS: ' + CONVERT(NVARCHAR(50),@RETURN_STATUS);
END;
-----------------------------------------------------------------------------------------------------------------------------
END;
END; ELSE BEGIN
PRINT 'Query has failed!';
SET @RETURN_STATUS = 0;
END;
END; ELSE BEGIN
PRINT 'No doc were found!';
SET @RETURN_STATUS = 0;
END;
END; ELSE BEGIN
PRINT 'Error at dynamic SQL!';
SET @RETURN_STATUS = 0;
END;
-----------------------------------------------------------------------------------------------------------------------------
IF (@RETURN_STATUS = 1) BEGIN
SET @RETURN_STATUS_VALUE = 'SUCCESS';
END; ELSE BEGIN
SET @RETURN_STATUS_VALUE = 'FAILED';
END;
PRINT '';
PRINT 'PROCEDURE Result: ' + @RETURN_STATUS_VALUE;
PRINT 'PROCEDURE - END ' + @MyProcedureName + ' @ ' + CONVERT(NVARCHAR(50),GETDATE(),120);
PRINT '===============================';
--==============================================-- Log result to table --===============================================--
IF (@LOGLEVEL in ('INFO','WARN')) BEGIN
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG') BEGIN
INSERT INTO [TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [MESSAGE5], [ADDED_WHO], [ADDED_WHEN])
VALUES (@LOGLEVEL, concat(@TARGET_DB,'.',@TARGET_SCHEMA,'.',@TARGET_TABLE,'.',@TARGET_COLUMN), concat(@REF_DOC_TYPE,' - Nr: ',@REF_DOC_NR), @STATUS_VALUE, 'OVERWRITE = ' + convert(varchar,@OVERWRITE), @RETURN_STATUS_VALUE, @USERNAME ,GetDate());
END;
END;
-----------------------------------------------------------------------------------------------------------------------------
RETURN @RETURN_STATUS; -- Because of the target index in windream!
END TRY
BEGIN CATCH
-- Handle any errors that occur during the process.
SELECT ERROR_MESSAGE() AS ErrorMessage;
--================================================-- Log error to table --=================================================--
IF (@LOGLEVEL in ('INFO','WARN','ERROR')) BEGIN
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG') BEGIN
INSERT INTO [TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [MESSAGE5], [ADDED_WHO], [ADDED_WHEN])
VALUES ('ERROR', concat(@TARGET_DB,'.',@TARGET_SCHEMA,'.',@TARGET_TABLE,'.',@TARGET_COLUMN), concat(@REF_DOC_TYPE,' - Nr: ',@REF_DOC_NR), @STATUS_VALUE, 'OVERWRITE = ' + convert(NVARCHAR,@OVERWRITE), ERROR_MESSAGE(), @USERNAME, GetDate());
END;
END;
-----------------------------------------------------------------------------------------------------------------------------
PRINT '';
PRINT 'PROCEDURE Result: ERROR! ' + ERROR_MESSAGE();
PRINT 'PROCEDURE - END ' + @MyProcedureName + ' @ ' + CONVERT(varchar(50),GETDATE(),120);
PRINT '===============================';
RETURN 0; -- Because of the target index in windream!
END CATCH;
GO