FNCUST_GET_JSON_INVOICE_DATA: Erste Tabellenfunktion
This commit is contained in:
@@ -3,13 +3,15 @@ GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
-- [PRCUST_SET_JSON_INVOICE_DATA]
|
||||
-- [FNCUST_GET_JSON_INVOICE_DATA]
|
||||
-- =================================================================
|
||||
-- Reads invoice data from relational tables and returns a normalized
|
||||
-- JSON response matching the CreateInvoice_Request structure.
|
||||
--
|
||||
-- Parameter: @DocumentID INT = NULL (NULL = alle Dokumente)
|
||||
-- Returns: RESULTSET; success/message/data
|
||||
-- Returns: TABLE (success BIT, message NVARCHAR(MAX), data NVARCHAR(MAX))
|
||||
-- Usage: SELECT * FROM dbo.FNCUST_GET_JSON_INVOICE_DATA(NULL)
|
||||
-- SELECT * FROM dbo.FNCUST_GET_JSON_INVOICE_DATA(42)
|
||||
-- =================================================================
|
||||
-- Copyright (c) 2026 by Digital Data GmbH
|
||||
--
|
||||
@@ -18,79 +20,40 @@ GO
|
||||
-- =================================================================
|
||||
-- Creation Date / Author: 26.02.2026 / MK
|
||||
-- Version Date / Editor: 26.02.2026 / MK
|
||||
-- Version Number: 2.0.0.0
|
||||
-- Version Number: 3.0.0.0
|
||||
-- =================================================================
|
||||
-- History:
|
||||
-- 26.02.2026 / MK - Initial version based on JSON invoice import
|
||||
-- 26.02.2026 / MK - Style harmonized to PRDEX convention
|
||||
-- 26.02.2026 / MK - #3 CAST(NULL AS NVARCHAR(MAX)) for consistent data type
|
||||
-- 26.02.2026 / MK - #4 RETURN @RETURN_STATUS for proper return codes
|
||||
-- 26.02.2026 / MK - #12 Extended error diagnostics in CATCH
|
||||
-- 26.02.2026 / MK - #16 success column as BIT
|
||||
-- 26.02.2026 / MK - Umstellung auf Export-Prozedur (Tabellen → JSON)
|
||||
-- 26.02.2026 / MK - JSON-Ausgabe: camelCase, INCLUDE_NULL_VALUES, CreateInvoice_Request-Vorlage
|
||||
-- 26.02.2026 / MK - Umbau zu Inline-Tabellenwertfunktion (ITVF)
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PRCUST_SET_JSON_INVOICE_DATA](
|
||||
CREATE OR ALTER FUNCTION [dbo].[FNCUST_GET_JSON_INVOICE_DATA](
|
||||
@DocumentID INT = NULL
|
||||
)
|
||||
RETURNS TABLE
|
||||
AS
|
||||
BEGIN TRY
|
||||
|
||||
SET NOCOUNT ON;
|
||||
|
||||
-- declare runtime vars
|
||||
DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID),
|
||||
@RETURN_STATUS INT = 0,
|
||||
@RETURN_STATUS_TEXT NVARCHAR(MAX) = CONCAT('START PROCEDURE [',OBJECT_NAME(@@PROCID),'] @ ',CONVERT(VARCHAR(50),GETDATE(),120)),
|
||||
@RETURN_ERROR_TEXT NVARCHAR(MAX) = N'';
|
||||
|
||||
DECLARE @output NVARCHAR(MAX);
|
||||
|
||||
PRINT '====================================================================================================';
|
||||
PRINT @RETURN_STATUS_TEXT;
|
||||
PRINT '';
|
||||
|
||||
--==========================================-- Validate: Document exists --==========================================--
|
||||
IF @DocumentID IS NOT NULL AND NOT EXISTS (SELECT 1 FROM dbo.PurchaseDocument WHERE DocumentID = @DocumentID) BEGIN
|
||||
|
||||
SET @RETURN_STATUS = 40001;
|
||||
SET @RETURN_STATUS_TEXT = N'Document not found.';
|
||||
SET @RETURN_ERROR_TEXT = N'Kein PurchaseDocument mit DocumentID = ' + CAST(@DocumentID AS NVARCHAR(20)) + N' gefunden.';
|
||||
|
||||
PRINT 'ERROR: ' + @RETURN_ERROR_TEXT;
|
||||
|
||||
SELECT
|
||||
success = CAST(0 AS BIT)
|
||||
, message = @RETURN_ERROR_TEXT
|
||||
, data = CAST(NULL AS NVARCHAR(MAX));
|
||||
|
||||
RETURN @RETURN_STATUS;
|
||||
END;
|
||||
-----------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--========================================-- Validate: Any documents available --========================================--
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.PurchaseDocument WHERE @DocumentID IS NULL OR DocumentID = @DocumentID) BEGIN
|
||||
|
||||
SET @RETURN_STATUS = 40002;
|
||||
SET @RETURN_STATUS_TEXT = N'No documents available.';
|
||||
SET @RETURN_ERROR_TEXT = N'Keine PurchaseDocuments vorhanden.';
|
||||
|
||||
PRINT 'ERROR: ' + @RETURN_ERROR_TEXT;
|
||||
|
||||
SELECT
|
||||
success = CAST(0 AS BIT)
|
||||
, message = @RETURN_ERROR_TEXT
|
||||
, data = CAST(NULL AS NVARCHAR(MAX));
|
||||
|
||||
RETURN @RETURN_STATUS;
|
||||
END;
|
||||
-----------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
PRINT 'INFO: Erzeuge JSON-Ausgabe...';
|
||||
|
||||
--===============================================-- Build output JSON result --===============================================--
|
||||
SELECT @output =
|
||||
RETURN
|
||||
(
|
||||
SELECT
|
||||
--==== success ====--
|
||||
success = CAST(IIF(v.status = 0, 1, 0) AS BIT)
|
||||
|
||||
--==== message ====--
|
||||
, message = CAST(
|
||||
CASE v.status
|
||||
WHEN 1 THEN N'Kein PurchaseDocument mit DocumentID = ' + CAST(@DocumentID AS NVARCHAR(20)) + N' gefunden.'
|
||||
WHEN 2 THEN N'Keine PurchaseDocuments vorhanden.'
|
||||
ELSE N'Daten erfolgreich verarbeitet.'
|
||||
END
|
||||
AS NVARCHAR(MAX))
|
||||
|
||||
--==== data ====--
|
||||
, data = CAST(
|
||||
CASE WHEN v.status > 0 THEN NULL
|
||||
ELSE (
|
||||
--===============================================-- Build output JSON result --===============================================--
|
||||
SELECT
|
||||
JSON_QUERY(
|
||||
COALESCE(
|
||||
@@ -205,42 +168,21 @@ BEGIN TRY
|
||||
)
|
||||
) AS purchaseDocuments
|
||||
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
|
||||
-----------------------------------------------------------------------------------------------------------------------------------
|
||||
)
|
||||
END
|
||||
AS NVARCHAR(MAX))
|
||||
|
||||
FROM (VALUES (1)) AS src(x)
|
||||
CROSS APPLY (
|
||||
SELECT status = CASE
|
||||
WHEN @DocumentID IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM dbo.PurchaseDocument WHERE DocumentID = @DocumentID)
|
||||
THEN 1
|
||||
WHEN NOT EXISTS (SELECT 1 FROM dbo.PurchaseDocument WHERE @DocumentID IS NULL OR DocumentID = @DocumentID)
|
||||
THEN 2
|
||||
ELSE 0
|
||||
END
|
||||
) AS v
|
||||
);
|
||||
-----------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
SET @RETURN_STATUS = 0;
|
||||
SET @RETURN_STATUS_TEXT = CONCAT('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120));
|
||||
|
||||
PRINT '';
|
||||
PRINT @RETURN_STATUS_TEXT;
|
||||
PRINT '====================================================================================================';
|
||||
|
||||
SELECT
|
||||
success = CAST(1 AS BIT)
|
||||
, message = N'Daten erfolgreich verarbeitet.'
|
||||
, data = @output;
|
||||
|
||||
RETURN @RETURN_STATUS;
|
||||
|
||||
END TRY BEGIN CATCH
|
||||
|
||||
--====================================================-- exception / error --====================================================--
|
||||
|
||||
SET @RETURN_STATUS = 50000;
|
||||
SET @RETURN_STATUS_TEXT = CONCAT('END PROCEDURE [',OBJECT_NAME(@@PROCID),'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120));
|
||||
SET @RETURN_ERROR_TEXT = CONCAT('ERR ',ERROR_NUMBER(),' SEV ',ERROR_SEVERITY(),' STATE ',ERROR_STATE(),' LINE ',ERROR_LINE(),': ',ERROR_MESSAGE());
|
||||
|
||||
PRINT 'ERROR IN PROCEDURE: [' + OBJECT_NAME(@@PROCID) + ']' + CHAR(13) + @RETURN_ERROR_TEXT;
|
||||
PRINT @RETURN_STATUS_TEXT;
|
||||
PRINT '====================================================================================================';
|
||||
-----------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
SELECT
|
||||
success = CAST(0 AS BIT)
|
||||
, message = ERROR_MESSAGE()
|
||||
, data = CAST(NULL AS NVARCHAR(MAX));
|
||||
|
||||
RETURN @RETURN_STATUS;
|
||||
|
||||
END CATCH;
|
||||
GO
|
||||
|
||||
Reference in New Issue
Block a user