|
NguyenL71
Posting Yak Master
228 Posts |
Posted - 2010-11-17 : 17:16:04
|
| [code]Hi,I need some help with transactional control. If there is any problems occur, I like to rollback back the entire transctions (Do not call uspKON_ConlogUpdate and abort the UPDATE statement below.)Is there a better way to handle than the codes below. Any suggestion would greatly appreciate. EXECute dbo.uspKON_ConlogUpdate @LoanNum = @LoanNum, @EnteredBy = @LoginId, @EntryType = 1, @ConLogTxt = @ConLogTxtOnHold UPDATE NCLoanMod SET OnHoldEMailSentDt = GETDATE() WHERE LoanModId = @LoanModId AND LoanNum = @LoanNum Thank you in advance. --SPIF OBJECT_ID('v2.spNC_LoanModEMail', 'p') IS NOT NULL DROP PROCedure v2.spNC_LoanModEMailGOCREATE PROCedure v2.spNC_LoanModEMail( @LoanModId INT ,@LoginId VARCHAR(50))AS/*************************************************************************************************** Modifications:** ----------------------------------** Date: Author: Reasons:** ------------+-----------------------------------------------------------------------***************************************************************************************************/SET nocount ONSET XACT_ABORT ONDECLARE @LoanNum VARCHAR(10), @ReturnStatus BIT, @KondaurFclAlertsEmail VARCHAR(60), @PortfolioMgr VARCHAR(60), @AssetMgr VARCHAR(60), @PortfolioMgrEmail VARCHAR(60), @AssetMgrEmail VARCHAR(60), @ConLogTxtOnHold VARCHAR(5000), @ConLogTxtNotifyPM VARCHAR(5000), @ConLogTxtResumefcl VARCHAR(5000), @ConLogTxtContiOnHold VARCHAR(5000) DECLARE @FclQuestionAllNo BIT = 1 ,@FclNOIFlag BIT = 0 ,@CrLf CHAR(2) = CHAR(13) + CHAR(10)IF OBJECT_ID('Tempdb.dbo.#EMailSendOut', 'u') IS NOT NULLDROP TABLE #EMailSendOutCREATE TABLE #EMailSendOut( EmailTo VARCHAR(100), EmailCC VARCHAR(100), EmailTypeCd VARCHAR(20), EmailSubject VARCHAR(1000), EMailBody VARCHAR(2000))SET @LoanNum = ( SELECT LoanNum FROM NCLoanMod WHERE LoanModId = @LoanModId )--SELECT @LoanNumIF EXISTS ( SELECT 'x' FROM LoanModificationAnswers WHERE LoanModId = @LoanModId AND Response = 'Yes' ) -- If the Response is Yes then @FclQuestionAllNo = 0 else @FclQuestionAllNo = 1 SET @FclQuestionAllNo = 0 IF EXISTS ( SELECT 'x' FROM ExitInfo WHERE LoanNum = @LoanNum AND (InFCflag = 'Yes' OR (NOISent IS NOT NULL AND NOISent <> '1900-01-01 00:00:00.000') OR (NOIExpired IS NOT NULL AND NOIExpired <> '1900-01-01 00:00:00.000') ) ) SET @FclNOIFlag = 1SET @KondaurFclAlertsEmail = ( SELECT Email FROM GroupEmails WHERE Name = 'Kondaur Foreclosure Alerts' ) INSERT #EMailSendOut (EmailTo, EmailTypeCd, EmailSubject, EMailBody) SELECT @KondaurFclAlertsEmail AS 'EmailTo', 'OnHold' AS 'EmailTypeCd', A.LoanNum + ' - ' + b.BorrLast + ' - North Carolina Loss Mitigation Request Received', 'Loan modification request for ' + @LoanNum + ' in the state of North Carolina has been received on ' + CONVERT(CHAR(10), a.RequestDate, 101) + ' and this loan is in foreclosure. Please stop all foreclosure processes until a final determination has been made.' FROM NCLoanMod AS a JOIN KondaurData AS b ON a.LoanNum = b.LoanNum WHERE a.LoanModId = @LoanModId AND a.LoanNum = @LoanNum AND a.LoanModStarted = 1 AND a.OnHoldEMailSentDt IS NULL AND @FclQuestionAllNo = 1 AND @FclNOIFlag = 1 SET @ConLogTxtOnHold = ( SELECT EMailBody FROM #EMailSendOut WHERE EmailTypeCd = 'OnHold')--SELECT @ConLogTxtOnHold IF (@@ROWCOUNT = 1 AND @ConLogTxtOnHold IS NOT NULL) --BEGIN BEGIN TRY BEGIN TRAN EXECute dbo.uspKON_ConlogUpdate @LoanNum = @LoanNum, @EnteredBy = @LoginId, @EntryType = 1, @ConLogTxt = @ConLogTxtOnHold UPDATE NCLoanMod SET OnHoldEMailSentDt = GETDATE() WHERE LoanModId = @LoanModId AND LoanNum = @LoanNum COMMIT TRAN END TRY --END BEGIN CATCH ROLLBACK TRAN DECLARE @ErrorMessage VARCHAR(4000) DECLARE @ErrorSeverity INT DECLARE @ErrorState INT SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE() RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState) END CATCH --end--------------------------------------------------------------------------------#2 SELECT @PortfolioMgr = PortfolioMgr ,@AssetMgr = AssetManager FROM KondaurData WHERE LoanNum = @LoanNum SET @PortfolioMgrEmail = ( SELECT Email FROM Logins WHERE UserName = @PortfolioMgr ) --SELECT @PortfolioMgrEmail SET @AssetMgrEmail = ( SELECT Email FROM Logins WHERE UserName = @AssetMgr ) --SELECT @AssetMgrEmail INSERT #EMailSendOut (EmailTo, EmailCC, EmailTypeCd, EmailSubject, EMailBody) SELECT @PortfolioMgrEmail AS 'EmailTo', @AssetMgrEmail AS 'EmailCC', 'NotifyPM' AS 'EmailTypeCd', 'Please review ' + a.LoanNum + ' - ' + b.BorrLast + ' - North Carolina Loss Mitigation Request Review', 'Loan modification request for ' + a.LoanNum + ' in the state of North Carolina requires Portfolio Manager attention. Please review and confirm the request.' FROM NCLoanMod AS a JOIN KondaurData b ON a.LoanNum = b.LoanNum WHERE LoanModId = @LoanModId AND a.LoanNum = @LoanNum AND (a.IsApproved = 1 OR a.IsDenied = 1) AND a.NotifyPMEmailSentDt IS NULL SET @ConLogTxtNotifyPM = ( SELECT EMailBody FROM #EMailSendOut WHERE EmailTypeCd = 'NotifyPM' )--SELECT @ConLogTxtNotifyPM IF (@@ROWCOUNT = 1 AND @ConLogTxtNotifyPM IS NOT NULL) --BEGIN BEGIN TRY BEGIN TRAN EXECute dbo.uspKON_ConlogUpdate @LoanNum = @LoanNum, @EnteredBy = @LoginId, @EntryType = 1, @ConLogTxt = @ConLogTxtNotifyPM UPDATE NCLoanMod SET NotifyPMEmailSentDt = GETDATE() WHERE LoanModId = @LoanModId AND LoanNum = @LoanNum COMMIT TRAN END TRY --END BEGIN CATCH ROLLBACK TRAN --DECLARE @ErrorMessage VARCHAR(4000) --DECLARE @ErrorSeverity INT --DECLARE @ErrorState INT SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE() RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState) END CATCH --end--------------------------------------------------------------------------------#3 --// Resume FCL INSERT #EMailSendOut (EmailTo, EmailTypeCd, EmailSubject, EMailBody) SELECT @KondaurFclAlertsEmail AS 'EmailTo', 'Resumefcl' AS 'EmailTypeCd', a.LoanNum + ' - ' + b.BorrLast + ' - North Carolina Loss Mitigation Request - DENIED', 'Loan modification request for ' + @LoanNum + ' in the state of North Carolina has been Denied on ' + CONVERT(CHAR(10), a.IsDeniedDt, 101) + ' due to ' + ReasonForDenial + '. Please resume all foreclosure processes.' FROM NCLoanMod AS a JOIN KondaurData b ON a.LoanNum = b.LoanNum WHERE a.LoanModId = @LoanModId AND a.LoanNum = @LoanNum AND a.IsPMReviewed = 1 AND a.IsDenied = 1 AND @FclQuestionAllNo = 1 -- Answer in Response = NO return 1 else return 0 Yes. AND @FclNOIFlag = 1 -- AND (InFCflag = 'Yes' -- OR (NOISent IS NOT NULL AND NOISent <> '1900-01-01 00:00:00.000') -- OR (NOIExpired IS NOT NULL AND NOIExpired <> '1900-01-01 00:00:00.000') ) AND a.ResumeFCLEmailSentDt IS NULLSET @ConLogTxtResumefcl = ( SELECT EMailBody FROM #EMailSendOut WHERE EmailTypeCd = 'Resumefcl')--SELECT @ConLogTxtResumefcl--SELECT * FROM #EMailSendOut IF (@@ROWCOUNT = 1 AND @ConLogTxtResumefcl IS NOT NULL) --BEGIN BEGIN TRY BEGIN TRAN EXECute dbo.uspKON_ConlogUpdate @LoanNum = @LoanNum, @EnteredBy = @LoginId, @EntryType = 1, @ConLogTxt = @ConLogTxtResumefcl UPDATE NCLoanMod SET ResumeFCLEMailSentDt = GETDATE() WHERE LoanModId = @LoanModId AND LoanNum = @LoanNum COMMIT TRAN END TRY --END BEGIN CATCH ROLLBACK TRAN --DECLARE @ErrorMessage VARCHAR(4000) --DECLARE @ErrorSeverity INT --DECLARE @ErrorState INT SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE() RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState) END CATCH --------------------------------------------------------------------------------#4 --// Continue Hold on. INSERT #EMailSendOut (EmailTo, EmailTypeCd, EmailSubject, EMailBody) SELECT @KondaurFclAlertsEmail AS 'EmailTo', 'Contifcl' AS 'EmailTypeCd', a.LoanNum + ' - ' + b.BorrLast + ' - North Carolina Loss Mitigation Request - APPROVED', 'Loan modification request for ' + @LoanNum + ' in the state of North Carolina has been Approved on ' + CONVERT(CHAR(10), a.IsApprovedDt, 101) + ' with the following terms:' + @CrLf + 'Interest Rate: ' + CAST(a.InterestRate AS VARCHAR(10)) + @CrLf + 'Principle Amount: ' + CAST(a.PrincipalAmount AS VARCHAR(20)) + @CrLf + 'Term: ' + CAST(a.Term AS VARCHAR(10)) + @CrLf + 'Loan Type: ' + a.LoanType + @CrLf + 'P&I Amount: ' + CAST(a.PAndIAmount AS VARCHAR(10)) FROM NCLoanMod AS a JOIN KondaurData b ON a.LoanNum = b.LoanNum WHERE a.LoanModId = @LoanModId AND a.LoanNum = @LoanNum AND a.IsApproved = 1 AND a.IsPMReviewed = 1 AND @FclQuestionAllNo = 1 -- Answer in Response = NO return 1 else return 0 Yes. AND @FclNOIFlag = 1 -- AND (InFCflag = 'Yes' -- OR (NOISent IS NOT NULL AND NOISent <> '1900-01-01 00:00:00.000') -- OR (NOIExpired IS NOT NULL AND NOIExpired <> '1900-01-01 00:00:00.000') ) AND a.ContinueHoldEmailSentDt IS NULLSET @ConLogTxtContiOnHold = ( SELECT EMailBody FROM #EMailSendOut WHERE EmailTypeCd = 'Contifcl' )--SELECT @ConLogTxtContiOnHold--SELECT * FROM #EMailSendOut IF (@@ROWCOUNT = 1 AND @ConLogTxtResumefcl IS NOT NULL) --BEGIN BEGIN TRY BEGIN TRAN EXECute dbo.uspKON_ConlogUpdate @LoanNum = @LoanNum, @EnteredBy = @LoginId, @EntryType = 1, @ConLogTxt = @ConLogTxtContiOnHold UPDATE NCLoanMod SET ContinueHoldEmailSentDt = GETDATE() WHERE LoanModId = @LoanModId AND LoanNum = @LoanNum COMMIT TRAN END TRY --END BEGIN CATCH ROLLBACK TRAN --DECLARE @ErrorMessage VARCHAR(4000) --DECLARE @ErrorSeverity INT --DECLARE @ErrorState INT SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE() RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState) END CATCH SELECT EmailTo ,COALESCE(EmailCC, ' ') AS 'EmailCC' ,EmailSubject ,EMailBody FROM #EMailSendOutGO[/code] |
|