CREATE OR REPLACE PACKAGE BODY EFT_NOM.cg$CONTRACTS IS PROCEDURE validate_mandatory(cg$val_rec IN cg$row_type, loc IN VARCHAR2 DEFAULT ''); PROCEDURE up_autogen_columns(cg$rec IN OUT cg$row_type, cg$ind IN OUT cg$ind_type, operation IN VARCHAR2 DEFAULT 'INS', do_denorm IN BOOLEAN DEFAULT TRUE); PROCEDURE err_msg(msg IN VARCHAR2, type IN INTEGER, loc IN VARCHAR2 DEFAULT ''); -------------------------------------------------------------------------------- -- Name: raise_uk_not_updateable -- -- Description: Raise appropriate error when unique key updated -- -- Parameters: none -------------------------------------------------------------------------------- PROCEDURE raise_uk_not_updateable(uk IN VARCHAR2) IS BEGIN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_UNIQUE_KEY_UPDATE, cg$errors.ERR_UK_UPDATE, uk), 'E', 'API', cg$errors.API_UNIQUE_KEY_UPDATE, 'cg$CONTRACTS.raise_uk_not_updateable'); cg$errors.raise_failure; END raise_uk_not_updateable; -------------------------------------------------------------------------------- -- Name: raise_fk_not_transferable -- -- Description: Raise appropriate error when foreign key updated -- -- Parameters: none -------------------------------------------------------------------------------- PROCEDURE raise_fk_not_transferable(fk IN VARCHAR2) IS BEGIN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_FOREIGN_KEY_TRANS, cg$errors.ERR_FK_TRANS, fk), 'E', 'API', cg$errors.API_FOREIGN_KEY_TRANS, 'cg$CONTRACTS.raise_fk_not_transferable'); cg$errors.raise_failure; END raise_fk_not_transferable; -------------------------------------------------------------------------------- -- Name: up_autogen_columns -- -- Description: Specific autogeneration of column values and conversion to -- uppercase -- -- Parameters: cg$rec Record of row to be manipulated -- cg$ind Indicators for row -- operation Procedure where this procedure was called -------------------------------------------------------------------------------- PROCEDURE up_autogen_columns(cg$rec IN OUT cg$row_type, cg$ind IN OUT cg$ind_type, operation IN VARCHAR2 DEFAULT 'INS', do_denorm IN BOOLEAN DEFAULT TRUE) IS BEGIN IF (operation = 'INS') THEN BEGIN IF (cg$ind.CONT_ID = FALSE OR cg$rec.CONT_ID is NULL) THEN SELECT CONT_SEQ.nextval INTO cg$rec.CONT_ID FROM DUAL; cg$ind.CONT_ID := TRUE; END IF; EXCEPTION WHEN others THEN cg$errors.push(SQLERRM, 'E', 'ORA', SQLCODE, 'cg$CONTRACTS.up_autogen.CONT_ID.OTHERS'); cg$errors.raise_failure; END; cg$rec.CREATED_ON := sysdate; -- Server Derived Date Created NULL; ELSE -- (operation = 'UPD') NULL; END IF; -- (operation = 'INS') ELSE (operation = 'UPD') -- Statements executed for both 'INS' and 'UPD' cg$rec.CREATED_BY := caco_utilities.get_syus_name; -- Server Derived Derivation Expression EXCEPTION WHEN no_data_found THEN NULL; WHEN others THEN cg$errors.push( SQLERRM, 'E', 'ORA', SQLCODE, 'cg$CONTRACTS.up_autogen_columns'); cg$errors.raise_failure; END up_autogen_columns; -------------------------------------------------------------------------------- -- Name: validate_mandatory -- -- Description: Checks all mandatory columns are not null and raises appropriate -- error if not satisfied -- -- Parameters: cg$val_rec Record of row to be checked -- loc Place where this procedure was called for error -- trapping -------------------------------------------------------------------------------- PROCEDURE validate_mandatory(cg$val_rec IN cg$row_type, loc IN VARCHAR2 DEFAULT '') IS BEGIN IF (cg$val_rec.CREATED_BY IS NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_MAND_COLUMN_ISNULL, cg$errors.VAL_MAND, P120CREATED_BY), 'E', 'API', cg$errors.API_MAND_COLUMN_ISNULL, loc); END IF; IF (cg$val_rec.CONT_ID IS NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_MAND_COLUMN_ISNULL, cg$errors.VAL_MAND, P10CONT_ID), 'E', 'API', cg$errors.API_MAND_COLUMN_ISNULL, loc); END IF; IF (cg$val_rec.CONTRACT_NUMBER IS NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_MAND_COLUMN_ISNULL, cg$errors.VAL_MAND, P20CONTRACT_NUMBER), 'E', 'API', cg$errors.API_MAND_COLUMN_ISNULL, loc); END IF; IF (cg$val_rec.VALIDATION_WINDOW IS NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_MAND_COLUMN_ISNULL, cg$errors.VAL_MAND, P60VALIDATION_WINDOW), 'E', 'API', cg$errors.API_MAND_COLUMN_ISNULL, loc); END IF; IF (cg$val_rec.VALIDATION_ACTION IS NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_MAND_COLUMN_ISNULL, cg$errors.VAL_MAND, P63VALIDATION_ACTION), 'E', 'API', cg$errors.API_MAND_COLUMN_ISNULL, loc); END IF; IF (cg$val_rec.VALIDATION_EXCEPTION IS NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_MAND_COLUMN_ISNULL, cg$errors.VAL_MAND, P66VALIDATION_EXCEPTION), 'E', 'API', cg$errors.API_MAND_COLUMN_ISNULL, loc); END IF; IF (cg$val_rec.CUST_ID IS NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_MAND_COLUMN_ISNULL, cg$errors.VAL_MAND, P110CUST_ID), 'E', 'API', cg$errors.API_MAND_COLUMN_ISNULL, loc); END IF; IF (cg$val_rec.CREATED_ON IS NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_MAND_COLUMN_ISNULL, cg$errors.VAL_MAND, P130CREATED_ON), 'E', 'API', cg$errors.API_MAND_COLUMN_ISNULL, loc); END IF; IF (cg$val_rec.SPTE_ID IS NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_MAND_COLUMN_ISNULL, cg$errors.VAL_MAND, P140SPTE_ID), 'E', 'API', cg$errors.API_MAND_COLUMN_ISNULL, loc); END IF; NULL; END validate_mandatory; -------------------------------------------------------------------------------- -- Name: validate_foreign_keys -- -- Description: Checks all mandatory columns are not null and raises appropriate -- error if not satisfied -- -- Parameters: cg$rec Record of row to be checked -------------------------------------------------------------------------------- PROCEDURE validate_foreign_keys_ins(cg$rec IN cg$row_type) IS fk_check INTEGER; BEGIN NULL; END; PROCEDURE validate_foreign_keys_upd( cg$rec IN cg$row_type, cg$old_rec IN cg$row_type, cg$ind IN cg$ind_type) IS fk_check INTEGER; BEGIN NULL; END; PROCEDURE validate_foreign_keys_del(cg$rec IN cg$row_type) IS fk_check INTEGER; BEGIN NULL; END; -------------------------------------------------------------------------------- -- Name: slct -- -- Description: Selects into the given parameter all the attributes for the row -- given by the primary key -- -- Parameters: cg$sel_rec Record of row to be selected into using its PK -------------------------------------------------------------------------------- PROCEDURE slct(cg$sel_rec IN OUT cg$row_type) IS BEGIN IF cg$sel_rec.the_rowid is null THEN SELECT CREATED_BY , CONT_ID , CONTRACT_NUMBER , OPERATIONS_CONTACT , BUSINESS_CONTACT , RECEIVE_BEFORE_START , VALIDATION_WINDOW , VALIDATION_ACTION , VALIDATION_EXCEPTION , VALID_FROM , VALID_UNTIL , STATUS , COTE_ID , CUST_ID , CREATED_ON , SPTE_ID , rowid INTO cg$sel_rec.CREATED_BY , cg$sel_rec.CONT_ID , cg$sel_rec.CONTRACT_NUMBER , cg$sel_rec.OPERATIONS_CONTACT , cg$sel_rec.BUSINESS_CONTACT , cg$sel_rec.RECEIVE_BEFORE_START , cg$sel_rec.VALIDATION_WINDOW , cg$sel_rec.VALIDATION_ACTION , cg$sel_rec.VALIDATION_EXCEPTION , cg$sel_rec.VALID_FROM , cg$sel_rec.VALID_UNTIL , cg$sel_rec.STATUS , cg$sel_rec.COTE_ID , cg$sel_rec.CUST_ID , cg$sel_rec.CREATED_ON , cg$sel_rec.SPTE_ID ,cg$sel_rec.the_rowid FROM CONTRACTS WHERE CONT_ID = cg$sel_rec.CONT_ID; ELSE SELECT CREATED_BY , CONT_ID , CONTRACT_NUMBER , OPERATIONS_CONTACT , BUSINESS_CONTACT , RECEIVE_BEFORE_START , VALIDATION_WINDOW , VALIDATION_ACTION , VALIDATION_EXCEPTION , VALID_FROM , VALID_UNTIL , STATUS , COTE_ID , CUST_ID , CREATED_ON , SPTE_ID , rowid INTO cg$sel_rec.CREATED_BY , cg$sel_rec.CONT_ID , cg$sel_rec.CONTRACT_NUMBER , cg$sel_rec.OPERATIONS_CONTACT , cg$sel_rec.BUSINESS_CONTACT , cg$sel_rec.RECEIVE_BEFORE_START , cg$sel_rec.VALIDATION_WINDOW , cg$sel_rec.VALIDATION_ACTION , cg$sel_rec.VALIDATION_EXCEPTION , cg$sel_rec.VALID_FROM , cg$sel_rec.VALID_UNTIL , cg$sel_rec.STATUS , cg$sel_rec.COTE_ID , cg$sel_rec.CUST_ID , cg$sel_rec.CREATED_ON , cg$sel_rec.SPTE_ID ,cg$sel_rec.the_rowid FROM CONTRACTS WHERE rowid = cg$sel_rec.the_rowid; END IF; EXCEPTION WHEN OTHERS THEN cg$errors.push(SQLERRM, 'E', 'ORA', SQLCODE, 'cg$CONTRACTS.slct.others'); cg$errors.raise_failure; END slct; -------------------------------------------------------------------------------- -- Name: cascade_update -- -- Description: Updates all child tables affected by a change to CONTRACTS -- -- Parameters: cg$rec Record of CONTRACTS current values -- cg$old_rec Record of CONTRACTS previous values -------------------------------------------------------------------------------- PROCEDURE cascade_update(cg$new_rec IN OUT cg$row_type, cg$old_rec IN cg$row_type) IS BEGIN NULL; END cascade_update; -------------------------------------------------------------------------------- -- Name: validate_domain_cascade_update -- -- Description: Implement the Domain Key Constraint Cascade Updates Resticts rule -- of each child table that references this tableCONTRACTS -- -- Parameters: cg$old_rec Record of CONTRACTS current values -------------------------------------------------------------------------------- PROCEDURE validate_domain_cascade_update( cg$old_rec IN cg$row_type ) IS dk_check INTEGER; BEGIN NULL; END validate_domain_cascade_update; ----------------------------------------------------------------------------------------- -- Name: domain_cascade_update -- -- Description: Implement the Domain Key Constraint Cascade Updates rules of each -- child table that references this table CONTRACTS -- -- Parameters: cg$new_rec New values for CONTRACTS's domain key constraint columns -- cg$new_ind Indicates changed CONTRACTS's domain key constraint columns -- cg$old_rec Current values for CONTRACTS's domain key constraint columns ----------------------------------------------------------------------------------------- PROCEDURE domain_cascade_update(cg$new_rec IN OUT cg$row_type, cg$new_ind IN OUT cg$ind_type, cg$old_rec IN cg$row_type) IS BEGIN NULL; END domain_cascade_update; -------------------------------------------------------------------------------- -- Name: cascade_delete -- -- Description: Delete all child tables affected by a delete to CONTRACTS -- -- Parameters: cg$rec Record of CONTRACTS current values -------------------------------------------------------------------------------- PROCEDURE cascade_delete(cg$old_rec IN OUT cg$row_type) IS BEGIN NULL; END cascade_delete; -------------------------------------------------------------------------------- -- Name: domain_cascade_delete -- -- Description: Implement the Domain Key Constraint Cascade Delete rules of each -- child table that references this tableCONTRACTS -- -- Parameters: cg$old_rec Record of CONTRACTS current values -------------------------------------------------------------------------------- PROCEDURE domain_cascade_delete( cg$old_rec IN cg$row_type ) IS BEGIN NULL; END domain_cascade_delete; -------------------------------------------------------------------------------- -- Name: validate_domain_cascade_delete -- -- Description: Implement the Domain Key Constraint Cascade Delete Restricts rule -- of each child table that references this tableCONTRACTS -- -- Parameters: cg$old_rec Record of CONTRACTS current values -------------------------------------------------------------------------------- PROCEDURE validate_domain_cascade_delete(cg$old_rec IN cg$row_type) IS dk_check INTEGER; BEGIN NULL; END validate_domain_cascade_delete; -------------------------------------------------------------------------------- -- Name: validate_arc -- -- Description: Checks for adherence to arc relationship -- -- Parameters: cg$rec Record of CONTRACTS current values -------------------------------------------------------------------------------- PROCEDURE validate_arc(cg$rec IN OUT cg$row_type) IS i NUMBER; BEGIN NULL; END validate_arc; -------------------------------------------------------------------------------- -- Name: validate_domain -- -- Description: Checks against reference table for values lying in a domain -- -- Parameters: cg$rec Record of CONTRACTS current values -------------------------------------------------------------------------------- PROCEDURE validate_domain(cg$rec IN OUT cg$row_type, cg$ind IN cg$ind_type DEFAULT cg$ind_true) IS dummy NUMBER; found BOOLEAN; no_tabview EXCEPTION; PRAGMA EXCEPTION_INIT(no_tabview, -942); BEGIN found := false; IF (cg$ind.VALIDATION_ACTION AND cg$rec.VALIDATION_ACTION IS NOT NULL) THEN FOR c IN (SELECT RV_LOW_VALUE, RV_HIGH_VALUE FROM CG_REF_CODES WHERE RV_DOMAIN = 'CONTRACTS.VALIDATION_ACTION' ) LOOP IF ( c.RV_HIGH_VALUE IS NULL AND cg$rec.VALIDATION_ACTION = c.RV_LOW_VALUE ) OR ( c.RV_HIGH_VALUE IS NOT NULL AND cg$rec.VALIDATION_ACTION BETWEEN c.RV_LOW_VALUE AND c.RV_HIGH_VALUE ) THEN found := true; EXIT; END IF; END LOOP; IF ( NOT found ) THEN cg$errors.push( cg$errors.MsgGetText(cg$errors.API_RV_LOOKUP_FAIL, cg$errors.APIMSG_RV_LOOKUP_FAIL, cg$rec.VALIDATION_ACTION,'CONTRACTS','VALIDATION_ACTION'), 'E', 'API', cg$errors.API_RV_LOOKUP_FAIL, 'cg$CONTRACTS.v_domain.no_data_found' ); cg$errors.raise_failure; END IF; END IF; found := false; IF (cg$ind.VALIDATION_EXCEPTION AND cg$rec.VALIDATION_EXCEPTION IS NOT NULL) THEN FOR c IN (SELECT RV_LOW_VALUE, RV_HIGH_VALUE FROM CG_REF_CODES WHERE RV_DOMAIN = 'CONTRACTS.VALIDATION_EXCEPTION' ) LOOP IF ( c.RV_HIGH_VALUE IS NULL AND cg$rec.VALIDATION_EXCEPTION = c.RV_LOW_VALUE ) OR ( c.RV_HIGH_VALUE IS NOT NULL AND cg$rec.VALIDATION_EXCEPTION BETWEEN c.RV_LOW_VALUE AND c.RV_HIGH_VALUE ) THEN found := true; EXIT; END IF; END LOOP; IF ( NOT found ) THEN cg$errors.push( cg$errors.MsgGetText(cg$errors.API_RV_LOOKUP_FAIL, cg$errors.APIMSG_RV_LOOKUP_FAIL, cg$rec.VALIDATION_EXCEPTION,'CONTRACTS','VALIDATION_EXCEPTION'), 'E', 'API', cg$errors.API_RV_LOOKUP_FAIL, 'cg$CONTRACTS.v_domain.no_data_found' ); cg$errors.raise_failure; END IF; END IF; NULL; EXCEPTION WHEN cg$errors.cg$error THEN cg$errors.raise_failure; WHEN no_tabview THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_RV_TAB_NOT_FOUND, cg$errors.APIMSG_RV_TAB_NOT_FOUND, 'CG_REF_CODES','CONTRACTS'), 'E', 'API', cg$errors.API_RV_TAB_NOT_FOUND, 'cg$CONTRACTS.v_domain.no_reftable_found'); cg$errors.raise_failure; WHEN OTHERS THEN cg$errors.push(SQLERRM, 'E', 'ORA', SQLCODE, 'cg$CONTRACTS.v_domain.others'); cg$errors.raise_failure; END validate_domain; -------------------------------------------------------------------------------- -- Name: err_msg -- -- Description: Pushes onto stack appropriate user defined error message -- depending on the rule violated -- -- Parameters: msg Oracle error message -- type Type of violation e.g. check_constraint: ERR_CHECK_CON -- loc Place where this procedure was called for error -- trapping -------------------------------------------------------------------------------- PROCEDURE err_msg(msg IN VARCHAR2, type IN INTEGER, loc IN VARCHAR2 DEFAULT '') IS con_name VARCHAR2(240); BEGIN con_name := cg$errors.parse_constraint(msg, type); IF (con_name = 'CONT_PK_1') THEN cg$errors.push(nvl(CONT_PK_1 ,cg$errors.MsgGetText(cg$errors.API_PK_CON_VIOLATED ,cg$errors.APIMSG_PK_VIOLAT ,'CONT_PK_1' ,'CONTRACTS')), 'E', 'API', cg$errors.API_PK_CON_VIOLATED, loc); ELSIF (con_name = 'CONT_CONT_UK') THEN cg$errors.push(nvl(CONT_CONT_UK ,cg$errors.MsgGetText(cg$errors.API_UQ_CON_VIOLATED ,cg$errors.APIMSG_UK_VIOLAT ,'CONT_CONT_UK' ,'CONTRACTS')), 'E', 'API', cg$errors.API_UQ_CON_VIOLATED, loc); ELSIF (con_name = 'CONT_CUST_FK') THEN cg$errors.push(nvl(CONT_CUST_FK ,cg$errors.MsgGetText(cg$errors.API_FK_CON_VIOLATED ,cg$errors.APIMSG_FK_VIOLAT ,'CONT_CUST_FK' ,'CONTRACTS')), 'E', 'API', cg$errors.API_FK_CON_VIOLATED, loc); ELSIF (con_name = 'CONT_SYTE_FK') THEN cg$errors.push(nvl(CONT_SYTE_FK ,cg$errors.MsgGetText(cg$errors.API_FK_CON_VIOLATED ,cg$errors.APIMSG_FK_VIOLAT ,'CONT_SYTE_FK' ,'CONTRACTS')), 'E', 'API', cg$errors.API_FK_CON_VIOLATED, loc); ELSIF (con_name = 'CONT_COTE_FK') THEN cg$errors.push(nvl(CONT_COTE_FK ,cg$errors.MsgGetText(cg$errors.API_FK_CON_VIOLATED ,cg$errors.APIMSG_FK_VIOLAT ,'CONT_COTE_FK' ,'CONTRACTS')), 'E', 'API', cg$errors.API_FK_CON_VIOLATED, loc); ELSE cg$errors.push(SQLERRM, 'E', 'ORA', SQLCODE, loc); END IF; END err_msg; -------------------------------------------------------------------------------- -- Name: doLobs -- -- Description: This function is updating lob columns -- -- Parameters: cg$rec Record of row to be inserted -- cg$ind Record of columns specifically set -------------------------------------------------------------------------------- PROCEDURE doLobs(cg$rec IN OUT cg$row_type, cg$ind IN OUT cg$ind_type) IS BEGIN NULL; END doLobs; -------------------------------------------------------------------------------- -- Name: ins -- -- Description: API insert procedure -- -- Parameters: cg$rec Record of row to be inserted -- cg$ind Record of columns specifically set -- do_ins Whether we want the actual INSERT to occur -------------------------------------------------------------------------------- PROCEDURE ins(cg$rec IN OUT cg$row_type, cg$ind IN OUT cg$ind_type, do_ins IN BOOLEAN DEFAULT TRUE) IS cg$tmp_rec cg$row_type; -- Constant default values D60_VALIDATION_WINDOW CONSTANT CONTRACTS.VALIDATION_WINDOW%TYPE := 0; D63_VALIDATION_ACTION CONSTANT CONTRACTS.VALIDATION_ACTION%TYPE := 'I'; D66_VALIDATION_EXCEPTION CONSTANT CONTRACTS.VALIDATION_EXCEPTION%TYPE := 'CO'; D90_STATUS CONSTANT CONTRACTS.STATUS%TYPE := 'O'; BEGIN -- Application_logic Pre-Insert <> -- Application_logic Pre-Insert << End >> -- Defaulted IF NOT (cg$ind.VALIDATION_WINDOW) THEN cg$rec.VALIDATION_WINDOW := D60_VALIDATION_WINDOW; END IF; IF NOT (cg$ind.VALIDATION_ACTION) THEN cg$rec.VALIDATION_ACTION := D63_VALIDATION_ACTION; END IF; IF NOT (cg$ind.VALIDATION_EXCEPTION) THEN cg$rec.VALIDATION_EXCEPTION := D66_VALIDATION_EXCEPTION; END IF; IF NOT (cg$ind.STATUS) THEN cg$rec.STATUS := D90_STATUS; END IF; -- Auto-generated and uppercased columns up_autogen_columns(cg$rec, cg$ind, 'INS', do_ins); called_from_package := TRUE; IF (do_ins) THEN validate_foreign_keys_ins(cg$rec); validate_arc(cg$rec); validate_domain(cg$rec); INSERT INTO CONTRACTS (CREATED_BY ,CONT_ID ,CONTRACT_NUMBER ,OPERATIONS_CONTACT ,BUSINESS_CONTACT ,RECEIVE_BEFORE_START ,VALIDATION_WINDOW ,VALIDATION_ACTION ,VALIDATION_EXCEPTION ,VALID_FROM ,VALID_UNTIL ,STATUS ,COTE_ID ,CUST_ID ,CREATED_ON ,SPTE_ID) VALUES (cg$rec.CREATED_BY ,cg$rec.CONT_ID ,cg$rec.CONTRACT_NUMBER ,cg$rec.OPERATIONS_CONTACT ,cg$rec.BUSINESS_CONTACT ,cg$rec.RECEIVE_BEFORE_START ,cg$rec.VALIDATION_WINDOW ,cg$rec.VALIDATION_ACTION ,cg$rec.VALIDATION_EXCEPTION ,cg$rec.VALID_FROM ,cg$rec.VALID_UNTIL ,cg$rec.STATUS ,cg$rec.COTE_ID ,cg$rec.CUST_ID ,cg$rec.CREATED_ON ,cg$rec.SPTE_ID ); doLobs(cg$rec, cg$ind); slct(cg$rec); upd_oper_denorm2(cg$rec, cg$tmp_rec, cg$ind, 'INS'); END IF; called_from_package := FALSE; -- Application logic Post-Insert <> -- Application logic Post-Insert << End >> EXCEPTION WHEN cg$errors.cg$error THEN called_from_package := FALSE; cg$errors.raise_failure; WHEN cg$errors.mandatory_missing THEN validate_mandatory(cg$rec, 'cg$CONTRACTS.ins.mandatory_missing'); called_from_package := FALSE; cg$errors.raise_failure; WHEN cg$errors.check_violation THEN err_msg(SQLERRM, cg$errors.ERR_CHECK_CON, 'cg$CONTRACTS.ins.check_violation'); called_from_package := FALSE; cg$errors.raise_failure; WHEN cg$errors.fk_violation THEN err_msg(SQLERRM, cg$errors.ERR_FOREIGN_KEY, 'cg$CONTRACTS.ins.fk_violation'); called_from_package := FALSE; cg$errors.raise_failure; WHEN cg$errors.uk_violation THEN err_msg(SQLERRM, cg$errors.ERR_UNIQUE_KEY, 'cg$CONTRACTS.ins.uk_violation'); called_from_package := FALSE; cg$errors.raise_failure; WHEN OTHERS THEN cg$errors.push(SQLERRM, 'E', 'ORA', SQLCODE, 'cg$CONTRACTS.ins.others'); called_from_package := FALSE; cg$errors.raise_failure; END ins; -------------------------------------------------------------------------------- -- Name: upd -- -- Description: API update procedure -- -- Parameters: cg$rec Record of row to be updated -- cg$ind Record of columns specifically set -- do_upd Whether we want the actual UPDATE to occur -------------------------------------------------------------------------------- PROCEDURE upd(cg$rec IN OUT cg$row_type, cg$ind IN OUT cg$ind_type, do_upd IN BOOLEAN DEFAULT TRUE, cg$pk IN cg$row_type DEFAULT NULL ) IS cg$upd_rec cg$row_type; cg$old_rec cg$row_type; RECORD_LOGGED BOOLEAN := FALSE; BEGIN -- Application_logic Pre-Update <> -- Application_logic Pre-Update << End >> IF ( cg$pk.CONT_ID IS NULL ) THEN cg$upd_rec.CONT_ID := cg$rec.CONT_ID; ELSE cg$upd_rec.CONT_ID := cg$pk.CONT_ID; END IF; cg$old_rec.CONT_ID := cg$upd_rec.CONT_ID; IF ( cg$pk.the_rowid IS NULL ) THEN cg$upd_rec.the_rowid := cg$rec.the_rowid; ELSE cg$upd_rec.the_rowid := cg$pk.the_rowid; END IF; cg$old_rec.the_rowid := cg$upd_rec.the_rowid; IF ( do_upd ) THEN slct(cg$upd_rec); -- Report error if attempt to update non updateable Primary Key CONT_PK_1 IF (cg$ind.CONT_ID AND cg$rec.CONT_ID != cg$upd_rec.CONT_ID) THEN raise_uk_not_updateable('CONT_PK_1'); END IF; IF NOT (cg$ind.CREATED_BY) THEN cg$rec.CREATED_BY := cg$upd_rec.CREATED_BY; END IF; IF NOT (cg$ind.CONT_ID) THEN cg$rec.CONT_ID := cg$upd_rec.CONT_ID; END IF; IF NOT (cg$ind.CONTRACT_NUMBER) THEN cg$rec.CONTRACT_NUMBER := cg$upd_rec.CONTRACT_NUMBER; END IF; IF NOT (cg$ind.OPERATIONS_CONTACT) THEN cg$rec.OPERATIONS_CONTACT := cg$upd_rec.OPERATIONS_CONTACT; END IF; IF NOT (cg$ind.BUSINESS_CONTACT) THEN cg$rec.BUSINESS_CONTACT := cg$upd_rec.BUSINESS_CONTACT; END IF; IF NOT (cg$ind.RECEIVE_BEFORE_START) THEN cg$rec.RECEIVE_BEFORE_START := cg$upd_rec.RECEIVE_BEFORE_START; END IF; IF NOT (cg$ind.VALIDATION_WINDOW) THEN cg$rec.VALIDATION_WINDOW := cg$upd_rec.VALIDATION_WINDOW; END IF; IF NOT (cg$ind.VALIDATION_ACTION) THEN cg$rec.VALIDATION_ACTION := cg$upd_rec.VALIDATION_ACTION; END IF; IF NOT (cg$ind.VALIDATION_EXCEPTION) THEN cg$rec.VALIDATION_EXCEPTION := cg$upd_rec.VALIDATION_EXCEPTION; END IF; IF NOT (cg$ind.VALID_FROM) THEN cg$rec.VALID_FROM := cg$upd_rec.VALID_FROM; END IF; IF NOT (cg$ind.VALID_UNTIL) THEN cg$rec.VALID_UNTIL := cg$upd_rec.VALID_UNTIL; END IF; IF NOT (cg$ind.STATUS) THEN cg$rec.STATUS := cg$upd_rec.STATUS; END IF; IF NOT (cg$ind.COTE_ID) THEN cg$rec.COTE_ID := cg$upd_rec.COTE_ID; END IF; IF NOT (cg$ind.CUST_ID) THEN cg$rec.CUST_ID := cg$upd_rec.CUST_ID; END IF; IF NOT (cg$ind.CREATED_ON) THEN cg$rec.CREATED_ON := cg$upd_rec.CREATED_ON; END IF; IF NOT (cg$ind.SPTE_ID) THEN cg$rec.SPTE_ID := cg$upd_rec.SPTE_ID; END IF; ELSE -- Perform checks if called from a trigger -- Indicators are only set on changed values null; -- Report error if attempt to update non updateable Primary Key CONT_PK_1 IF ( cg$ind.CONT_ID ) THEN raise_uk_not_updateable('CONT_PK_1'); END IF; END IF; up_autogen_columns(cg$rec, cg$ind, 'UPD', do_upd); -- Auto-generated and uppercased columns -- Now do update if updateable columns exist IF (do_upd) THEN DECLARE called_from BOOLEAN := called_from_package; BEGIN called_from_package := TRUE; slct(cg$old_rec); validate_foreign_keys_upd(cg$rec, cg$old_rec, cg$ind); validate_arc(cg$rec); validate_domain(cg$rec, cg$ind); validate_domain_cascade_update(cg$old_rec); IF cg$rec.the_rowid is null THEN UPDATE CONTRACTS SET CREATED_BY = cg$rec.CREATED_BY ,CONTRACT_NUMBER = cg$rec.CONTRACT_NUMBER ,OPERATIONS_CONTACT = cg$rec.OPERATIONS_CONTACT ,BUSINESS_CONTACT = cg$rec.BUSINESS_CONTACT ,RECEIVE_BEFORE_START = cg$rec.RECEIVE_BEFORE_START ,VALIDATION_WINDOW = cg$rec.VALIDATION_WINDOW ,VALIDATION_ACTION = cg$rec.VALIDATION_ACTION ,VALIDATION_EXCEPTION = cg$rec.VALIDATION_EXCEPTION ,VALID_FROM = cg$rec.VALID_FROM ,VALID_UNTIL = cg$rec.VALID_UNTIL ,STATUS = cg$rec.STATUS ,COTE_ID = cg$rec.COTE_ID ,CUST_ID = cg$rec.CUST_ID ,CREATED_ON = cg$rec.CREATED_ON ,SPTE_ID = cg$rec.SPTE_ID WHERE CONT_ID = cg$rec.CONT_ID; null; ELSE UPDATE CONTRACTS SET CREATED_BY = cg$rec.CREATED_BY ,CONTRACT_NUMBER = cg$rec.CONTRACT_NUMBER ,OPERATIONS_CONTACT = cg$rec.OPERATIONS_CONTACT ,BUSINESS_CONTACT = cg$rec.BUSINESS_CONTACT ,RECEIVE_BEFORE_START = cg$rec.RECEIVE_BEFORE_START ,VALIDATION_WINDOW = cg$rec.VALIDATION_WINDOW ,VALIDATION_ACTION = cg$rec.VALIDATION_ACTION ,VALIDATION_EXCEPTION = cg$rec.VALIDATION_EXCEPTION ,VALID_FROM = cg$rec.VALID_FROM ,VALID_UNTIL = cg$rec.VALID_UNTIL ,STATUS = cg$rec.STATUS ,COTE_ID = cg$rec.COTE_ID ,CUST_ID = cg$rec.CUST_ID ,CREATED_ON = cg$rec.CREATED_ON ,SPTE_ID = cg$rec.SPTE_ID WHERE rowid = cg$rec.the_rowid; null; END IF; slct(cg$rec); upd_denorm2(cg$rec, cg$ind); upd_oper_denorm2(cg$rec, cg$old_rec, cg$ind, 'UPD'); cascade_update(cg$rec, cg$old_rec); domain_cascade_update(cg$rec, cg$ind, cg$old_rec); called_from_package := called_from; END; END IF; IF NOT (do_upd) THEN cg$table(idx).CREATED_BY := cg$rec.CREATED_BY; cg$tableind(idx).CREATED_BY := cg$ind.CREATED_BY; cg$table(idx).CONT_ID := cg$rec.CONT_ID; cg$tableind(idx).CONT_ID := cg$ind.CONT_ID; cg$table(idx).CONTRACT_NUMBER := cg$rec.CONTRACT_NUMBER; cg$tableind(idx).CONTRACT_NUMBER := cg$ind.CONTRACT_NUMBER; cg$table(idx).OPERATIONS_CONTACT := cg$rec.OPERATIONS_CONTACT; cg$tableind(idx).OPERATIONS_CONTACT := cg$ind.OPERATIONS_CONTACT; cg$table(idx).BUSINESS_CONTACT := cg$rec.BUSINESS_CONTACT; cg$tableind(idx).BUSINESS_CONTACT := cg$ind.BUSINESS_CONTACT; cg$table(idx).RECEIVE_BEFORE_START := cg$rec.RECEIVE_BEFORE_START; cg$tableind(idx).RECEIVE_BEFORE_START := cg$ind.RECEIVE_BEFORE_START; cg$table(idx).VALIDATION_WINDOW := cg$rec.VALIDATION_WINDOW; cg$tableind(idx).VALIDATION_WINDOW := cg$ind.VALIDATION_WINDOW; cg$table(idx).VALIDATION_ACTION := cg$rec.VALIDATION_ACTION; cg$tableind(idx).VALIDATION_ACTION := cg$ind.VALIDATION_ACTION; cg$table(idx).VALIDATION_EXCEPTION := cg$rec.VALIDATION_EXCEPTION; cg$tableind(idx).VALIDATION_EXCEPTION := cg$ind.VALIDATION_EXCEPTION; cg$table(idx).VALID_FROM := cg$rec.VALID_FROM; cg$tableind(idx).VALID_FROM := cg$ind.VALID_FROM; cg$table(idx).VALID_UNTIL := cg$rec.VALID_UNTIL; cg$tableind(idx).VALID_UNTIL := cg$ind.VALID_UNTIL; cg$table(idx).STATUS := cg$rec.STATUS; cg$tableind(idx).STATUS := cg$ind.STATUS; cg$table(idx).COTE_ID := cg$rec.COTE_ID; cg$tableind(idx).COTE_ID := cg$ind.COTE_ID; cg$table(idx).CUST_ID := cg$rec.CUST_ID; cg$tableind(idx).CUST_ID := cg$ind.CUST_ID; cg$table(idx).CREATED_ON := cg$rec.CREATED_ON; cg$tableind(idx).CREATED_ON := cg$ind.CREATED_ON; cg$table(idx).SPTE_ID := cg$rec.SPTE_ID; cg$tableind(idx).SPTE_ID := cg$ind.SPTE_ID; idx := idx + 1; END IF; -- Application_logic Post-Update <> -- Application_logic Post-Update << End >> EXCEPTION WHEN cg$errors.cg$error THEN called_from_package := FALSE; cg$errors.raise_failure; WHEN cg$errors.upd_mandatory_null THEN validate_mandatory(cg$rec, 'cg$CONTRACTS.upd.upd_mandatory_null'); called_from_package := FALSE; cg$errors.raise_failure; WHEN cg$errors.check_violation THEN err_msg(SQLERRM, cg$errors.ERR_CHECK_CON, 'cg$CONTRACTS.upd.check_violation'); called_from_package := FALSE; cg$errors.raise_failure; WHEN cg$errors.fk_violation THEN err_msg(SQLERRM, cg$errors.ERR_FOREIGN_KEY, 'cg$CONTRACTS.upd.fk_violation'); called_from_package := FALSE; cg$errors.raise_failure; WHEN cg$errors.uk_violation THEN err_msg(SQLERRM, cg$errors.ERR_UNIQUE_KEY, 'cg$CONTRACTS.upd.uk_violation'); called_from_package := FALSE; cg$errors.raise_failure; WHEN OTHERS THEN cg$errors.push(SQLERRM, 'E', 'ORA', SQLCODE, 'cg$CONTRACTS.upd.others'); called_from_package := FALSE; cg$errors.raise_failure; END upd; ---------------------------------------------------------------------------------------- -- Name: domain_cascade_upd -- -- Description: Update the Domain Constraint Key columns of CONTRACTS when the -- Cascade Update rule is Cascades and the domain table has been -- updated. Called from .domain_cascade_update(). -- -- Parameters: cg$rec New values for CONTRACTS's domain key constraint columns -- cg$ind Indicates changed CONTRACTS's domain key constraint columns -- cg$old_rec Current values for CONTRACTS's domain key constraint columns ---------------------------------------------------------------------------------------- PROCEDURE domain_cascade_upd( cg$rec IN OUT cg$row_type, cg$ind IN OUT cg$ind_type, cg$old_rec IN cg$row_type ) IS called_from BOOLEAN := called_from_package; BEGIN null; END domain_cascade_upd; -------------------------------------------------------------------------------- -- Name: upd_denorm -- -- Description: API procedure for simple denormalization -- -- Parameters: cg$rec Record of row to be updated -- cg$ind Record of columns specifically set -- do_upd Whether we want the actual UPDATE to occur -------------------------------------------------------------------------------- PROCEDURE upd_denorm2( cg$rec IN cg$row_type, cg$ind IN cg$ind_type ) IS BEGIN NULL; END upd_denorm2; -------------------------------------------------------------------------------- -- Name: upd_oper_denorm -- -- Description: API procedure for operation denormalization -- -- Parameters: cg$rec Record of row to be updated -- cg$ind Record of columns specifically set -- do_upd Whether we want the actual UPDATE to occur -------------------------------------------------------------------------------- PROCEDURE upd_oper_denorm2( cg$rec IN cg$row_type, cg$old_rec IN cg$row_type, cg$ind IN cg$ind_type, operation IN VARCHAR2 DEFAULT 'UPD' ) IS BEGIN NULL; END upd_oper_denorm2; -------------------------------------------------------------------------------- -- Name: del -- -- Description: API delete procedure -- -- Parameters: cg$pk Primary key record of row to be deleted -------------------------------------------------------------------------------- PROCEDURE del(cg$pk IN cg$pk_type, do_del IN BOOLEAN DEFAULT TRUE) IS BEGIN -- Application_logic Pre-Delete <> -- Application_logic Pre-Delete << End >> -- Delete the record called_from_package := TRUE; IF (do_del) THEN DECLARE cg$rec cg$row_type; cg$old_rec cg$row_type; cg$ind cg$ind_type; BEGIN cg$rec.CONT_ID := cg$pk.CONT_ID; slct(cg$rec); validate_foreign_keys_del(cg$rec); validate_domain_cascade_delete(cg$rec); IF cg$pk.the_rowid is null THEN DELETE CONTRACTS WHERE CONT_ID = cg$pk.CONT_ID; ELSE DELETE CONTRACTS WHERE rowid = cg$pk.the_rowid; END IF; upd_oper_denorm2(cg$rec, cg$old_rec, cg$ind, 'DEL'); cascade_delete(cg$rec); domain_cascade_delete(cg$rec); END; END IF; called_from_package := FALSE; -- Application_logic Post-Delete <> -- Application_logic Post-Delete << End >> EXCEPTION WHEN cg$errors.cg$error THEN called_from_package := FALSE; cg$errors.raise_failure; WHEN cg$errors.delete_restrict THEN err_msg(SQLERRM, cg$errors.ERR_DELETE_RESTRICT, 'cg$CONTRACTS.del.delete_restrict'); called_from_package := FALSE; cg$errors.raise_failure; WHEN no_data_found THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_DEL, cg$errors.ROW_DEL), 'E', 'ORA', SQLCODE, 'cg$CONTRACTS.del.no_data_found'); called_from_package := FALSE; cg$errors.raise_failure; WHEN OTHERS THEN cg$errors.push(SQLERRM, 'E', 'ORA', SQLCODE, 'cg$CONTRACTS.del.others'); called_from_package := FALSE; cg$errors.raise_failure; END del; -------------------------------------------------------------------------------- -- Name: lck -- -- Description: API lock procedure -- -- Parameters: cg$old_rec Calling apps view of record of row to be locked -- cg$old_ind Record of columns to raise error if modified -- nowait_flag TRUE lock with NOWAIT, FALSE don't fail if busy -------------------------------------------------------------------------------- PROCEDURE lck(cg$old_rec IN cg$row_type, cg$old_ind IN cg$ind_type, nowait_flag IN BOOLEAN DEFAULT TRUE) IS cg$tmp_rec cg$row_type; any_modified BOOLEAN := FALSE; BEGIN -- Application_logic Pre-Lock <> -- Application_logic Pre-Lock << End >> -- Do the row lock BEGIN IF (nowait_flag) THEN IF cg$old_rec.the_rowid is null THEN SELECT CREATED_BY , CONT_ID , CONTRACT_NUMBER , OPERATIONS_CONTACT , BUSINESS_CONTACT , RECEIVE_BEFORE_START , VALIDATION_WINDOW , VALIDATION_ACTION , VALIDATION_EXCEPTION , VALID_FROM , VALID_UNTIL , STATUS , COTE_ID , CUST_ID , CREATED_ON , SPTE_ID INTO cg$tmp_rec.CREATED_BY , cg$tmp_rec.CONT_ID , cg$tmp_rec.CONTRACT_NUMBER , cg$tmp_rec.OPERATIONS_CONTACT , cg$tmp_rec.BUSINESS_CONTACT , cg$tmp_rec.RECEIVE_BEFORE_START , cg$tmp_rec.VALIDATION_WINDOW , cg$tmp_rec.VALIDATION_ACTION , cg$tmp_rec.VALIDATION_EXCEPTION , cg$tmp_rec.VALID_FROM , cg$tmp_rec.VALID_UNTIL , cg$tmp_rec.STATUS , cg$tmp_rec.COTE_ID , cg$tmp_rec.CUST_ID , cg$tmp_rec.CREATED_ON , cg$tmp_rec.SPTE_ID FROM CONTRACTS WHERE CONT_ID = cg$old_rec.CONT_ID FOR UPDATE NOWAIT; ELSE SELECT CREATED_BY , CONT_ID , CONTRACT_NUMBER , OPERATIONS_CONTACT , BUSINESS_CONTACT , RECEIVE_BEFORE_START , VALIDATION_WINDOW , VALIDATION_ACTION , VALIDATION_EXCEPTION , VALID_FROM , VALID_UNTIL , STATUS , COTE_ID , CUST_ID , CREATED_ON , SPTE_ID INTO cg$tmp_rec.CREATED_BY , cg$tmp_rec.CONT_ID , cg$tmp_rec.CONTRACT_NUMBER , cg$tmp_rec.OPERATIONS_CONTACT , cg$tmp_rec.BUSINESS_CONTACT , cg$tmp_rec.RECEIVE_BEFORE_START , cg$tmp_rec.VALIDATION_WINDOW , cg$tmp_rec.VALIDATION_ACTION , cg$tmp_rec.VALIDATION_EXCEPTION , cg$tmp_rec.VALID_FROM , cg$tmp_rec.VALID_UNTIL , cg$tmp_rec.STATUS , cg$tmp_rec.COTE_ID , cg$tmp_rec.CUST_ID , cg$tmp_rec.CREATED_ON , cg$tmp_rec.SPTE_ID FROM CONTRACTS WHERE rowid = cg$old_rec.the_rowid FOR UPDATE NOWAIT; END IF; ELSE IF cg$old_rec.the_rowid is null THEN SELECT CREATED_BY , CONT_ID , CONTRACT_NUMBER , OPERATIONS_CONTACT , BUSINESS_CONTACT , RECEIVE_BEFORE_START , VALIDATION_WINDOW , VALIDATION_ACTION , VALIDATION_EXCEPTION , VALID_FROM , VALID_UNTIL , STATUS , COTE_ID , CUST_ID , CREATED_ON , SPTE_ID INTO cg$tmp_rec.CREATED_BY , cg$tmp_rec.CONT_ID , cg$tmp_rec.CONTRACT_NUMBER , cg$tmp_rec.OPERATIONS_CONTACT , cg$tmp_rec.BUSINESS_CONTACT , cg$tmp_rec.RECEIVE_BEFORE_START , cg$tmp_rec.VALIDATION_WINDOW , cg$tmp_rec.VALIDATION_ACTION , cg$tmp_rec.VALIDATION_EXCEPTION , cg$tmp_rec.VALID_FROM , cg$tmp_rec.VALID_UNTIL , cg$tmp_rec.STATUS , cg$tmp_rec.COTE_ID , cg$tmp_rec.CUST_ID , cg$tmp_rec.CREATED_ON , cg$tmp_rec.SPTE_ID FROM CONTRACTS WHERE CONT_ID = cg$old_rec.CONT_ID FOR UPDATE; ELSE SELECT CREATED_BY , CONT_ID , CONTRACT_NUMBER , OPERATIONS_CONTACT , BUSINESS_CONTACT , RECEIVE_BEFORE_START , VALIDATION_WINDOW , VALIDATION_ACTION , VALIDATION_EXCEPTION , VALID_FROM , VALID_UNTIL , STATUS , COTE_ID , CUST_ID , CREATED_ON , SPTE_ID INTO cg$tmp_rec.CREATED_BY , cg$tmp_rec.CONT_ID , cg$tmp_rec.CONTRACT_NUMBER , cg$tmp_rec.OPERATIONS_CONTACT , cg$tmp_rec.BUSINESS_CONTACT , cg$tmp_rec.RECEIVE_BEFORE_START , cg$tmp_rec.VALIDATION_WINDOW , cg$tmp_rec.VALIDATION_ACTION , cg$tmp_rec.VALIDATION_EXCEPTION , cg$tmp_rec.VALID_FROM , cg$tmp_rec.VALID_UNTIL , cg$tmp_rec.STATUS , cg$tmp_rec.COTE_ID , cg$tmp_rec.CUST_ID , cg$tmp_rec.CREATED_ON , cg$tmp_rec.SPTE_ID FROM CONTRACTS WHERE rowid = cg$old_rec.the_rowid FOR UPDATE; END IF; END IF; EXCEPTION WHEN cg$errors.cg$error THEN cg$errors.raise_failure; WHEN cg$errors.resource_busy THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_LCK, cg$errors.ROW_LCK), 'E', 'ORA', SQLCODE, 'cg$CONTRACTS.lck.resource_busy'); cg$errors.raise_failure; WHEN no_data_found THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_DEL, cg$errors.ROW_DEL), 'E', 'ORA', SQLCODE, 'cg$CONTRACTS.lck.no_data_found'); cg$errors.raise_failure; WHEN OTHERS THEN cg$errors.push(SQLERRM, 'E', 'ORA', SQLCODE, 'cg$CONTRACTS.lck.others'); cg$errors.raise_failure; END; -- Optional Columns IF (cg$old_ind.OPERATIONS_CONTACT) THEN IF (cg$tmp_rec.OPERATIONS_CONTACT IS NOT NULL AND cg$old_rec.OPERATIONS_CONTACT IS NOT NULL) THEN IF (cg$tmp_rec.OPERATIONS_CONTACT != cg$old_rec.OPERATIONS_CONTACT) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P30OPERATIONS_CONTACT ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; ELSIF (cg$tmp_rec.OPERATIONS_CONTACT IS NOT NULL OR cg$old_rec.OPERATIONS_CONTACT IS NOT NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P30OPERATIONS_CONTACT ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.BUSINESS_CONTACT) THEN IF (cg$tmp_rec.BUSINESS_CONTACT IS NOT NULL AND cg$old_rec.BUSINESS_CONTACT IS NOT NULL) THEN IF (cg$tmp_rec.BUSINESS_CONTACT != cg$old_rec.BUSINESS_CONTACT) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P40BUSINESS_CONTACT ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; ELSIF (cg$tmp_rec.BUSINESS_CONTACT IS NOT NULL OR cg$old_rec.BUSINESS_CONTACT IS NOT NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P40BUSINESS_CONTACT ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.RECEIVE_BEFORE_START) THEN IF (cg$tmp_rec.RECEIVE_BEFORE_START IS NOT NULL AND cg$old_rec.RECEIVE_BEFORE_START IS NOT NULL) THEN IF (cg$tmp_rec.RECEIVE_BEFORE_START != cg$old_rec.RECEIVE_BEFORE_START) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P50RECEIVE_BEFORE_START ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; ELSIF (cg$tmp_rec.RECEIVE_BEFORE_START IS NOT NULL OR cg$old_rec.RECEIVE_BEFORE_START IS NOT NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P50RECEIVE_BEFORE_START ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.VALID_FROM) THEN IF (cg$tmp_rec.VALID_FROM IS NOT NULL AND cg$old_rec.VALID_FROM IS NOT NULL) THEN IF (cg$tmp_rec.VALID_FROM != cg$old_rec.VALID_FROM) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P70VALID_FROM ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; ELSIF (cg$tmp_rec.VALID_FROM IS NOT NULL OR cg$old_rec.VALID_FROM IS NOT NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P70VALID_FROM ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.VALID_UNTIL) THEN IF (cg$tmp_rec.VALID_UNTIL IS NOT NULL AND cg$old_rec.VALID_UNTIL IS NOT NULL) THEN IF (cg$tmp_rec.VALID_UNTIL != cg$old_rec.VALID_UNTIL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P80VALID_UNTIL ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; ELSIF (cg$tmp_rec.VALID_UNTIL IS NOT NULL OR cg$old_rec.VALID_UNTIL IS NOT NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P80VALID_UNTIL ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.STATUS) THEN IF (cg$tmp_rec.STATUS IS NOT NULL AND cg$old_rec.STATUS IS NOT NULL) THEN IF (cg$tmp_rec.STATUS != cg$old_rec.STATUS) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P90STATUS ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; ELSIF (cg$tmp_rec.STATUS IS NOT NULL OR cg$old_rec.STATUS IS NOT NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P90STATUS ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.COTE_ID) THEN IF (cg$tmp_rec.COTE_ID IS NOT NULL AND cg$old_rec.COTE_ID IS NOT NULL) THEN IF (cg$tmp_rec.COTE_ID != cg$old_rec.COTE_ID) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P100COTE_ID ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; ELSIF (cg$tmp_rec.COTE_ID IS NOT NULL OR cg$old_rec.COTE_ID IS NOT NULL) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P100COTE_ID ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; -- Mandatory Columns IF (cg$old_ind.CREATED_BY) THEN IF (cg$tmp_rec.CREATED_BY != cg$old_rec.CREATED_BY) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P120CREATED_BY ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.CONT_ID) THEN IF (cg$tmp_rec.CONT_ID != cg$old_rec.CONT_ID) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P10CONT_ID ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.CONTRACT_NUMBER) THEN IF (cg$tmp_rec.CONTRACT_NUMBER != cg$old_rec.CONTRACT_NUMBER) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P20CONTRACT_NUMBER ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.VALIDATION_WINDOW) THEN IF (cg$tmp_rec.VALIDATION_WINDOW != cg$old_rec.VALIDATION_WINDOW) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P60VALIDATION_WINDOW ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.VALIDATION_ACTION) THEN IF (cg$tmp_rec.VALIDATION_ACTION != cg$old_rec.VALIDATION_ACTION) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P63VALIDATION_ACTION ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.VALIDATION_EXCEPTION) THEN IF (cg$tmp_rec.VALIDATION_EXCEPTION != cg$old_rec.VALIDATION_EXCEPTION) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P66VALIDATION_EXCEPTION ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.CUST_ID) THEN IF (cg$tmp_rec.CUST_ID != cg$old_rec.CUST_ID) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P110CUST_ID ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.CREATED_ON) THEN IF (cg$tmp_rec.CREATED_ON != cg$old_rec.CREATED_ON) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P130CREATED_ON ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (cg$old_ind.SPTE_ID) THEN IF (cg$tmp_rec.SPTE_ID != cg$old_rec.SPTE_ID) THEN cg$errors.push(cg$errors.MsgGetText(cg$errors.API_ROW_MOD, cg$errors.ROW_MOD, P140SPTE_ID ),'E', 'API', CG$ERRORS.API_MODIFIED, 'cg$CONTRACTS.lck'); any_modified := TRUE; END IF; END IF; IF (any_modified) THEN cg$errors.raise_failure; END IF; -- Application_logic Post-Lock <> -- Application_logic Post-Lock << End >> END lck; BEGIN cg$ind_true.CREATED_BY := TRUE; cg$ind_true.CONT_ID := TRUE; cg$ind_true.CONTRACT_NUMBER := TRUE; cg$ind_true.OPERATIONS_CONTACT := TRUE; cg$ind_true.BUSINESS_CONTACT := TRUE; cg$ind_true.RECEIVE_BEFORE_START := TRUE; cg$ind_true.VALIDATION_WINDOW := TRUE; cg$ind_true.VALIDATION_ACTION := TRUE; cg$ind_true.VALIDATION_EXCEPTION := TRUE; cg$ind_true.VALID_FROM := TRUE; cg$ind_true.VALID_UNTIL := TRUE; cg$ind_true.STATUS := TRUE; cg$ind_true.COTE_ID := TRUE; cg$ind_true.CUST_ID := TRUE; cg$ind_true.CREATED_ON := TRUE; cg$ind_true.SPTE_ID := TRUE; END cg$CONTRACTS; /