The root activity

Step through the Sale root activity, in COBOL pseudocode, with modifications for user-related activities. The main change is to introduce a new Confirm activity.

The modifications for user-related activities are highlighted in the examples here using bold text.
Figure 1. The SAL002 root activity program, with user-related modifications highlighted (Part 1)
Identification Division.
Program-id. SAL002.
Environment Division.
Data Division.
Working-Storage Section.
01  RC                           pic s9(8) comp.
01  Process-Name                 pic x(36).
01  Event-Name                   pic x(16).
    88  DFH-Initial              value 'DFHINITIAL'
    88  Delivery-Complete        value 'Delivry-Complete'.
    88  Delivery-Confirmed       value 'Delivry-Confirmd'.
    88  Invoice-Complete         value 'Invoice-Complete'.
    88  Payment-Complete         value 'Payment-Complete'.
01  Sale-Container               pic x(16) value 'Sale'.
01  Order-Container              pic x(16) value 'Order'.
01  Order-Buffer                 pic x(..).
01  Delivery-Container           pic x(16) value 'Delivery'.
01  Delivery-Buffer              pic x(..).
01  Confirm-Container            pic x(16) value 'Confirm'.
01  Confirm-Buffer               pic x(..).
01  Invoice-Container            pic x(16) value 'Invoice'.
01  Invoice-Buffer               pic x(..).
Linkage Section.
01  DFHEIBLK.
    .
Procedure Division.
Begin-Process.
      .
    EXEC CICS RETRIEVE REATTACH EVENT(Event-Name)
             RESP(RC) END-EXEC
      .
    If RC NOT = DFHRESP(NORMAL)
      .
    End-If.
      .
    Evaluate True
      When DFH-Initial
        Perform Initial-Activity
        Perform Order-Activity
        Perform Order-Response
        Perform Delivery-Activity
      When Delivery-Complete
        Perform Delivery-Response
        Perform Delivery-Confirmation
      When Delivery-Confirmed
        Perform Confirm-Response
        Perform Invoice-Activity
      When Invoice-Complete
        Perform Invoice-Response
        Perform Payment-Activity
Figure 2. The SAL002 root activity program, with user-related modifications highlighted (Part 2)
      When Payment-Complete
        Perform Payment-Response
        Perform End-Process
      When Other
        .
    End Evaluate.
        .
    EXEC CICS RETURN END-EXEC
    .
Initial-Activity.
    .
    EXEC CICS ASSIGN PROCESS(Process-Name)
             RESP(data-area) RESP2(data-area) END-EXEC
    .
Order-Activity.
    .
    EXEC CICS DEFINE ACTIVITY('Order')
                 TRANSID('SORD')
                 PROGRAM('ORD001')
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS PUT CONTAINER(Sale-Container)
                 ACTIVITY('Order') FROM(Process-Name)
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS LINK ACTIVITY('Order')
             RESP(data-area) RESP2(data-area) END-EXEC
    .
Order-Response.
    .
    EXEC CICS CHECK ACTIVITY('Order') COMPSTATUS(status)
             RESP(RC) RESP2(data-area) END-EXEC
    .
    If RC NOT = DFHRESP(NORMAL)
        .
    End-If.
    .
    If status NOT = DFHVALUE(NORMAL)
        .
    End-If.
    .
    .
Delivery-Activity.
    .
    EXEC CICS DEFINE ACTIVITY('Delivery')
                 TRANSID('SDEL')
                 EVENT('Delivry-Complete')
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS GET CONTAINER(Order-Container)
                 ACTIVITY('Order') INTO(Order-Buffer)
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS PUT CONTAINER(Order-Container)
                 ACTIVITY('Delivery') FROM(Order-Buffer)
             RESP(data-area) RESP2(data-area) END-EXEC
    .
Figure 3. The SAL002 root activity program, with user-related modifications highlighted (Part 3)
    EXEC CICS RUN ACTIVITY('Delivery')
                 ASYNCHRONOUS
             RESP(data-area) RESP2(data-area) END-EXEC
    .
Delivery-Response.
    .
    EXEC CICS CHECK ACTIVITY('Delivery') COMPSTATUS(status)
             RESP(RC) RESP2(data-area) END-EXEC
    .
    If RC NOT = DFHRESP(NORMAL)
        .
    End-If.
    .
    If status NOT = DFHVALUE(NORMAL)
        .
    End-If.
    .
    .
