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.