Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -242,3 +242,11 @@ ModelManifest.xml
.fake/

.vscode
020_DIRECT_Framework/Direct_Framework/Direct_Framework.jfm
*.jfm
*.jfm
*.jfm
020_DIRECT_Framework/Direct_Framework/Direct_Framework.jfm
*.jfm
*.jfm
020_DIRECT_Framework/Direct_Framework/Direct_Framework.jfm
Binary file modified 020_DIRECT_Framework/Direct_Framework/Direct_Framework.jfm
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,8 @@
<Build Include="Functions\omd.GetBatchIdByName.sql" />
<Build Include="Functions\omd.GetFailedBatchIdList.sql" />
<Build Include="Functions\omd.GetPreviousBatchInstanceDetails.sql" />
<Build Include="Stored Procedures\omd.CreateLoadWindow.sql" />
<Build Include="Functions\GetModuleAreaByModuleId.sql" />
</ItemGroup>
<ItemGroup>
<PostDeploy Include="Scripts\Script.PostDeployment.sql" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
CREATE FUNCTION omd.GetModuleAreaByModuleId
(
@ModuleId INT -- The identifier of the Module (PK).
)
RETURNS VARCHAR(255) AS

-- =============================================
-- Function: Get Module Area (by Id)
-- Description: Takes the module id as input and returns the area code as registered in the framework
-- =============================================

BEGIN
-- Declare ouput variable

DECLARE @ModuleArea VARCHAR(255) =
(
SELECT module.AREA_CODE
FROM omd.MODULE module
WHERE MODULE_ID = @ModuleId
)

SET @ModuleArea = COALESCE(@ModuleArea,'N/A')

-- Return the result of the function
RETURN @ModuleArea
END
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
CREATE FUNCTION [omd].[GetLoadWindowDateTimes] ( @module_code VARCHAR(255), @start_or_end tinyint)
CREATE FUNCTION [omd].[GetLoadWindowDateTimes] ( @ModuleId INT, @start_or_end tinyint)
RETURNS DATETIME2(7) AS
BEGIN
DECLARE @result DATETIME2(7)
Expand All @@ -15,7 +15,7 @@ BEGIN
ROW_NUMBER() OVER (PARTITION BY MODULE_ID ORDER BY INSERT_DATETIME DESC) AS ROW_NR
FROM omd.SOURCE_CONTROL sct
JOIN omd.MODULE_INSTANCE modinst ON sct.MODULE_INSTANCE_ID = modinst.MODULE_INSTANCE_ID
WHERE MODULE_ID = (SELECT MODULE_ID FROM omd.MODULE WHERE MODULE_CODE=@module_code)
WHERE MODULE_ID = @ModuleId
) ranksub
WHERE ROW_NR=1
END
Expand All @@ -31,10 +31,9 @@ BEGIN
ROW_NUMBER() OVER (PARTITION BY MODULE_ID ORDER BY INSERT_DATETIME DESC) AS ROW_NR
FROM omd.SOURCE_CONTROL sct
JOIN omd.MODULE_INSTANCE modinst ON sct.MODULE_INSTANCE_ID = modinst.MODULE_INSTANCE_ID
WHERE MODULE_ID = (SELECT MODULE_ID FROM omd.MODULE WHERE MODULE_CODE = @module_code)
WHERE MODULE_ID = @ModuleId
) ranksub
WHERE ROW_NR=1
END
return @result
END

END
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@

/*
/*
Process: Create Batch Instance
Input:
- Batch Code
Expand All @@ -16,7 +15,7 @@ Usage:
*/

CREATE PROCEDURE [omd].[CreateBatchInstance]
@BatchCode VARCHAR(255), -- The name of the module, as identified in the BATCH_CODE attribute in the BATCH table.
@BatchCode VARCHAR(255), -- The name of the Batch, as identified in the BATCH_CODE attribute in the BATCH table.
@Debug VARCHAR(1) = 'N',
@ExecutionRuntimeId VARCHAR(255) = 'N/A',
@BatchInstanceId INT = NULL OUTPUT
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
CREATE PROCEDURE [omd].[CreateLoadWindow]
@ModuleInstanceId INT, -- The currently running Module Instance Id
@Debug VARCHAR(1) = 'N',
@LoadWindowStartDateTime DATETIME2(7) = NULL OUTPUT,
@LoadWindowEndDateTime DATETIME2(7) = NULL OUTPUT
AS
BEGIN

/*
Process: Create Load Window
Input:
- Module Instance Id
- Debug flag Y/N
Returns:
- Load Window Start Date/Time
- Load Window End Date/Time
Usage:
DECLARE
@LoadWindowStartDateTime datetime2(7),
@LoadWindowEndDateTime datetime2(7)

EXEC [omd].[CreateLoadWindow]
@ModuleInstanceId = '',
@Debug = N'Y',
@LoadWindowStartDateTime = @LoadWindowStartDateTime OUTPUT,
@LoadWindowEndDateTime = @LoadWindowEndDateTime OUTPUT

SELECT @LoadWindowStartDateTime as N'@LoadWindowStartDateTime',
@LoadWindowEndDateTime as N'@LoadWindowEndDateTime'
*/

-- Local variables (Module Id and source Data Object)
DECLARE @ModuleId INT = [omd].[GetModuleIdByModuleInstanceId](@ModuleInstanceId);
DECLARE @TableCode VARCHAR(255);
SELECT @TableCode = DATA_OBJECT_SOURCE FROM omd.MODULE WHERE MODULE_ID = @ModuleId;