Delivery-Confirmation.
    .
    EXEC CICS DEFINE ACTIVITY('Confirm')
                 TRANSID('SCON')
                 PROGRAM('CON001')
                 EVENT('Delivry-Confirmd')
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS GET CONTAINER(Delivery-Container)
                 ACTIVITY('Delivery') INTO(Delivery-Buffer)
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS PUT CONTAINER(Delivery-Container)
                 ACTIVITY('Confirm') FROM(Delivery-Buffer)
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS RUN ACTIVITY('Confirm')
                 ASYNCHRONOUS
             RESP(data-area) RESP2(data-area) END-EXEC
    .
Confirm-Response.
    .
    EXEC CICS CHECK ACTIVITY('Confirm') COMPSTATUS(status)
             RESP(RC) RESP2(data-area) END-EXEC
    .
    If RC NOT = DFHRESP(NORMAL)
        .
    End-If.
    .
    If status NOT = DFHVALUE(NORMAL)
        .
    End-If.
    .
    .
Invoice-Activity.
    .
    EXEC CICS DEFINE ACTIVITY('Invoice')
                 TRANSID('SINV')
                 EVENT('Invoice-Complete')
             RESP(data-area) RESP2(data-area) END-EXEC
    .
Figure 4. The SAL002 root activity program, with user-related modifications highlighted (Part 4)
    EXEC CICS GET CONTAINER(Confirm-Container)
                 ACTIVITY('Confirm') INTO(Confirm-Buffer)
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS PUT CONTAINER(Confirm-Container)
                 ACTIVITY('Invoice') FROM(Confirm-Buffer)
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS RUN ACTIVITY('Invoice')
                 ASYNCHRONOUS
             RESP(data-area) RESP2(data-area) END-EXEC
    .
Invoice-Response.
    .
    EXEC CICS CHECK ACTIVITY('Invoice') COMPSTATUS(status)
             RESP(RC) RESP2(data-area) END-EXEC
    .
    If RC NOT = DFHRESP(NORMAL)
        .
    End-If.
    .
    If status NOT = DFHVALUE(NORMAL)
        .
    End-If.
    .
    .
Payment-Activity.
    .
    EXEC CICS DEFINE ACTIVITY('Payment')
                 TRANSID('SPAY')
                 EVENT('Payment-Complete')
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS GET CONTAINER(Invoice-Container)
                 ACTIVITY('Invoice') INTO(Invoice-Buffer)
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS PUT CONTAINER(Invoice-Container)
                 ACTIVITY('Payment') FROM(Invoice-Buffer)
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS RUN ACTIVITY('Payment')
                 ASYNCHRONOUS
             RESP(data-area) RESP2(data-area) END-EXEC
    .
Payment-Response.
    .
    EXEC CICS CHECK ACTIVITY('Payment') COMPSTATUS(status)
             RESP(RC) RESP2(data-area) END-EXEC
    .
    If RC NOT = DFHRESP(NORMAL)
        .
    End-If.
    .
    If status NOT = DFHVALUE(NORMAL)
        .
    End-If.
    .
    .
Figure 5. The SAL002 root activity program, with user-related modifications highlighted (Part 5)
End-Process.
    .
    EXEC CICS RETURN ENDACTIVITY
             RESP(data-area) RESP2(data-area) END-EXEC
End Program.
The main change to SAL002 is to introduce a new Confirm activity. The purpose of the Confirm activity is to confirm that delivery has taken place, before the Invoice activity is started. Confirmation requires the user to enter some data. The following pseudocode creates the Confirm activity:
Delivery-Confirmation.
    .
    EXEC CICS DEFINE ACTIVITY('Confirm')
                 TRANSID('SCON')
                 EVENT('Delivry-Confirmd')
             RESP(data-area) RESP2(data-area) END-EXEC
    .

Because the Confirm activity is executed asynchronously with the root activity, the EVENT option of DEFINE ACTIVITY is used to name the completion event of the activity as Delivry-Confirmd. CICS reattaches SAL002 when the Confirm activity event fires - that is, when the Confirm activity completes.

SAL002 places the data entered by the user for the Confirm activity into a data-container named Delivery, and issues the RUN command:
    EXEC CICS GET CONTAINER(Delivery-Container)
                 ACTIVITY('Delivery') INTO(Delivery-Buffer)
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS PUT CONTAINER(Delivery-Container)
                 ACTIVITY('Confirm') FROM(Delivery-Buffer)
             RESP(data-area) RESP2(data-area) END-EXEC
    .
    EXEC CICS RUN ACTIVITY('Confirm')
                 ASYNCHRONOUS
             RESP(data-area) RESP2(data-area) END-EXEC

Now SAL002 terminates, returning control to CICS. BTS reattaches the root activity only when the Confirm activity has completed.



dfhp9c0042.html | Timestamp icon Last updated: Thursday, 27 June 2019