Projektstand 30.03.2026
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
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
|
||||
);
|
||||
|
||||
/***
|
||||
-- Test
|
||||
|
||||
SELECT * from dbo.[FNCUST_GET_EDMI_ITEM_VALUE] ('ERw202602090942454286171lfelsburg','INVOICE_TAXPOS_RATE')
|
||||
|
||||
***/
|
||||
Reference in New Issue
Block a user