121212
-- ====================================================================================
-- INITIAL RELEASE: 15/11/2021 AUTHOR: SUCHITRA S C
-- EXEC [CW_SR_TASK_SP] 93
-- =====================================================================================
CREATE PROCEDURE [dbo].[CW_SR_TASK_SP]
(
@DATASOURCEID INT,@runDate date = NULL
)
AS
BEGIN
DECLARE @ExtractIdOut INT
DECLARE @EndDt DATETIME2
DECLARE @RecordCount INT = 0
DECLARE @ProcedureName SYSNAME = OBJECT_NAME(@@PROCID)
DECLARE @intErrorCode INT
Declare @returnCode int = 0
DECLARE @ExtractProcessControlId UniqueIdentifier
SET NOCOUNT ON;
BEGIN TRY
set @runDate = Coalesce(@runDate,GetDate())
set @ExtractProcessControlId = NewID()
-- Log the beginning of the GSNOW load process, and Mark it as successful
EXECUTE [SYN_sp_GSNOW_CW_InsertExtractLog] 'CW SR_TASK Load Started', @runDate, @ExtractIdOut OUTPUT,@ExtractProcessControlId
EXECUTE [SYN_SP_GSNOW_CW_UpdateExtractLogById] @ExtractIdOut, @runDate, 'E', 0
--Log the beginning of the SP load
EXECUTE [SYN_sp_GSNOW_CW_InsertExtractLog] @ProcedureName, @runDate, @ExtractIdOut OUTPUT,@ExtractProcessControlId
BEGIN TRAN
DECLARE @LOAD_START_TIME DATETIME, @LAST_MODIFIED_DATE DATETIME, @MAX_LAST_MODIFIED_DATE DATETIME;
SET @LOAD_START_TIME = GETDATE();
--SET @LAST_MODIFIED_DATE = (SELECT Convert(varchar,DateAdd(day,-1,DATEADD(s, Last_modified_Date, '1970-01-01 00:00:00')),120) AS LAST_MODIFIED_DATE
--FROM SYN_SourceTables_CW WHERE DATASOURCEID = @DATASOURCEID AND SOURCETABLENAME = 'STG_CW_SR_TASK')
SET @LAST_MODIFIED_DATE = (SELECT CONVERT(VARCHAR,CONVERT(DATETIME,CAST('1970-01-01 00:00:00'AS DATETIME)+ (LAST_MODIFIED_DATE/(24 * 60 *60)),100), 120) AS LAST_MODIFIED_DATE
FROM [SYN_SourceTables_CW] WHERE DATASOURCEID = @DATASOURCEID AND SOURCETABLENAME = 'STG_CW_SR_TASK')
--=================TRUNCATING STAGE TABLE==================
TRUNCATE TABLE [STG_CW_SR_TASK]
--=================LOADING DATA INTO STAGE=================
INSERT INTO [STG_CW_SR_TASK]
(
active
,activity_due
,additional_assignee_list
,approval
,approval_history
,ASSIGN_TIME
,ASSIGNED_TO_ID
,ASSIGNMENT_GROUP_ID
,business_duration
,business_service
,TOTAL_DURATION
,calendar_stc
,close_notes
,closed_at
,closed_by
,CMDB_CI
,comments
,comments_and_work_notes
,COMPANY_ID
,contact_type
,contract
,correlation_display
,correlation_id
,delivery_plan
,TASKNAME
,DESCRIPTION
,SCHEDULED_END_DATE
,dv_approval
,dv_assigned_to
,dv_assignment_group
,dv_business_duration
,dv_business_service
,dv_calendar_duration
,dv_closed_by
,dv_cmdb_ci
,dv_company
,dv_contact_type
,dv_contract
,dv_delivery_plan
,dv_delivery_task
,dv_escalation
,dv_impact
,dv_location
,SUBMITTER
,dv_parent
,dv_priority
,dv_request
,dv_request_item
,dv_route_reason
,dv_sc_catalog
,dv_service_offering
,dv_state
,dv_sys_class_name
,dv_time_worked
,dv_u_category
,dv_u_exclusion_category
,dv_u_impacted_region
,dv_u_on_hold_reason
,dv_u_subcategory
,dv_u_vendor
,dv_universal_request
,dv_upon_approval
,dv_upon_reject
,dv_urgency
,dv_wf_activity
,escalation
,SCHEDULED_START_DATE
,follow_up
,group_list
,impact
,knowledge
,LOCATION_ID
,made_sla
,number
,opened_at
,opened_by
,[order]
,parent
,PRIORITY
,REASSIGNMENT_COUNT
,request
,ROOTREQUESTID
,route_reason
,sc_catalog
,service_offering
,SHORT_DESCRIPTION
,sla_due
,STATUS
,TRANSACTION_TYPE
,sys_created_by
,sys_created_on
,SYS_DOMAIN
,sys_domain_path
,TASK_ID
,sys_mod_count
,sys_tags
,LAST_MODIFIED_BY
,LAST_MODIFIED_DATE
,task_effective_number
,time_worked
,CATEGORY
,EXCLUDE_FROM_REPORTING
,EXCLUSION_REASON
,u_exclusion_category
,u_exclusion_reason
,u_impacted_region
,u_justification_for_closure_update
,u_on_hold_notes
,u_on_hold_reason
,u_resolution_notes
,u_resolved_on_first_contact
,u_resolved_on_first_contact_eligible
,u_subcategory
,u_vendor
,u_vendor_point_of_contact
,u_vendor_ticket
,universal_request
,upon_approval
,upon_reject
,URGENCY
,user_input
,watch_list
,wf_activity
,ACTUAL_END_DATE
,work_notes
,work_notes_list
,ACTUAL_START_DATE
,SUBMIT_DATE
)
SELECT
active
,activity_due
,additional_assignee_list
,approval
,approval_history
,approval_set
,assigned_to
,assignment_group
,business_duration
,business_service
,CAST(CALENDAR_DURATION AS Datetime)
,calendar_stc
,close_notes
,closed_at
,closed_by
,cmdb_ci
,comments
,comments_and_work_notes
,company
,contact_type
,contract
,correlation_display
,correlation_id
,delivery_plan
,delivery_task
,description
,due_date
,dv_approval
,dv_assigned_to
,dv_assignment_group
,dv_business_duration
,dv_business_service
,dv_calendar_duration
,dv_closed_by
,dv_cmdb_ci
,dv_company
,dv_contact_type
,dv_contract
,dv_delivery_plan
,dv_delivery_task
,dv_escalation
,dv_impact
,dv_location
,dv_opened_by
,dv_parent
,dv_priority
,dv_request
,dv_request_item
,dv_route_reason
,dv_sc_catalog
,dv_service_offering
,dv_state
,dv_sys_class_name
,dv_time_worked
,dv_u_category
,dv_u_exclusion_category
,dv_u_impacted_region
,dv_u_on_hold_reason
,dv_u_subcategory
,dv_u_vendor
,dv_universal_request
,dv_upon_approval
,dv_upon_reject
,dv_urgency
,dv_wf_activity
,escalation
,expected_start
,follow_up
,group_list
,impact
,knowledge
,location
,made_sla
,number
,opened_at
,opened_by
,[order]
,parent
,priority
,reassignment_count
,request
,request_item
,route_reason
,sc_catalog
,service_offering
,short_description
,sla_due
,state
,sys_class_name
,sys_created_by
,sys_created_on
,sys_domain
,sys_domain_path
,sys_id
,sys_mod_count
,sys_tags
,sys_updated_by
,sys_updated_on
,task_effective_number
,time_worked
,u_category
,u_exclude_from_reporting
,u_exclude_reason
,u_exclusion_category
,u_exclusion_reason
,u_impacted_region
,u_justification_for_closure_update
,u_on_hold_notes
,u_on_hold_reason
,u_resolution_notes
,u_resolved_on_first_contact
,u_resolved_on_first_contact_eligible
,u_subcategory
,u_vendor
,u_vendor_point_of_contact
,u_vendor_ticket
,universal_request
,upon_approval
,upon_reject
,urgency
,user_input
,watch_list
,wf_activity
,work_end
,work_notes
,work_notes_list
,work_start
,COALESCE(OPENED_AT,SYS_UPDATED_ON)
FROM SYN_SC_TASK
WHERE (SYS_UPDATED_ON >= @LAST_MODIFIED_DATE
AND OPENED_AT IS NOT NULL)
OR
(NUMBER IN (SELECT NUMBER FROM [STG_CW_MISSING_RECORDS]
WHERE TableName = 'SC_TASK' and Is_Loaded is null)
)
--===============================FETCHING COMMENTS_AND_WORKNOTES======================================
TRUNCATE TABLE [STG_CW_SYS_JOURNAL_FIELD]
INSERT INTO [STG_CW_SYS_JOURNAL_FIELD]
(
sys_created_by
,sys_created_on
,element
,element_id
,name
,sys_id
,sys_tags
,value
)
SELECT
SJ.sys_created_by
,SJ.sys_created_on
,SJ.element
,SJ.element_id
,SJ.name
,SJ.sys_id
,SJ.sys_tags
,SJ.value
FROM [SYN_SN_ST_SYS_JOURNAL_FIELD] SJ
INNER JOIN [STG_CW_SR_TASK] TASK
ON SJ.element_id = TASK.TASK_ID
DECLARE @NewLineChar AS CHAR(2) = CHAR(13) + CHAR(10)
;WITH COMMENTS_CTE
AS
(
SELECT ELEMENT_ID,
COMMENTS_AND_WORKNOTES =
REPLACE(
REPLACE(
(STUFF(
(SELECT @NewLineChar + CONVERT(nvarchar(19),sys_created_on,121 ) + ' || ' +cast(sys_created_by as varchar(50)) + ' || ' + '(' + cast(element as varchar(50)) + ')' + ' || ' +cast([value] as varchar(max))
FROM [STG_CW_SYS_JOURNAL_FIELD] t1
WHERE t1.element_id = t2.element_id
ORDER BY sys_created_on DESC
FOR XML PATH (''))
, 1, 1, ''
)
),
'
' ,''),
'#x0D;' ,'')
FROM [STG_CW_SYS_JOURNAL_FIELD] t2
GROUP BY ELEMENT_ID
)
UPDATE K
SET K.COMMENTS_AND_WORKNOTES = COMMENTS_CTE.COMMENTS_AND_WORKNOTES
FROM [STG_CW_SR_TASK] K
LEFT OUTER JOIN COMMENTS_CTE
ON COMMENTS_CTE.ELEMENT_ID = K.TASK_ID
--===============================FETCHING COMMENTS_AND_WORKNOTES======================================
--==========UPDATING STAGE WITH SK COLUMNS=========================
--DECLARE @DATASOURCEID INT = 93
UPDATE SR
SET SITE_SK = SITE.SITE_SK
FROM [STG_CW_SR_TASK] SR
LEFT OUTER JOIN SYN_ODS_CW_SITE SITE
ON (SITE.DATASOURCEID = @DATASOURCEID AND SR.LOCATION_ID = SITE.SITE_ID)
UPDATE SR
SET COMPANY_SK = COMPANY.COMPANY_SK
FROM [STG_CW_SR_TASK] SR
LEFT OUTER JOIN SYN_ODS_CW_COMPANY COMPANY
ON (COMPANY.DATASOURCEID = @DATASOURCEID AND SR.COMPANY_ID = COMPANY.COMPANY_ID)
UPDATE SR
SET COMPANY_SK = COMPANY.COMPANY_SK
FROM [STG_CW_SR_TASK] SR
LEFT OUTER JOIN SYN_ODS_CW_COMPANY COMPANY
ON (COMPANY.DATASOURCEID = @DATASOURCEID AND SR.SYS_DOMAIN = COMPANY.SYS_DOMAIN AND COMPANY.COMPANY_ID is NULL)
WHERE SR.COMPANY_SK is NULL
UPDATE SR
SET SUBMITTER_PERSON_SK = SUBMITTER.PERSON_SK
FROM [STG_CW_SR_TASK] SR
LEFT OUTER JOIN (SELECT MAX(PERSON_SK) AS PERSON_SK,PERSON_ID,DATASOURCEID FROM SYN_PERSON WHERE DATASOURCEID = @DATASOURCEID GROUP BY PERSON_ID,DATASOURCEID) SUBMITTER
ON (SUBMITTER.PERSON_ID = SR.SUBMITTED_BY_ID AND SUBMITTER.DATASOURCEID = @DATASOURCEID)
UPDATE SR
SET ASSIGNED_GROUP_ID = ASSIGNED_GROUP.SUPPORT_GROUP_ID
FROM [STG_CW_SR_TASK] SR
LEFT OUTER JOIN SYN_SUPPORTGROUP ASSIGNED_GROUP
ON (ASSIGNED_GROUP.SUPPORT_GROUP_ID=SR.ASSIGNMENT_GROUP_ID AND ASSIGNED_GROUP.DATASOURCEID = @DATASOURCEID)
UPDATE SR
SET ASSIGNEE_LOGIN_ID = ASSIGNED_LOGIN_ID.PERSON_SK
FROM [STG_CW_SR_TASK] SR
LEFT OUTER JOIN (SELECT MAX(PERSON_SK) AS PERSON_SK,PERSON_ID,DATASOURCEID FROM SYN_PERSON WHERE DATASOURCEID = @DATASOURCEID GROUP BY PERSON_ID,DATASOURCEID) ASSIGNED_LOGIN_ID
ON (ASSIGNED_LOGIN_ID.PERSON_ID=SR.ASSIGNED_TO_ID AND ASSIGNED_LOGIN_ID.DATASOURCEID=@DATASOURCEID)
--------------------------------------------------------------------------------------------
;WITH DELETE_ROWS
AS
(
SELECT ROW_NUMBER() OVER(PARTITION BY NUMBER ORDER BY LAST_MODIFIED_DATE DESC) AS ROW , * FROM [STG_CW_SR_TASK]
)
DELETE FROM DELETE_ROWS
WHERE DELETE_ROWS.ROW>1;
DELETE ITIL FROM SYN_ODS_CW_ITIL_TRANSACTION ITIL
INNER JOIN [STG_CW_SR_TASK] STG
ON (ITIL.TRANSACTION_ID = STG.NUMBER AND ITIL.DATASOURCEID=@DATASOURCEID AND ITIL.TRANSACTION_TYPE='SC_TASK')
INSERT INTO SYN_ODS_CW_ITIL_TRANSACTION
(
ASSIGNEE_LOGIN_ID,
ASSIGNED_GROUP_ID,
TOTAL_DURATION,
COMPANY_SK,
DESCRIPTION,
IMPACT,
SITE_SK,
TRANSACTION_ID,
SUBMIT_DATE,
SUBMITTER_PERSON_SK,
PRIORITY,
HEADLINE,
TRANSACTION_TYPE,
LAST_MODIFIED_BY,
LAST_MODIFIED_DATE,
DATASOURCEID,
URGENCY,
Categorization_Tier_1,
Categorization_Tier_2
,EXCLUDE
,EXCLUSION_REASON
,DOMAIN
,PERSON_SK
)
SELECT
ISNULL(ASSIGNEE_LOGIN_ID, 0) AS ASSIGNEE_LOGIN_ID,
ISNULL(ASSIGNED_GROUP_ID, 0) AS ASSIGNED_GROUP_ID,
TOTAL_DURATION AS TOTAL_DURATION,
ISNULL(COMPANY_SK,0) AS COMPANY_SK ,
DESCRIPTION AS DESCRIPTION,
IMPACT AS IMPACT,
ISNULL(SITE_SK, 0) AS SITE_SK,
NUMBER AS TRANSACTION_ID,
SUBMIT_DATE AS SUBMIT_DATE,
ISNULL(SUBMITTER_PERSON_SK, 0) AS SUBMITTER_PERSON_SK,
PRIORITY AS PRIORITY,
SHORT_DESCRIPTION AS HEADLINE,
TRANSACTION_TYPE AS TRANSACTION_TYPE,
LAST_MODIFIED_BY AS LAST_MODIFIED_BY,
LAST_MODIFIED_DATE AS LAST_MODIFIED_DATE,
@DATASOURCEID AS DATASOURCEID,
URGENCY,
CATEGORY,
CMDB_CI
,EXCLUDE_FROM_REPORTING
,EXCLUSION_REASON
,DOMAIN
,PERSON_SK
FROM [STG_CW_SR_TASK]
where SUBMIT_DATE IS NOT NULL
/*DELETE FROM ODS_CW.DBO.TASK*/
DELETE SR FROM SYN_CW_TASK SR
INNER JOIN [STG_CW_SR_TASK] STG
ON (STG.NUMBER = SR.TRANSACTION_ID AND SR.DATASOURCEID=@DATASOURCEID)
WHERE TASKTYPE='SC_TASK'
/*INSERT INTO ODS_CW.DBO.TASK*/
INSERT INTO SYN_CW_TASK
(
ASSIGN_TIME,
DURATION_IN_SECONDS,
REPORTED_SOURCE,
TASKNAME,
SCHEDULED_END_DATE,
SCHEDULED_START_DATE,
TASK_NUMBER,
TRANSACTION_ID,
SUBMIT_DATE,
SUBMITTER,
ROOTREQUESTID,
STATUS,
TASKTYPE,
TASK_ID,
LAST_MODIFIED_BY,
LAST_MODIFIED_DATE,
ACTUAL_END_DATE,
ACTUAL_START_DATE,
END_TIME,
START_TIME,
DATASOURCEID
,COMMENTS_AND_WORKNOTES
,Escalation_count
)
SELECT
SCT.ASSIGN_TIME AS ASSIGN_TIME,
DATEDIFF(s, '1970-01-01 00:00:00', SCT.TOTAL_DURATION),
SCT.REPORTED_SOURCE AS REPORTED_SOURCE,
SCT.TASKNAME AS TASKNAME,
SCT.SCHEDULED_END_DATE AS SCHEDULED_END_DATE,
SCT.SCHEDULED_START_DATE AS SCHEDULED_START_DATE,
SCT.NUMBER AS TASK_NUMBER,
SCT.NUMBER AS TRANSACTION_ID,
SCT.SUBMIT_DATE AS SUBMIT_DATE,
left(SCT.SUBMITTER,60) AS SUBMITTER,
SCT.ROOTREQUESTID AS ROOTREQUESTID,
SCT.STATUS AS STATUS,
SCT.TRANSACTION_TYPE AS TASKTYPE,
SCT.TASK_ID AS TASK_ID,
SCT.LAST_MODIFIED_BY AS LAST_MODIFIED_BY,
SCT.LAST_MODIFIED_DATE AS LAST_MODIFIED_DATE,
SCT.ACTUAL_END_DATE AS ACTUAL_END_DATE,
SCT.ACTUAL_START_DATE AS ACTUAL_START_DATE,
SCT.ACTUAL_END_DATE AS END_TIME,
SCT.ACTUAL_START_DATE AS START_TIME,
@DATASOURCEID AS DATASOURCEID
,COMMENTS_AND_WORKNOTES
,REASSIGNMENT_COUNT
FROM
[STG_CW_SR_TASK] SCT
where SCT.SUBMIT_DATE is NOT NULL
Set @RecordCount = @@ROWCOUNT
--===================================================================
--Updating Missing records after loading into ODS
--DECLARE @DATASOURCEID INT = 93
UPDATE MR
SET IS_LOADED = 1
FROM [STG_CW_MISSING_RECORDS] MR
INNER JOIN SYN_CW_TASK I ON MR.NUMBER = I.TRANSACTION_ID
WHERE I.DataSOurceID = @DATASOURCEID and MR.TableName = 'sc_task'
--===================================================================
--=================UPDATING SOURCE_TABLES INFO=================
If (@RecordCount > 0)
Begin
SET @MAX_LAST_MODIFIED_DATE = (SELECT CONVERT(VARCHAR, MAX(LAST_MODIFIED_DATE), 120) AS LAST_UPDATED FROM [STG_CW_SR_TASK] )
UPDATE SYN_SourceTables_CW
SET LAST_MODIFIED_DATE=DATEDIFF(SECOND, '1970-01-01 00:00:00',@MAX_LAST_MODIFIED_DATE)
WHERE DATASOURCEID=@DATASOURCEID
AND PACKAGE_NAME='STG_CW_SR_TASK'
AND SOURCETABLENAME='STG_CW_SR_TASK'
End
UPDATE [SYN_SourceTables_CW]
SET LOADSTARTTIME=@LOAD_START_TIME,
LOADENDTIME=GETDATE()
WHERE DATASOURCEID=@DATASOURCEID
AND PACKAGE_NAME='STG_CW_SR_TASK'
AND SOURCETABLENAME='STG_CW_SR_TASK'
-- ===================================================================
-- Calling Daily Task snapshop sp
-- ===================================================================
--Exec CW_Open_Task_Snapshot_SP
-- ===================================================================
-- Log the Procedure Completion Time
-- ===================================================================
SET @EndDt = GETDATE()
EXECUTE [SYN_SP_GSNOW_CW_UpdateExtractLogById] @ExtractIdOut, @EndDt, 'E', @RecordCount
COMMIT TRAN
SELECT ReturnCode=0
END TRY
BEGIN CATCH
ROLLBACK TRAN
DECLARE @ERROR_SEVERITY INT = ERROR_SEVERITY()
DECLARE @ERROR_STATE INT = ERROR_STATE()
DECLARE @ERROR_NUMBER INT = ERROR_NUMBER()
DECLARE @ERROR_LINE INT = ERROR_LINE()
DECLARE @ERROR_MESSAGE NVARCHAR(4000) = ERROR_MESSAGE()
SET @EndDt = GETDATE()
--Log error detail in ExtractLogErrors
EXECUTE [SYN_SP_GSNOW_CW_InsertExtractLogError]
@ProcedureName = @ProcedureName
,@ExtractID = @ExtractIdOut
,@ErrorDateTime = @EndDt
,@ErrorNumber = @ERROR_NUMBER
,@ErrorState = @ERROR_STATE
,@ErrorSeverity = @ERROR_SEVERITY
,@LineNumber = @ERROR_LINE
,@ErrorMessage = @ERROR_MESSAGE
--Set Extract to error status
EXECUTE [SYN_SP_GSNOW_CW_UpdateExtractLogById] @ExtractIdOut, @EndDt, 'F', @RecordCount
RAISERROR (@ERROR_MESSAGE,@ERROR_SEVERITY,@ERROR_STATE);
SELECT ReturnCode=1
END CATCH
END
Comments
Post a Comment