In this section, we will explore real-world applications of Control Language (CL) through detailed case studies. These case studies will help you understand how CL can be used to solve practical problems and automate tasks in various scenarios. Each case study will include a problem description, the CL solution, and a step-by-step explanation of the code.

Case Study 1: Automating Backup Processes

Problem Description

A company needs to automate its daily backup process to ensure that critical data is backed up every night without manual intervention. The backup process involves copying files from a production directory to a backup directory and logging the operation.

CL Solution

We will write a CL program that:

  1. Copies files from the production directory to the backup directory.
  2. Logs the operation with a timestamp.

Code Example

PGM
    DCL VAR(&TIMESTAMP) TYPE(*CHAR) LEN(20)
    DCL VAR(&LOGFILE) TYPE(*CHAR) LEN(50) VALUE('/logs/backup_log.txt')
    DCL VAR(&SRC_DIR) TYPE(*CHAR) LEN(50) VALUE('/prod_data/')
    DCL VAR(&DEST_DIR) TYPE(*CHAR) LEN(50) VALUE('/backup_data/')

    /* Get current timestamp */
    RTVSYSVAL SYSVAL(QDATETIME) RTNVAR(&TIMESTAMP)

    /* Copy files from production to backup directory */
    CPY OBJ(&SRC_DIR) TODIR(&DEST_DIR) REPLACE(*YES)

    /* Log the operation */
    ADDPFM FILE(&LOGFILE) MBR(*FIRST)
    WRKMBRPDM FILE(&LOGFILE) MBR(*FIRST) OPTION(*ADD) TEXT('Backup completed at ' *CAT &TIMESTAMP)

ENDPGM

Explanation

  1. Variable Declarations:

    • &TIMESTAMP: Stores the current date and time.
    • &LOGFILE: Path to the log file.
    • &SRC_DIR: Path to the source directory (production data).
    • &DEST_DIR: Path to the destination directory (backup data).
  2. Retrieve Current Timestamp:

    • RTVSYSVAL SYSVAL(QDATETIME) RTNVAR(&TIMESTAMP): Retrieves the current system date and time and stores it in &TIMESTAMP.
  3. Copy Files:

    • CPY OBJ(&SRC_DIR) TODIR(&DEST_DIR) REPLACE(*YES): Copies all files from the source directory to the destination directory, replacing any existing files.
  4. Log the Operation:

    • ADDPFM FILE(&LOGFILE) MBR(*FIRST): Adds a member to the log file if it doesn't already exist.
    • WRKMBRPDM FILE(&LOGFILE) MBR(*FIRST) OPTION(*ADD) TEXT('Backup completed at ' *CAT &TIMESTAMP): Writes a log entry with the timestamp indicating the backup completion.

Practical Exercise

Task: Modify the above CL program to include error handling. If the copy operation fails, log an error message instead of a success message.

Solution:

PGM
    DCL VAR(&TIMESTAMP) TYPE(*CHAR) LEN(20)
    DCL VAR(&LOGFILE) TYPE(*CHAR) LEN(50) VALUE('/logs/backup_log.txt')
    DCL VAR(&SRC_DIR) TYPE(*CHAR) LEN(50) VALUE('/prod_data/')
    DCL VAR(&DEST_DIR) TYPE(*CHAR) LEN(50) VALUE('/backup_data/')
    DCL VAR(&MSG) TYPE(*CHAR) LEN(100)

    /* Get current timestamp */
    RTVSYSVAL SYSVAL(QDATETIME) RTNVAR(&TIMESTAMP)

    /* Copy files from production to backup directory */
    CPY OBJ(&SRC_DIR) TODIR(&DEST_DIR) REPLACE(*YES)
    MONMSG MSGID(CPF0000) EXEC(DO)
        CHGVAR VAR(&MSG) VALUE('Backup failed at ' *CAT &TIMESTAMP)
    ENDDO
    ELSE DO
        CHGVAR VAR(&MSG) VALUE('Backup completed at ' *CAT &TIMESTAMP)
    ENDDO

    /* Log the operation */
    ADDPFM FILE(&LOGFILE) MBR(*FIRST)
    WRKMBRPDM FILE(&LOGFILE) MBR(*FIRST) OPTION(*ADD) TEXT(&MSG)

ENDPGM

Explanation of Changes

  1. Error Handling:
    • MONMSG MSGID(CPF0000) EXEC(DO): Monitors for any error messages during the copy operation.
    • CHGVAR VAR(&MSG) VALUE('Backup failed at ' *CAT &TIMESTAMP): Sets the log message to indicate failure if an error occurs.
    • ELSE DO: If no error occurs, sets the log message to indicate success.

Case Study 2: Automated Report Generation

Problem Description

A company needs to generate a daily sales report and email it to the management team. The report should be generated from a database and saved as a text file.

CL Solution

We will write a CL program that:

  1. Generates the sales report from the database.
  2. Saves the report as a text file.
  3. Emails the report to the management team.

Code Example

