UPDATE TBDD_MODULES SET PRODUCT_VERSION = '2.4.7.8' where NAME = 'Record-Organizer' GO --####################################################################################### ALTER PROCEDURE [dbo].[PRPMO_DELETE_DOCTYPE](@pDOCID INT) AS BEGIN TRY DELETE FROM TBPMO_WD_NAMECONVENTION_FORMAT WHERE ID IN (SELECT GUID FROM TBPMO_WD_FORMVIEW_DOKTYPES WHERE DOCTYPE_ID = @pDOCID) DELETE FROM TBPMO_WD_FORMVIEW_DOKTYPES WHERE DOCTYPE_ID = @pDOCID DELETE FROM TBDD_INDEX_MAN WHERE DOK_ID = @pDOCID DELETE FROM TBDD_INDEX_AUTOM WHERE DOCTYPE_ID = @pDOCID DELETE FROM TBDD_USRGRP_DOKTYPE WHERE DOCTYPE_ID = @pDOCID DELETE FROM TBPMO_CLIENT_DOCTYPE WHERE DOCTYPE_ID = @pDOCID DELETE FROM TBPMO_TEMPLATE WHERE DOCTYPE_ID = @pDOCID DELETE FROM TBDD_DOKUMENTART_MODULE WHERE DOKART_ID = @pDOCID DELETE FROM TBDD_DOKUMENTART WHERE GUID = @pDOCID END TRY BEGIN CATCH PRINT 'FEHLER IN PROCEDURE: ' + CONVERT(VARCHAR(30),ERROR_PROCEDURE()) + ' - ZEILE: ' + CONVERT(VARCHAR(10),ERROR_LINE()) + ' - FEHLER-MESSAGE: ' + CONVERT(VARCHAR(500),ERROR_MESSAGE()) END CATCH GO ALTER TRIGGER [dbo].[TBDD_DOKUMENTART_AFT_INS2] ON [dbo].[TBDD_DOKUMENTART] WITH EXECUTE AS CALLER FOR INSERT AS BEGIN TRY DECLARE @ADDED_WHO VARCHAR(50), @OBJEKTTYP VARCHAR(50), @GUID INTEGER SELECT @GUID = GUID, @ADDED_WHO = ERSTELLTWER, @OBJEKTTYP = OBJEKTTYP FROM INSERTED INSERT INTO TBPMO_CLIENT_DOCTYPE (CLIENT_ID,DOCTYPE_ID) SELECT T.CLIENT_ID,@GUID FROM TBDD_CLIENT_USER T, TBDD_USER T1 WHERE T.USER_ID = T1.GUID AND UPPER(T1.USERNAME) = UPPER(@ADDED_WHO) --IF OBJECT_ID(N'dbo.TBPMO_WD_OBJECTTYPE', N'U') IS NOT NULL -- IF @OBJEKTTYP IS NOT NULL -- IF @OBJEKTTYP <> '' -- BEGIN -- DECLARE @IDX_DOC VARCHAR(50),@IDX_REC VARCHAR(50) -- SELECT @IDX_DOC = IDXNAME_DOCTYPE, -- @IDX_REC = IDXNAME_RECORDID FROM TBPMO_WD_OBJECTTYPE WHERE OBJECT_TYPE = @OBJEKTTYP -- IF @IDX_REC IS NOT NULL -- INSERT INTO TBDD_INDEX_AUTOM (DOCTYPE_ID,INDEXNAME,VALUE,ACTIVE,ADDED_WHO) VALUES -- (@GUID,@IDX_REC,'@Record-ID',1,@ADDED_WHO) -- IF @IDX_DOC IS NOT NULL -- INSERT INTO TBDD_INDEX_AUTOM (DOCTYPE_ID,INDEXNAME,VALUE,ACTIVE,ADDED_WHO) VALUES -- (@GUID,@IDX_DOC,'@Dokart',1,@ADDED_WHO) -- END END TRY BEGIN CATCH PRINT 'ERROR IN PROCEDURE: ' + CONVERT(VARCHAR(30),ERROR_PROCEDURE()) + ' - ERROR-MESSAGE: ' + CONVERT(VARCHAR(500),ERROR_MESSAGE()) END CATCH GO ALTER PROCEDURE [dbo].[PRPMO_ALTER_ENTITY_TABLE](@pENTITY_ID INT,@pCOL_NAME VARCHAR(50),@pCOL_NAME_OLD VARCHAR(50),@pTYP_ID INT,@pDEFAULT_VALUE VARCHAR(100),@pACTION TINYINT = 0) AS DECLARE @SQL NVARCHAR(MAX), @DEFAULT_VALUE VARCHAR(100), @ENTITY_TABLENAME VARCHAR(50), @TEMP_COL_NAME VARCHAR(50), @SQL_DEF NVARCHAR(MAX), @DFNAME VARCHAR(50), @DROP NVARCHAR(500) BEGIN SELECT @ENTITY_TABLENAME = ENTITY_TABLENAME FROM TBPMO_KONFIGURATION WHERE GUID = 1 SET @DEFAULT_VALUE = @pDEFAULT_VALUE IF @pACTION = 0 -- Für Insert BEGIN SET @SQL = 'ALTER TABLE @TABLE@ENT' + CHAR(13) + 'ADD [@COL_NAME]' SET @SQL = REPLACE(@SQL,'@ENT',CONVERT(VARCHAR(3),@pENTITY_ID)) SET @SQL = REPLACE(@SQL,'@TABLE',@ENTITY_TABLENAME) SET @SQL = REPLACE(@SQL,'@COL_NAME',@pCOL_NAME) IF @pTYP_ID IN(10,11) --CheckBox,RadioBox BEGIN IF @DEFAULT_VALUE = 'False' SET @DEFAULT_VALUE = '0' ELSE SET @DEFAULT_VALUE = '1' SET @SQL = @SQL +' BIT'-- NOT NULL DEFAULT ' + @DEFAULT_VALUE + CHAR(13) END ELSE IF @pTYP_ID = 6 --Picturebox SET @SQL = @SQL +' VARBINARY(MAX)' + CHAR(13) ELSE IF @pTYP_ID IN(7,12,14) --GridView,CheckedListBox,GridViewCheckable SET @SQL = @SQL + ' VARCHAR(MAX)' + CHAR(13) ELSE IF @pTYP_ID = 4 --DatePicker SET @SQL = @SQL + ' VARCHAR(10)' + CHAR(13) ELSE BEGIN IF LEN(ISNULL(@DEFAULT_VALUE,'')) > 0 BEGIN SET @SQL = @SQL + ' VARCHAR(MAX) DEFAULT ''@DEFAULT''' + CHAR(13) SET @SQL = REPLACE(@SQL,'@DEFAULT',@DEFAULT_VALUE) END ELSE SET @SQL = @SQL + ' VARCHAR(MAX)' + CHAR(13) END --PRINT @SQL EXEC sp_executesql @SQL PRINT 'COLUMN FOR ENTITY-TABLE WAS ADDED' END ELSE IF @pACTION = 1 -- Für Update BEGIN IF LEN(ISNULL(@pCOL_NAME_OLD,'')) > 0 BEGIN SET @SQL = '@TABLE@ENT.[@OLDNAME]' SET @SQL = REPLACE(@SQL,'@ENT',CONVERT(VARCHAR(3),@pENTITY_ID)) SET @SQL = REPLACE(@SQL,'@TABLE',@ENTITY_TABLENAME) SET @SQL = REPLACE(@SQL,'@OLDNAME',@pCOL_NAME_OLD) --PRINT @COL_NAME --PRINT @TABLENAME_COL --Update des Columnnames EXEC sp_RENAME @SQL, @pCOL_NAME, 'COLUMN' PRINT 'COLUMN WAS UPDATED' SET @SQL = 'ALTER TABLE @TABLE@ENT ALTER COLUMN ' SET @SQL = REPLACE(@SQL,'@ENT',CONVERT(VARCHAR(3),@pENTITY_ID)) SET @SQL = REPLACE(@SQL,'@TABLE',@ENTITY_TABLENAME) SET @SQL = @SQL + '[' + @pCOL_NAME + '] ' IF @pTYP_ID IN(10,11) --CheckBox,RadioBox BEGIN IF @DEFAULT_VALUE = 'False' SET @DEFAULT_VALUE = '0' ELSE SET @DEFAULT_VALUE = '1' SET @SQL = @SQL +'BIT'-- NOT NULL DEFAULT ' + @DEFAULT_VALUE END ELSE IF @pTYP_ID = 6 --Picturebox SET @SQL = @SQL +'VARBINARY(MAX)' ELSE IF @pTYP_ID IN(7,12,14) --GridView,CheckedListBox,GridViewCheckable SET @SQL = @SQL + 'VARCHAR(MAX)' ELSE IF @pTYP_ID = 4 --DatePicker SET @SQL = @SQL + 'VARCHAR(10)' ELSE BEGIN SET @SQL = @SQL + 'VARCHAR(MAX)' IF @DEFAULT_VALUE IS NOT NULL BEGIN SET @TEMP_COL_NAME = REPLACE(@TEMP_COL_NAME,' ','') SET @SQL_DEF = 'ALTER TABLE @TABLE@ENT ADD CONSTRAINT DEF@TABLE@ENT_@COL_NAME DEFAULT N''@DEFAULT_VALUE'' FOR [' + @pCOL_NAME + ']' SET @SQL_DEF = REPLACE(@SQL_DEF,'@DEFAULT_VALUE',@DEFAULT_VALUE) SET @SQL_DEF = REPLACE(@SQL_DEF,'@ENT',CONVERT(VARCHAR(3),@pENTITY_ID)) SET @SQL_DEF = REPLACE(@SQL_DEF,'@TABLE',@ENTITY_TABLENAME) SET @SQL_DEF = REPLACE(@SQL_DEF,'@COL_NAME',@TEMP_COL_NAME) END END --PRINT '@ALTER SQL-COMMAND: ' + @SQL EXEC sp_executesql @SQL PRINT 'ALTER TABLE was executed' SET @DFNAME = 'DEF@TABLE@ENT_@COL_NAME' SET @DFNAME = REPLACE(@DFNAME,'@ENT',CONVERT(VARCHAR(3),@pENTITY_ID)) SET @DFNAME = REPLACE(@DFNAME,'@TABLE',@ENTITY_TABLENAME) SET @DFNAME = REPLACE(@DFNAME,'@COL_NAME',@TEMP_COL_NAME) --PRINT '@DFNAME: ' + @DFNAME IF EXISTS(SELECT * FROM sys.default_constraints WHERE name = @DFNAME) BEGIN --PRINT 'DEFAULT KEY EXISTS' SET @DROP = 'ALTER TABLE @TABLE@ENT DROP CONSTRAINT DEF@TABLE@ENT_@COL_NAME' SET @DROP = REPLACE(@DROP,'@ENT',CONVERT(VARCHAR(3),@pENTITY_ID)) SET @DROP = REPLACE(@DROP,'@TABLE',@ENTITY_TABLENAME) SET @DROP = REPLACE(@DROP,'@COL_NAME',@TEMP_COL_NAME) --PRINT @DROP EXEC sp_executesql @DROP END IF LEN(@SQL_DEF) > 0 AND LEN(@DEFAULT_VALUE) > 0 BEGIN --PRINT '@SQL DEFAULT CONSTRAINT: ' + @SQL_DEF EXEC sp_executesql @SQL_DEF END END END ELSE IF @pACTION = 2 -- Für Delete BEGIN SET @DFNAME = 'DEF@TABLE@ENT_@COL_NAME' SET @DFNAME = REPLACE(@DFNAME,'@ENT',CONVERT(VARCHAR(3),@pENTITY_ID)) SET @DFNAME = REPLACE(@DFNAME,'@TABLE',@ENTITY_TABLENAME) SET @DFNAME = REPLACE(@DFNAME,'@COL_NAME',@TEMP_COL_NAME) --PRINT '@DFNAME: ' + @DFNAME IF EXISTS(SELECT * FROM sys.default_constraints WHERE name = @DFNAME) BEGIN --PRINT 'DEFAULT KEY EXISTS' SET @DROP = 'ALTER TABLE @TABLE@ENT DROP CONSTRAINT DEF@TABLE@ENT_@COL_NAME' SET @DROP = REPLACE(@DROP,'@ENT',CONVERT(VARCHAR(3),@pENTITY_ID)) SET @DROP = REPLACE(@DROP,'@TABLE',@ENTITY_TABLENAME) SET @DROP = REPLACE(@DROP,'@COL_NAME',@TEMP_COL_NAME) --PRINT @DROP EXEC sp_executesql @DROP END SET @SQL = 'ALTER TABLE @TABLE@ENT' + CHAR(13) + ' DROP COLUMN [@COL_NAME]' SET @SQL = REPLACE(@SQL,'@ENT',CONVERT(VARCHAR(3),@pENTITY_ID)) SET @SQL = REPLACE(@SQL,'@TABLE',@ENTITY_TABLENAME) SET @SQL = REPLACE(@SQL,'@COL_NAME',@pCOL_NAME) EXEC sp_executesql @DROP END EXEC PRPMO_CREATE_ENTITY_TABLE_VIEW @pENTITY_ID END GO ALTER FUNCTION [dbo].[FNPMO_GET_RIGHTS_FOR_DOC] (@pDOC_ID INTEGER) RETURNS @OUTPUT_RIGHTS TABLE (USR_ID INT,USR_NAME VARCHAR(50), USR_ECM_ID INT,USR_RIGHT INT, TYPE_WRIGHT VARCHAR(50)) AS BEGIN DECLARE @RECID INTEGER, @ENT_ID INTEGER, @GUID INTEGER, @RIGHT_USER VARCHAR(50), @RIGHT_USER_INT INTEGER, @RIGHT_USER_ECM_ID INTEGER, @AD_DOMAIN VARCHAR(250) SELECT @RIGHT_USER = T.AD_USER,@RIGHT_USER_INT = T1.GUID,@RIGHT_USER_ECM_ID = T1.USERID_FK_INT_ECM, @AD_DOMAIN = AD_DOMAIN FROM TBPMO_SERVICE_RIGHT_CONFIG T, TBDD_USER T1 WHERE T.GUID = 1 AND T.AD_USER = T1.USERNAME INSERT INTO @OUTPUT_RIGHTS(USR_ID,USR_NAME,USR_ECM_ID,USR_RIGHT,TYPE_WRIGHT) VALUES (@RIGHT_USER_INT,@RIGHT_USER,@RIGHT_USER_ECM_ID,7,'MAIN RIGHTUSER') DECLARE cursorRecords CURSOR FOR select T.RECORD_ID, T1.FORM_ID from TBPMO_DOC_RECORD_LINK T, TBPMO_RECORD T1 where T.DOC_ID = @pDOC_ID AND T.RECORD_ID = T1.GUID OPEN cursorRecords FETCH NEXT FROM cursorRecords INTO @RECID,@ENT_ID WHILE @@FETCH_STATUS = 0 BEGIN --PRINT 'RECORD-ID: ' + CONVERT(VARCHAR(10),@RECID) /*CURSOR 1 RECORDS BEGIN*/ -- ENTITY-SUPERVISOR INSERTEN INSERT INTO @OUTPUT_RIGHTS(USR_ID,USR_NAME,USR_ECM_ID,USR_RIGHT,TYPE_WRIGHT) SELECT T.USER_ID, T1.USERNAME, T1.USERID_FK_INT_ECM,T.RIGHT1, 'ENTITY_SUPERVISOR' FROM TBPMO_ENTITY_SUPERVISOR T, TBDD_USER T1 WHERE T.USER_ID = T1.GUID AND T.ENTITY_ID = @ENT_ID AND T.USER_ID NOT IN (SELECT USR_ID FROM @OUTPUT_RIGHTS) ORDER BY T1.USERNAME -- SUPERVISOR RECORD INSERTEN INSERT INTO @OUTPUT_RIGHTS(USR_ID,USR_NAME,USR_ECM_ID,USR_RIGHT,TYPE_WRIGHT) SELECT T.[USER_ID], T1.USERNAME, T1.USERID_FK_INT_ECM,3,'SUPERVISOR_CONTROL' FROM [VWPMO_SUPERVISOR_CONTROL] T, TBDD_USER T1 where T.USER_ID = T1.GUID AND T.RECORD_ID = @RECID and T.FORM_ID = @ENT_ID AND T.USER_ID NOT IN (SELECT USR_ID FROM @OUTPUT_RIGHTS) ORDER BY T1.USERNAME /**/ DECLARE @VALUE VARCHAR(100), @RIGHT INT, @TYPE_VALUE VARCHAR(50), @CONTR_TYPE_ID INT, @CONTROL_ID INT DECLARE cursorRecordRightControls CURSOR FOR SELECT T2.VALUE, CASE T.USED_FOR WHEN 'RIGHT READ/WRITE' THEN 3 ELSE 1 END, T.USER_GROUP, T1.CONTROL_TYPE_ID, T1.GUID FROM TBPMO_ENTITY_RIGHT_CONTROLS T, TBPMO_CONTROL T1, TBPMO_CONTROL_VALUE T2 WHERE T.CONTROL_ID = T1.GUID AND T.CONTROL_ID = T2.CONTROL_ID AND T.ENTITY_ID = @ENT_ID AND T.USED_FOR <> '' AND T2.RECORD_ID = @RECID OPEN cursorRecordRightControls FETCH NEXT FROM cursorRecordRightControls INTO @VALUE,@RIGHT,@TYPE_VALUE,@CONTR_TYPE_ID,@CONTROL_ID WHILE @@FETCH_STATUS = 0 BEGIN IF @TYPE_VALUE = 'USER' BEGIN DECLARE @TEMP_USRID INT SELECT @TEMP_USRID = [dbo].[FNPMO_GET_USERID_FORSTRING] (@VALUE) IF NOT EXISTS(SELECT USR_ID FROM @OUTPUT_RIGHTS WHERE USR_ID = @TEMP_USRID) BEGIN --UPDATE @USER_TABLE SET USR_RIGHT = @RIGHT WHERE USR_ID = @TEMP_USRID INSERT INTO @OUTPUT_RIGHTS(USR_ID,USR_NAME,USR_ECM_ID,USR_RIGHT,TYPE_WRIGHT) SELECT @TEMP_USRID, USERNAME, USERID_FK_INT_ECM,@RIGHT,'ENTITY RIGHT CONTROL USER: ' + convert(Varchar(10),@CONTROL_ID) FROM TBDD_USER WHERE GUID = @TEMP_USRID END END ELSE BEGIN DECLARE @GROUP_USER_ID INTEGER DECLARE cursorUserGroup CURSOR FOR SELECT DISTINCT T.USER_ID FROM TBDD_GROUPS_USER T,TBDD_USER_GROUPS T1, TBDD_USER T2 WHERE T.GROUP_ID = T1.GUID AND T.USER_ID = T2.GUID AND UPPER(T1.NAME) = UPPER(@VALUE) AND T.USER_ID <> @RIGHT_USER_INT AND T.USER_ID NOT IN (SELECT USR_ID FROM @OUTPUT_RIGHTS) OPEN cursorUserGroup FETCH NEXT FROM cursorUserGroup INTO @GROUP_USER_ID WHILE @@FETCH_STATUS = 0 BEGIN --IF NOT EXISTS(SELECT USR_ID FROM @OUTPUT_RIGHTS WHERE USR_ID = @TEMP_USRID) BEGIN INSERT INTO @OUTPUT_RIGHTS(USR_ID,USR_NAME,USR_ECM_ID,USR_RIGHT,TYPE_WRIGHT) SELECT @GROUP_USER_ID,USERNAME, USERID_FK_INT_ECM,@RIGHT,'ENTITY RIGHT CONTROL GROUP: ' + convert(Varchar(10),@CONTROL_ID) FROM TBDD_USER WHERE GUID = @GROUP_USER_ID END --UPDATE @USER_TABLE SET USR_RIGHT = @RIGHT WHERE USR_ID = @GROUP_USER_ID FETCH NEXT FROM cursorUserGroup INTO @GROUP_USER_ID END CLOSE cursorUserGroup DEALLOCATE cursorUserGroup END FETCH NEXT FROM cursorRecordRightControls INTO @VALUE,@RIGHT,@TYPE_VALUE,@CONTR_TYPE_ID,@CONTROL_ID END CLOSE cursorRecordRightControls DEALLOCATE cursorRecordRightControls /*CURSOR 2 RIGHT-CONTROLS END*/ IF EXISTS(SELECT GUID FROM TBPMO_RIGHT_USER WHERE ENTITY_ID = @ENT_ID) BEGIN DECLARE @WD_RIGHT INTEGER DECLARE c_REDO CURSOR FOR SELECT T.[USER_ID] ,T1.USERID_FK_INT_ECM, T1.USERNAME ,CASE WHEN T.[READ_ONLY_DOC] = 1 THEN 1 ELSE 3 END AS WD_RIGHT FROM TBPMO_RIGHT_USER T, TBDD_USER T1 WHERE T.ENTITY_ID = @ENT_ID AND T.USER_ID = T1.GUID OPEN c_REDO FETCH NEXT FROM c_REDO INTO @RIGHT_USER_INT,@RIGHT_USER_ECM_ID,@RIGHT_USER,@WD_RIGHT WHILE @@FETCH_STATUS = 0 BEGIN IF EXISTS(SELECT USR_ID FROM @OUTPUT_RIGHTS WHERE USR_ID = @RIGHT_USER_INT) BEGIN DECLARE @TEMP_RIGHT INT SELECT @TEMP_RIGHT = USR_RIGHT FROM @OUTPUT_RIGHTS WHERE USR_ID = @RIGHT_USER_INT IF @TEMP_RIGHT < @WD_RIGHT UPDATE @OUTPUT_RIGHTS SET USR_RIGHT = @WD_RIGHT WHERE USR_ID = @RIGHT_USER_INT END ELSE INSERT INTO @OUTPUT_RIGHTS(USR_ID,USR_NAME,USR_ECM_ID,USR_RIGHT,TYPE_WRIGHT) VALUES ( @RIGHT_USER_INT,@RIGHT_USER,@RIGHT_USER_ECM_ID,@WD_RIGHT,'RIGHT FROM USER_RIGHT') FETCH NEXT FROM c_REDO INTO @RIGHT_USER_INT,@RIGHT_USER_ECM_ID,@RIGHT_USER,@WD_RIGHT END CLOSE c_REDO DEALLOCATE c_REDO END FETCH NEXT FROM cursorRecords INTO @RECID,@ENT_ID /*CURSOR 1 RECORDS END*/ END CLOSE cursorRecords DEALLOCATE cursorRecords RETURN END GO ALTER PROCEDURE [dbo].[PRPMO_DELETE_USER](@pUSER_ID INT) AS BEGIN TRY IF OBJECT_ID(N'dbo.TBGI_FOLDERWATCH_USER', N'U') IS NOT NULL DELETE FROM TBGI_FOLDERWATCH_USER WHERE USER_ID = @pUSER_ID IF OBJECT_ID(N'dbo.TBHOTKEY_USER_PROFILE', N'U') IS NOT NULL DELETE FROM TBHOTKEY_USER_PROFILE WHERE USER_ID = @pUSER_ID DELETE FROM TBDD_USER_LOGIN_OUT WHERE USER_ID = @pUSER_ID DELETE FROM TBPMO_USER_GLOBAL_SEARCH WHERE USER_ID = @pUSER_ID DELETE FROM TBDD_CLIENT_USER WHERE USER_ID = @pUSER_ID DELETE FROM TBDD_GROUPS_USER WHERE USER_ID = @pUSER_ID DELETE FROM TBPMO_CONSTRUCTOR_USER_SQL WHERE USER_ID = @pUSER_ID DELETE FROM TBPMO_CONSTRUCTOR_USER WHERE USER_ID = @pUSER_ID DELETE FROM TBPMO_FOLDERWATCH_USER WHERE USER_ID = @pUSER_ID DELETE FROM TBPMO_FOLLUPEMAIL_USER WHERE USER_ID = @pUSER_ID DELETE FROM TBPMO_FOLLUPEMAIL_RECORD WHERE USER_ID = @pUSER_ID DELETE FROM TBPMO_USER_CONSTR_VIEW_TYPE WHERE USER_ID = @pUSER_ID DELETE FROM TBPMO_ENTITY_SUPERVISOR WHERE USER_ID = @pUSER_ID DELETE FROM TBDD_USER_MODULES WHERE USER_ID = @pUSER_ID DELETE FROM TBDD_VERSION_USER_UPDATE_PATH WHERE USER_ID = @pUSER_ID DELETE FROM TBDD_USER WHERE GUID = @pUSER_ID END TRY BEGIN CATCH PRINT 'FEHLER IN PROCEDURE: ' + CONVERT(VARCHAR(30),ERROR_PROCEDURE()) + ' - ZEILE: ' + CONVERT(VARCHAR(10),ERROR_LINE()) + ' - FEHLER-MESSAGE: ' + CONVERT(VARCHAR(500),ERROR_MESSAGE()) END CATCH GO