I have added the new
validate_obj_script.sh script I wrote to parse & validate the content of AE object scripting tabs. I developed this for our specific environment. We name all objects based on a three-character prefix. That’s the
prefix the script takes as an argument.
validate_obj_script.sh-p prefix [-v verbosity] ae_obj_script_file
The script is meant to read a file containing only the
AE_OBJ_SCRIPT lines output by the
parse_transport_case.sh script.
Here is an example of the output.
./validate_obj_script.sh -p ABC -v 0 Ae_obj_script_test2.txt
INFO : Checking objets for disallowed script lines.
INFO : SCRI object UC0.UAT.TEST#1_1.SCRI has 29 script lines with warnings or errors.
INFO : Problem Description Line# __/ Process tab \______________________________
ERROR: Wrong prefix (XYZ) 00004 -> :SET &RUN_ID# = ACTIVATE_UC_OBJECT(XYZ.WF1.JOBP,,,,,PASS_VALUES,"ABC",)
ERROR: Wrong prefix (XYZ) 00005 -> :SET &RUN_ID# = ACTIVATE_UC_OBJECT('XYZ.WF1.JOBP',,,,,PASS_VALUES,"ABC",)
ERROR: Wrong prefix (GHI) 00006 -> : SET &RUN_ID# = ACTIVATE_UC_OBJECT(GHI.WF1.JOBP",,,,,PASS_VALUES,"ABC",)
ERROR: Variable in obj. name 00007 -> : SET &RUN_ID# = ACTIVATE_UC_OBJECT(&VARIABLE#,,,,,PASS_VALUES,"ABC",)
ERROR: Variable in obj. name 00008 -> : SET &RUN_ID# = ACTIVATE_UC_OBJECT('&VARIABLE#',,,,,PASS_VALUES,"ABC",)
ERROR: Variable in obj. name 00009 -> : SET &RUN_ID# = ACTIVATE_UC_OBJECT("&VARIABLE#,,,,,PASS_VALUES,ABC,)
ERROR: Prefix missing (ABC) 00010 -> : SET &RUN_ID# = ACTIVATE_UC_OBJECT(LONGNAME,,,,,PASS_VALUES,ABC,)
ERROR: Prefix missing (ABC) 00011 -> : SET &RUN_ID# = ACTIVATE_UC_OBJECT('LONGNAME',,,,,PASS_VALUES,ABC,)
ERROR: Prefix missing (ABC) 00012 -> : SET &RUN_ID# = ACTIVATE_UC_OBJECT("LONGNAME",,,,,PASS_VALUES,ABC,)
WARN : Use only w/ own tasks 00013 -> :SET &RC# = MODIFY_TASK(123456789,STOP_MODIFY)
WARN : Use only w/ own tasks 00014 -> :SET &RC# = MODIFY_TASK(&RUNID#,STOP_MODIFY)
WARN : Use only w/ own tasks 00015 -> :SET &RC# = MODIFY_TASK('&RUNID#',STOP_MODIFY)
WARN : Use only w/ own tasks 00016 -> :SET &RC# = MODIFY_TASK("&RUNID#",STOP_MODIFY)
WARN : Use only w/ own tasks 00017 -> :SET &STATUS# = CANCEL_UC_OBJECT(&JOBNR#)
ERROR: Prohibited element 00018 -> :SET &MODOBJ# = MODIFY_UC_OBJECT(&RUNNR#, EARLIEST_STARTTIME, "MM.CLOSING","150000")
ERROR: Prefix missing (ABC) 00019 -> : REPLACE_STRUCTURE OBJECT="MM.DAY.MOD.051231"
ERROR: Prohibited element 00020 -> :SET &RB# = RERUN_UC_OBJECT(&PARENT_RUNID#)
ERROR: Prefix missing (ABC) 00021 -> :SET &RET# = RESTART_UC_OBJECT ("JOBS.SYSTEM.CHECK",LAST,,"GEN_JCL,VAR_MOD,MAN_RELEASE")
ERROR: Prohibited element 00022 -> : SET &RB# = ROLLBACK_UC_OBJECT(&ACT#)
ERROR: Prohibited element 00023 -> :SET &RET# = TOGGLE_OBJECT_STATUS(&RUNNR#, "STOP")
ERROR: Prefix missing (ABC) 00024 -> :SET &RET# = SET_SYNC("DB.STATUS","EXCLUSIVE")
ERROR: Prohibited element 00025 -> :SET &RET# = CREATE_OBJECT("CALE","FIRM.CALENDAR2003",,"Firm calendar for 2003")
ERROR: Prohibited element 00026 -> :SET &RET# = MODIFY_OBJECT("FIRM.CALENDAR",,"WORKDAYS","DD.MM.YYYY:01.05.2011","DD.MM.YYYY:01.05.2012")
ERROR: Prohibited element 00027 -> :SET &RET# = MOVE_OBJECT ("VIENNA","TIME_ZONES/OBJECTS")
ERROR: Prohibited element 00028 -> :SET &RET# = REMOVE_OBJECT("FIRM.CALENDAR2003")
ERROR: Prohibited element 00030 -> :TERMINATE SERVER,"AE#WP001"
ERROR: Prohibited element 00031 -> : SHUTDOWN AE1
ERROR: Prohibited element 00032 -> :SET_UC_SETTING WORKLOAD_MAX, WIN01, 1000
ERROR: Prohibited element 00033 -> :SET &RET# = MODIFY_SYSTEM("MODE", "QUEUE.JOBS", "GO")
INFO :
INFO : ================================================================================
INFO : AE objects processed : 1
INFO :
INFO : Total script lines processed : 33
INFO : AE script lines : 33
INFO : Native OS script lines : 0
INFO :
INFO : Controlled function/statement : ACTIVATE_UC_OBJECT
INFO : Total number of lines : 12
INFO : OK statements : 3
INFO : NOT OK statements : 9
INFO :
INFO : Controlled function/statement : REPLACE_STRUCTURE
INFO : Total number of lines : 1
INFO : OK statements : 0
INFO : NOT OK statements : 1
INFO :
INFO : Controlled function/statement : RESTART_UC_OBJECT
INFO : Total number of lines : 1
INFO : OK statements : 0
INFO : NOT OK statements : 1
INFO :
INFO : Controlled function/statement : SET_SYNC
INFO : Total number of lines : 1
INFO : OK statements : 0
INFO : NOT OK statements : 1
INFO :
INFO : Prohibited function/statement : MODIFY_UC_OBJECT
INFO : Total number of lines : 1
INFO :
INFO : Prohibited function/statement : RERUN_UC_OBJECT
INFO : Total number of lines : 1
INFO :
INFO : Prohibited function/statement : ROLLBACK_UC_OBJECT
INFO : Total number of lines : 1
INFO :
INFO : Prohibited function/statement : TOGGLE_OBJECT_STATUS
INFO : Total number of lines : 1
INFO :
INFO : Prohibited function/statement : CREATE_OBJECT
INFO : Total number of lines : 1
INFO :
INFO : Prohibited function/statement : MODIFY_OBJECT
INFO : Total number of lines : 1
INFO :
INFO : Prohibited function/statement : MOVE_OBJECT
INFO : Total number of lines : 1
INFO :
INFO : Prohibited function/statement : REMOVE_OBJECT
INFO : Total number of lines : 1
INFO :
INFO : Prohibited function/statement : TERMINATE
INFO : Total number of lines : 1
INFO :
INFO : Prohibited function/statement : SHUTDOWN
INFO : Total number of lines : 1
INFO :
INFO : Prohibited function/statement : SET_UC_SETTING
INFO : Total number of lines : 1
INFO :
INFO : Prohibited function/statement : MODIFY_SYSTEM
INFO : Total number of lines : 1
INFO :
INFO : Summary of errors & warnings:
INFO :
INFO : Objs w/ prohibited elements : 1
INFO : Lines w/ prohibited elements : 12
INFO :
INFO : Objs w/ disallowed lines : 1
INFO : Disallowed script lines : 12
INFO :
INFO : Objs w/ warnings : 1
INFO : Warning script lines : 5
INFO :
INFO : ********************************************************************************
INFO : PROHIBITED SCRIPT ELEMENTS
INFO :
INFO : 1 object contains a prohibited script element.
INFO :
INFO : The following script elements are NOT allowed:
INFO : MODIFY_UC_OBJECT, RERUN_UC_OBJECT, ROLLBACK_UC_OBJECT,
INFO : CREATE_OBJECT, MODIFY_OBJECT, MOVE_OBJECT, REMOVE_OBJECT,
INFO : MODIFY_SYSTEM, :SET_UC_SETTING, :SHUTDOWN, :TERMINATE, TOGGLE_SYSTEM_STATUS
INFO : ********************************************************************************
INFO :
INFO : ********************************************************************************
INFO : SCRIPT ELEMENTS WITH DISALLOWED CONTENT
INFO :
INFO : 1 object contains 12 script lines with disallowed content.
INFO :
INFO : The script elements ACTIVATE_UC_OBJECT, RESTART_UC_OBJECT, SET_SYNC, and
INFO : :REPLACE_STRUCTURE must refer only to objects belonging to the same prefix.
INFO :
INFO : The following are NOT allowed:
INFO : * ACTIVATE_UC_OBJECT or RESTART_UC_OBJECT statements that execute objects
INFO : belonging to a different prefix.
INFO : * SET_SYNC statements that refer to SYNC objects belonging to a different
INFO : prefix.
INFO : * :REPLACE_STRUCTURE statements that load workflows belonging to a
INFO : different prefix.
INFO :
INFO : All such statements must refer to objects belonging to the same prefix.
INFO : E.g., if your prefix is ABC and you want to execute the workflow ABC.WF1.JOBP,
INFO : the statement should look something like one of these examples:
INFO : :SET &RUN_ID# = ACTIVATE_UC_OBJECT("ABC.WF1.JOBP",,,,,PASS_VALUES,"ABC",)
INFO : :SET &RUN_ID# = RESTART_UC_OBJECT("ABC.WF1.JOBP",,)
INFO : :SET &RUN_ID# = SET_SYNC("ABC.DB2.SYNC","LOCK",)
INFO :
INFO : If you use a variable to set the name of the referenced object, your prefix
INFO : must be hard-coded and must appear at the beginning of the first argument.
INFO : Here are a few examples:
INFO : :SET &RUN_ID# = ACTIVATE_UC_OBJECT("ABC.&WF_NAME#",,,,,PASS_VALUES,"ABC",)
INFO : :SET &RUN_ID# = RESTART_UC_OBJECT("ABC.&WF_NAME#",,)
INFO : :SET &RUN_ID# = SET_SYNC("ABC.&SYNC_NAME#","LOCK",)
INFO : ********************************************************************************
INFO :
INFO : ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
INFO : AUDITED SCRIPT ELEMENTS
INFO :
INFO : 1 object contains an audited script element.
INFO :
INFO : The following script elements are allowed, but their use is carefully monitored:
INFO : MODIFY_TASK, MODIFY_UC_OBJECT
INFO :
INFO : Please ensure that you use these functions only with tasks belonging to the same
INFO : prefix.
INFO : ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Obviously, this script would have to be adapted to fit your particular needs. But I think a lot of the basic structure and logic could be reused. The regular expressions for matching AE scripting functions and statements took a while to get
just right. I hope this work benefits others.
Oh, one more thing... I have also included a small script called
logging_functions.sh that is sourced by the new script.