PGM
    DCL VAR(&TIMESTAMP) TYPE(*CHAR) LEN(20)
    DCL VAR(&REPORTFILE) TYPE(*CHAR) LEN(50) VALUE('/reports/sales_report.txt')
    DCL VAR(&EMAIL) TYPE(*CHAR) LEN(50) VALUE('[email protected]')

    /* Get current timestamp */
    RTVSYSVAL SYSVAL(QDATETIME) RTNVAR(&TIMESTAMP)

    /* Generate sales report */
    RUNSQL SQL('SELECT * FROM sales WHERE date = CURRENT_DATE') OUTPUT(*OUTFILE) OUTFILE(&REPORTFILE)

    /* Email the report */
    SNDDST TYPE(*DOC) TOINTNET((&EMAIL)) DSTD('Daily Sales Report') MSG('Please find the attached sales report.') DOC(&REPORTFILE)

ENDPGM

Explanation

  1. Variable Declarations:

    • &TIMESTAMP: Stores the current date and time.
    • &REPORTFILE: Path to the report file.
    • &EMAIL: Email address of the management team.
  2. Retrieve Current Timestamp:

    • RTVSYSVAL SYSVAL(QDATETIME) RTNVAR(&TIMESTAMP): Retrieves the current system date and time and stores it in &TIMESTAMP.
  3. Generate Sales Report:

    • RUNSQL SQL('SELECT * FROM sales WHERE date = CURRENT_DATE') OUTPUT(*OUTFILE) OUTFILE(&REPORTFILE): Runs an SQL query to select sales data for the current date and saves it to the report file.
  4. Email the Report:

    • SNDDST TYPE(*DOC) TOINTNET((&EMAIL)) DSTD('Daily Sales Report') MSG('Please find the attached sales report.') DOC(&REPORTFILE): Sends the report file as an email attachment to the management team.

Practical Exercise

Task: Modify the above CL program to include error handling for the SQL query and email sending operations.

Solution:

PGM
    DCL VAR(&TIMESTAMP) TYPE(*CHAR) LEN(20)
    DCL VAR(&REPORTFILE) TYPE(*CHAR) LEN(50) VALUE('/reports/sales_report.txt')
    DCL VAR(&EMAIL) TYPE(*CHAR) LEN(50) VALUE('[email protected]')
    DCL VAR(&MSG) TYPE(*CHAR) LEN(100)

    /* Get current timestamp */
    RTVSYSVAL SYSVAL(QDATETIME) RTNVAR(&TIMESTAMP)

    /* Generate sales report */
    RUNSQL SQL('SELECT * FROM sales WHERE date = CURRENT_DATE') OUTPUT(*OUTFILE) OUTFILE(&REPORTFILE)
    MONMSG MSGID(SQL0000) EXEC(DO)
        CHGVAR VAR(&MSG) VALUE('Report generation failed at ' *CAT &TIMESTAMP)
        GOTO CMDLBL(END)
    ENDDO

    /* Email the report */
    SNDDST TYPE(*DOC) TOINTNET((&EMAIL)) DSTD('Daily Sales Report') MSG('Please find the attached sales report.') DOC(&REPORTFILE)
    MONMSG MSGID(CPF0000) EXEC(DO)
        CHGVAR VAR(&MSG) VALUE('Email sending failed at ' *CAT &TIMESTAMP)
        GOTO CMDLBL(END)
    ENDDO

    CHGVAR VAR(&MSG) VALUE('Report generated and emailed successfully at ' *CAT &TIMESTAMP)

END: /* Log the operation */
    ADDPFM FILE('/logs/report_log.txt') MBR(*FIRST)
    WRKMBRPDM FILE('/logs/report_log.txt') MBR(*FIRST) OPTION(*ADD) TEXT(&MSG)

ENDPGM

Explanation of Changes

  1. Error Handling for SQL Query:

    • MONMSG MSGID(SQL0000) EXEC(DO): Monitors for any SQL errors during the report generation.
    • CHGVAR VAR(&MSG) VALUE('Report generation failed at ' *CAT &TIMESTAMP): Sets the log message to indicate failure if an error occurs.
    • GOTO CMDLBL(END): Skips the email sending step if report generation fails.
  2. Error Handling for Email Sending:

    • MONMSG MSGID(CPF0000) EXEC(DO): Monitors for any errors during the email sending operation.
    • CHGVAR VAR(&MSG) VALUE('Email sending failed at ' *CAT &TIMESTAMP): Sets the log message to indicate failure if an error occurs.
    • GOTO CMDLBL(END): Skips the success message if email sending fails.
  3. Success Message:

    • CHGVAR VAR(&MSG) VALUE('Report generated and emailed successfully at ' *CAT &TIMESTAMP): Sets the log message to indicate success if no errors occur.

Conclusion

These case studies demonstrate how CL can be used to automate common tasks such as backups and report generation. By incorporating error handling, you can make your CL programs more robust and reliable. Practice these examples and try to create your own CL programs to solve real-world problems.

© Copyright 2024. All rights reserved