IF @Debug = 'Y'
BEGIN
PRINT 'For Module Instance Id '+CONVERT(VARCHAR(10),@ModuleInstanceId)+' the following Module Id was found in omd.MODULE: '+CONVERT(VARCHAR(10),@ModuleId)+'.';
PRINT 'For Module Id '+CONVERT(VARCHAR(10),@ModuleId)+' the Source Data Object is '+@TableCode+'.';
END

DECLARE @PreviousModuleInstanceOutcome VARCHAR(MAX);
DECLARE @SqlStatement VARCHAR(MAX);

-- Exception handling
IF @ModuleId = NULL OR @ModuleId = 0
THROW 50000,'The Module Id could not be retrieved based on the Module Instance Id.',1



SELECT @PreviousModuleInstanceOutcome =
COALESCE
(
(
SELECT TOP 1
NEXT_RUN_INDICATOR
FROM omd.MODULE_INSTANCE main
WHERE
main.MODULE_ID = @ModuleId
AND main.MODULE_INSTANCE_ID != @ModuleInstanceId
ORDER BY main.MODULE_INSTANCE_ID DESC
)
, 'S') -- If there is no Module Instance Id, the process will resolve to succeeded.

IF @Debug = 'Y'
PRINT 'The previous Module Instance Id was evaluated as: '+@PreviousModuleInstanceOutcome+'.';

-- If the most recent run prior to the active Instance Id (now) is not failed, continue.
IF @PreviousModuleInstanceOutcome = 'R'
BEGIN
IF @Debug = 'Y'
PRINT 'The previous Module Instance was a failure, so no new load window is set until this is resolved - end of procedure.';
GOTO EndOfProcedure
END
ELSE
BEGIN
BEGIN TRY

SET @SqlStatement = '
INSERT INTO omd.[SOURCE_CONTROL]
(
[MODULE_INSTANCE_ID]
,[INSERT_DATETIME]
,[INTERVAL_START_DATETIME]
,[INTERVAL_END_DATETIME]
,[INTERVAL_START_IDENTIFIER]
,[INTERVAL_END_IDENTIFIER]
)
VALUES
(
'+CONVERT(VARCHAR(10),@ModuleInstanceId)+'
,SYSDATETIME()
,(
SELECT CONVERT(varchar,ISNULL(MAX(INTERVAL_END_DATETIME),''1900-01-01''),121) AS INTERVAL_START_DATETIME
FROM omd.SOURCE_CONTROL A
JOIN omd.MODULE_INSTANCE B ON (A.MODULE_INSTANCE_ID=B.MODULE_INSTANCE_ID)
WHERE B.MODULE_ID = '+CONVERT(VARCHAR(10),@ModuleId)+'
) -- Maps to INTERVAL_START_DATETIME which is the last datetime of the previous window.
, (
SELECT COALESCE(MAX(LOAD_DATETIME),''1900-01-01'')
FROM '+@TableCode+' sdo
JOIN omd.MODULE_INSTANCE modinst ON sdo.ETL_INSERT_RUN_ID=modinst.MODULE_INSTANCE_ID
WHERE modinst.EXECUTION_STATUS_CODE=''S''
) -- Maps to INTERVAL_END_DATETIME
,NULL --INTERVAL_START_IDENTIFIER
,NULL --INTERVAL_END_IDENTIFIER
)'

IF @Debug='Y'
PRINT 'Load Window SQL statement is: '+@SqlStatement;

EXEC (@SqlStatement);

-- Retrieve values for return
SELECT @LoadWindowStartDateTime = [omd].[GetLoadWindowDateTimes](@ModuleId,1);
SELECT @LoadWindowEndDateTime = [omd].[GetLoadWindowDateTimes](@ModuleId,2);

END TRY
BEGIN CATCH
THROW
END CATCH
END

EndOfProcedure:
-- End label
END
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Usage:
*/

CREATE PROCEDURE omd.CreateModuleInstance
@ModuleCode VARCHAR(255), -- The name of the module, as identified in the MODULE_CODE attribute in the MODULE table.
@ModuleCode VARCHAR(255), -- The name of the Module, as identified in the MODULE_CODE attribute in the MODULE table.
@Debug VARCHAR(1) = 'N',
@ExecutionRuntimeId VARCHAR(255) = 'N/A',
@BatchInstanceId INT = 0, -- The Batch Instance Id, if the Module is run from a Batch.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ Usage:
CREATE PROCEDURE [omd].[UpdateModuleInstance]
@ModuleInstanceId INT,
@EventCode VARCHAR(10) = 'None',
@RowCountSelect INT = 0,
@RowCountInsert INT = 0,
@Debug VARCHAR(1) = 'Y'
AS

Expand Down Expand Up @@ -56,9 +58,9 @@ BEGIN
BEGIN
BEGIN TRY
IF @Debug='Y'
PRINT 'Setting Module Instance '+CONVERT(VARCHAR(10),@ModuleInstanceId)+' to '+@EventCode+'.';
PRINT 'Setting Module Instance '+CONVERT(VARCHAR(10),@ModuleInstanceId)+' to '+@EventCode+' and row count '+CONVERT(VARCHAR(10),@RowCountInsert)+'.';

UPDATE omd.MODULE_INSTANCE SET EXECUTION_STATUS_CODE = 'S', NEXT_RUN_INDICATOR = 'P', END_DATETIME=GETDATE() WHERE MODULE_INSTANCE_ID = @ModuleInstanceId
UPDATE omd.MODULE_INSTANCE SET EXECUTION_STATUS_CODE = 'S', NEXT_RUN_INDICATOR = 'P', END_DATETIME=GETDATE(), ROWS_INPUT = @RowCountSelect, ROWS_INSERTED = @RowCountInsert WHERE MODULE_INSTANCE_ID = @ModuleInstanceId
END TRY
BEGIN CATCH
THROW
Expand Down