[go: up one dir, main page]

0% found this document useful (0 votes)
26 views15 pages

Understanding Document For Update The ZISP6UPHR Program

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
26 views15 pages

Understanding Document For Update The ZISP6UPHR Program

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 15

Understanding document for the ZISP6UPHR program

ZISP6UPHR program - This program is stored procedure to update CDB phone


information for client ID in ZCDBPH0P file (Client Phone Book File) and
ZCMSCH0P & ZCDBPT0P file is used for validation. It is written in SQLRPGLE.

• The IPds and IPdsold data structures are defined on same external
ZISPIP0D Data Structure. So, IPdsold DS is used prefix ‘OL’ and replace 2
starting alphabet of the field names. Example - IPPCID will be OLPCID.
• Consists of ‘ASI’ array is Compile time array for copyright and ‘msg’ is
Run-time array for message text.
• For input values are inserting from JDBC in program using procedure
prototype and procedure interface.
• Input Parameters to Program
o inAuditDS - input audit data structure
o inIPds - input phone details data structure
o OUTRSPC – error message
o OUTMTXT – Error text
• The program status (PSds) data structure is used for the status of
commitment control.
• The error message (ERds) data structure is used to load the error
messages from external described data structure ZISPER0D.
• The input phone (IPds) data structure is used for main file (ZCDBPH0P)
data structure which is externally defined.
• The control (CTds) data structure for Mobile Network Interface
Control which is defined externally with ZMNICT0P file.
• The audit data structure (AUds) is used for Audit Header which is
defined external ZISPAU0D data structure.
• The audit program data structure (auAUds) is used for audit DS which
is defined external ZAUDIT0D data structure.
• There are two data structure defined for before image (BFds) and
after image data structure (AFds)of length 2560 and divided into 10
small data structure as zzdta0, zzdta1,…, zzdta9.
• Initialising of the variables.
o @audtyp is used variables for 3 different operations add
(#add), change (#chg) or delete(#del) for the operations
performed based on this variable.
o According to these variables #add, #chg or #del the value of
adimgt will be changed.
1. For add (#add) initialize with ‘ADD’ adimgt will have
value 1.
2. For change (#chg) initialize with ‘CHG’ used before
image adimgt will have value 2 and after image
adimgt will have value 3.
3. For delete (#dlt) initialize with ‘DLT adimgt will have
value 4.
4. The audit file API name variable carry ‘ZAUD6WAR’.
o @phone is initialized decimal type to 0123456789.
o #no is initialized to character 0
o #yes is initialized to character 1
o @adimgt, @adfiln, @adfill, @adkeyd variables are defined
from externally defined data structure
o PHky is phone key with fields phone primary client ID and
phone sequence.

Main Part of program

• Initialize the init program variables as


1. @ok is initialized to 1. Program sets @ok as 1 when no error
and in case of error it is set as 0.
2. msg is set blank from internal message array.
3. @msg# is set blank from internal message as msg#.
4. @mtxt is set blank from internal message data.
5. Sqlstt (SQL state) is set as 00000. Value for 00000 for Sql
state indicates no error. Other that this value indicates error
condition
6. Procedure prototypes are defined for input the ExeCmd
with command text variable constant.
7. OutRSPC is initialized as “GUI0000”. GUI0000 indicates no
error. Other than this response indicates error condition.
8. OutMTXT is initialized as blanks. When no error OutMTXT is
set as blanks. For error cases it is set with the description of
the message.
• Perform init for first time only based on @doInit variable contains #no
means 0, then no operation will be performed. Otherwise call INIT
subroutine and set the value of @doInit and #yes.

INIT Subroutine
➢ The variables @audtyp, @adfiln, @adfill and @adkeyd initialize blank
values.
➢ Call program ZCDB6RWC and set indicator 01 as off. Pass the parameter
@mode with value ‘A’.

1. Declare the variables mode, RCDWAIT and CLIB.


2. It checks the mode variable has value other than ‘X’. Then
retrieve data area ‘ZCDBWAIT’, set default wait time.
3. Start a do loop for data area retrieving then catch the error
through monitor message ‘CPF1015’ in the loop.
4. then retrieve another ‘ZCRTPFL’ data area. And create a data
area ‘ZCDBWAIT’ and change variable RCDWAIT for default
wait time to 20 seconds.
5. Then override ZCDBDR0P, ZCDBRL0P, ZCDBAD0P, ZCDBPH0P,
ZCDBPD0P and ZCDBEM0P files. When mode variable is
equal to ‘X’ then delete all override files.

➢ when program ZCDB6RWC ends with error then it set the variable @ok
to #no. And #msg to ‘ISP2001’ message code with description “Error on
Call to Pgm ZAUD6WAR from Pgm ZISP6WPHR: Seq number”. And run
the GetMsgTxt subroutine (please find the details below).
➢ Then run a CL command for start commit control using QCMDEXC with
passing value STRCMTCTL LCKLVL(*CS).
1. when the commitment control run successfully then we will
have @rspcd variable value 0. Or the commitment control
has error then we will have @rspcd variable value -1 and
pass CPFMsg 'CPF8351' for already active. Then no
operation will perform.
2. When commitment control command ends with error then
set variable @ok to #no and @msg to 'ISP2001'
3. 'ExeCmd' , #thisPgm , 'STRCMTCTL’ , 'Msg#=' and CPFMsg
variables will take value from msg array. Then run
GetMsgTxt subroutine (Please find details below).
➢ Then open ZCDBPH0P file and check the file is open with
%open(filename). when the value 1 then no operation performs.
➢ When open file command ends with error then log an error on
the open file with setting the variable as @ok = 0 or #no and
@msg# is equal to 'ISP2010'
➢ #filePH, #thisPgm , 'Msg#=' and CPFMsg will get data from msg
array.
➢ Then run the GetMsgTxt. (please find the details below).
➢ Then close ZCDBPH0P file.
➢ chkmni , chkams and chkems variable set to blank of length 1.
➢ Then call a program ZUTL6VCC (please find the details below)
with parameters to validate the EMS or AMS data area. when
goodflag parameter contains ‘PP’ then set chkems is equal to 'Y'
➢ when chkems or chkams is equals to ‘Y’ then chkmni is equal to
'Y'
➢ When there was error during initialization in INIT subroutine
then again initialize it.

• Program then sets the commit option as *none. This should be the first
SQL statement in the SQL program. This means commitment control will
not be handled by the code. All operation will be committed.
• Audit check for blank user in audChk subroutine (please find the audChk
subroutine details below).
• Set the input old phone sequence(inIPdsOld) in IPds. Set IPPRIV in
@oldpriv and IPXEQN in @@seqn and execute ChkSeqn subroutine
(please find the ChkSeqn subroutine details below).
• put the ZCDBPH0P file record into Pds where selected if matched with
the phone key and execute ioRtvFilePH subroutine (please find the
ioRtvFilePH subroutine details below).
• When no error then, save image of current PHds for audit and move
PHds to IPds and execute MovePHtoIP subroutine (please find the
MovePHtoIP subroutine details below).
• If error occurred as record not found for update then set variable
outRSPC to 'GUI1008'. Further no process performs.
• If no error compare current zcdbph0p record in IPds to inIPdsOld to see if
record has already been updated by another user.
• If record is updated by another user, then populate error - ISP2016 ->
Record Already Updated by Another User in File ZCDBPH0P, Pgm
ZISP6UPHR, Key ippcid & ipxeqn. And set outRSPC to 'GUI1007'.
• When no error and old data has not changed, validate new data by
executing ChkIPds subroutine and ValRelation (please find the ChkIPds
and ValRelation subroutine details below).
• When chkmni is equals to ‘Y’ then execute ChkPhn subroutine (please
find the ChkPhn subroutine details below).
• Update the PHds with input IPds by executing MoveIPtoPH subroutine
(please find the MoveIPtoPH subroutine details below).
• update ZCDBPH0P records from PHds DS by executing ioUpdFilePH
subroutine (please find the ioUpdFilePH subroutine details below).
• Then update the log file changes to audit log and commit file changes
using ioCommit subroutine (please find the ioCommit subroutine details
below).
• If there is no error then, return the updated result set to server
executing the rtnresset subroutine (please find the rtnresset subroutine
details below).
audChk Subroutine
This subroutine is used to check the input data in data structure.
➢ When already in error then no operation will be performed.
➢ When AUUSER (audit user details) variable is empty then no
operation will perform.
➢ When user input data is empty then it will throw an error
'ISP2034' (Audit data sent in is blank or invalid for Pgm
ZISP6UPHRK) and then execute getMsgTxt subroutine and leave
this subroutine.
➢ Then check for valid sequence number in audit structure using
chkASeqN subroutine (please find the chkASeqN subroutine details
below).

chkASeqN Subroutine
chkASeqN subroutine – It will check audit sequence number for numeric
and greater than 0.
➢ When it is already in error then no further process will perform.
➢ The check for invalid sequence number (AUSEQN) in audit by TESTN
function is numeric or not.
➢ Then set AUSEQN in @auSeq. Check @auSeq is greater than 0. When
@auSeq is not greater than 0 or blank then it is error or User in input
Audit data is invalid then error - 'ISP2020' -> “Sequence Number
Variable ‘AUSEQN’ = AUSEQN is Not Numeric, is Zero or is Invalid in Pgm
ZISP6UPHR: ‘Seq number’. Then come out of subroutine.

audLog Subroutine
audLog subroutine – This subroutine is used to write the log before file
calling the audit program before changing main file on selected the
condition.
Here,
o @audtyp - type of change to log - #add, #chg, #del
o @adfiln - file name
o @adfill - file library
o @adkeyd - file key
o BFds - before image of record
o AFds - after image of record
➢ when @audtyp is set to change and before and after data structure
contains same values then no operation will perform.
➢ when @adimgt is set to 2 and ZZds is equal to before data structure.
Then save the data before change and execute the audLogWrt
subroutine (please details below). To save data in log file.
➢ when @adimgt is set to 3 and ZZds is equal to after data structure. Then
save the data after change and execute the audLogWrt subroutine. To
save data in log file.
➢ when @adimgt is set to 1 and ZZds is equal to before data structure.
Then add the new data before change and execute the audLogWrt
subroutine. To save data in log file.
➢ when @adimgt is set to 4 and ZZds is equal to before data structure.
Then delete the data before change and execute the audLogWrt
subroutine. To save data in log file.
➢ When no selected condition found then no operation will perform and
cleared all the variables to blank and come out of subroutine.

audLogWrt Subroutine
audLogWrt Subroutine – This subroutine will call audit API and log audit
data.
➢ It will place the header data into the audit data structure from external
‘zaudit0d’ data structure.
➢ Then place record image in the data fields of auADds then call
ZAUD6WAR program (please find the details below) and pass the audit
data structure as a parameter with indicator 01.
➢ When ZAUD6WAR program ends with error then log error on call to
audit program and change variable @ok set to 0 and message on screen
'ISP2001' (Error on Call to Pgm ZAUD6WAR from Pgm ZISP6UPHRK:
auADds).
ZAUD6WAR program
1. ZAUD6WAR program for write audit record from ZAUDIT0P
file.
2. ZAUDIT0P is an output file and ZAUDTC0P is an input file.
3. Using external defined data structure ZAUDIT2D for old
audit details.
4. There several data structure defined for new audit details
variables as @filnam, @a, @b , @c.
5. There defined program status data structure as as passed
parameters.
6. Defined parameter lists as AUDS and dtalen.
7. When adappl variable is equal to '*LR' then *inlr set *on.
For release of resources and return.
8. Load ZAUDTC0P file in arrays once in init subroutine.
9. When PPRM## is equal to 1 and wrklen is less than 10000
then move to audit ZAUDIT0P file.
10. Call ZITM6GTR program for with ‘AUDATE’ and ‘TIME’
parameters and load the data structure values in variables.
Then clear ZZDTA1 data structure.
11. Then save the ZZDS data structure values in ZAUDIT0P file.
12. Then Check if adimgt is equal to 1, 3 or 4. So, it needs to call
audit tracking API for the file ZAUDTC0P. Then move the
ZZDS data structure to file ZAUDIT0P.
13. Call ZAUD6ATKC program and pass parameters (audate,
autime, Wkauds) program is used to Audit Tracking API.

ChkIPds Subroutine
ChkIPds Subroutine – This subroutine will check for invalid data in input phone
data structure (IPds).
➢ if no error, get the next available sequence number by executing
ChkSeqn Subroutine (details for the ChkSeqn subroutine given below).
➢ Verify the primary client ID is not blank, if found blank then populate an
error 'ISP2022' -> “No Client ID specified for File zcdbph0p, Program
ZISP6UPHR: New phone”.
➢ Verify that old and new zcdbph0p keys are the same. If old key values do
not match new key values, then populate an error 'ISP2018' -> Update
Failed for File zcdbph0p, Pgm ZISP6UPHRK Because New Key ippcid does
Not Match Old Key ipxeqn and phpcid.
➢ Verify the phone type when not in error then execute the ioRtvFilePT
subroutine (details for the ioRtvFilePT subroutine given below). For
invalid phone type then set outRSPC is equal to 'GUI1005' and no further
process execute.
Chkphn Subroutine
Chkphn Subroutine – This subroutine is used to check the invalid phone details.
➢ If already in error, then skip further processing.
➢ If no error then, execute a dynamic SQL in which we are fetching
all record filtered on control part into Control data structure from
ZMNICT0P file.
➢ When there is no error in fetching and input phone type is
matched with file data type then execute the ChkphNum
subroutine (details for the ChkphNum subroutine given below). If
found any error, then leave the subroutine.
➢ Verify the phone number is registered for Alert/Mobile Banking with
chkRegisterd subroutine (please find the chkRegisterd subroutine details
below). If found any error, then leave the subroutine.
➢ Verify the phone number configured in Alerts/Mobile Banking by
variable @pfound is equals to blank then execute vldNewPhone#
subroutine (please find the vldNewPhone# subroutine details below). If
found any error, then leave the subroutine.
➢ If variable @pfound is not equals to blank, then populate error -
ISP4012 -> Duplicate Phone Number ‘IPPHON’ and execute
getMsgTxt subroutine. (please find the getMsgTxt subroutine
details below).
➢ The phone registered old and new phone type must be same. If
not same, then error - ISP4005 -> Phone type cannot be changed
because it is registered for mobile banking or alerts.
➢ Check if old and new phone number are different, new phone is
unique by vldNewPhone# subroutine. If found any error, then
leave the subroutine. And throw error - ISP4012 - > -> Duplicate
Phone Number ‘IPPHON’ and execute getMsgTxt subroutine
chkRegisterd Subroutine
chkRegisterd Subroutine – This subroutine is to check the phone number is
registered for Alerts or Mobile Banking.

➢ If CTMPTY is equals to OLTYPE and chkems is equals to 'Y' then by using


dynamic Join SQL statement to check the count of exact match from
ZCDBPH0P and ZEMSDC0P files. On condition of old phone details and
concatenation of primary client ID and Phone sequence form ZCDBPH0P
file and concatenation of primary client ID and Phone sequence form
ZEMSDC0P file condition DCEMPH = 'P’ and execute TstSQL subroutine
(please find the TstSQL subroutine details below).
➢ When chkams is equals to 'Y' and @count is equals to 0 then check
count by Dynamic SQL. check the count of exact match from ZCDBPH0P
and ZAMSUS0P files. On condition of old phone details and
concatenation of primary client ID and Phone sequence form ZCDBPH0P
file and concatenation of primary client ID and Phone sequence form
ZAMSUS0P file condition DCEMPH = 'P' and execute TstSQL subroutine.
➢ When chkcms is equals to 'Y' and @count is equals to 0 and oltype is not
equals to iptype then check the count by Dynamic inner join SQL on
zcmsch0p inner join zcmscr0p chpart is equals to crpart and chcard is
equals to crcard and chmbrn is equals to crmbrn filter on condition
chpart is equals to AUORGI and chpcid is equals to ippcid and from
both any should be crraph is equals to @seqn or craeph is equals to
@seqn. execute TstSQL subroutine

vldNewPhone# Subroutine
vldNewPhone# Subroutine – This subroutine used for to check New Phone
Number is registered or not by dynamic SQL when CTMPTY is equals to IPTYPE

➢ chkems is equals to 'Y’ then, check the count of exact match from
ZCDBPH0P and ZEMSDC0P files. On condition of old phone details and
concatenation of primary client ID and Phone sequence form ZCDBPH0P
file and concatenation of primary client ID and Phone sequence form
ZEMSDC0P file condition DCEMPH = 'P’. and execute TstSQL subroutine.
➢ When chkems is equals to 'Y' and @count is equals to 0 then check
count by Dynamic SQL. check the count of exact match from ZCDBPH0P
and ZAMSUS0P files. On condition of old phone details and
concatenation of primary client ID and Phone sequence form ZCDBPH0P
file and concatenation of primary client ID and Phone sequence form
ZAMSUS0P file condition DCEMPH = 'P' and execute TstSQL subroutine
➢ When no error and sqlcode is equals to 0 and count is not 0 then it
states that phone no. is registered.

ChkSeqn Subroutine
ChkSeqn Subroutine - This subroutine is used to check the sequence of
numeric in phone number.
➢ If already in error, then skip further processing and in phone sequence
(ipxeqn) put value all zeros by ALL ‘0’.
➢ If it has no error then check the phone sequence (ipxeqn) is containing
numeric by TESTN function.
➢ If the phone sequence is containing any non-numeric number then
populate error - 'ISP2020' -> “Sequence Number Variable 'IAXEQN' =
ipxeqn is Not Numeric, is Zero or is Invalid in Pgm ZISP6UPHR : 'Phone
Seq#'”.
Chkphnum Subroutine
Chkphnum Subroutine – This subroutine is used for checking the phone
number is numeric or not.
➢ If already in error, then skip further processing.
➢ When no error input phone(ipphon) set to all zero value in phone
number (*ALL ‘0’).
➢ When input phone (ipphon) has blank value then populate the error
message ‘ISP2052’ - > Phone# is not Numeric.
➢ Verify the phone sequence by check the phone length should be greater
than 0 and if found error then populate the error message ‘ISP2052’ - >
Phone# is not Numeric

GetMsgTxt Subroutine
GetMsgTxt Subroutine - This subroutine gets the value of the input
message id and message data (values for the variables configured in the
message id passed). It calls ZUTL6RMC program which populates the text
for the message number passed to it and returns message text back. This
subroutine sets the value of the message text formed by ZUTL6RMC
program to OutMTXT variable.
Also, this subroutine before calling to ZUTL6RMC program validates if
message id is not blanks and if the outMTXT is blanks (already message
text is not set) then only calls ZUTL6RMC program.
If any error in calling to ZUTL6RMC program message text is set with the
message data.

GetNxtSeq Subroutine
GetNxtSeq Subroutine – This subroutine will get the record with last
seq# used in the program from ZCDBPH0P file matched to Phone Key
(PHky). if no error, primary client ID not found in file then add 1 to phone
sequence. If primary client id found in file then add 1 to phone sequence
till less than 99999. If phone sequence +1 is greater than allowed then
check for unused phone sequence gaps by looping in decreasing order of
unused phone sequence through ZCDBPH0P file for client id. Check the
sequence which is still not attached with record. If no errors and unused
Phone sequence found, then set the string sequence in IPds. otherwise
log no phone sequence available error – ‘ISP2023’ -> “Out of Sequence
Numbers to Assign in File zcdbph0p, Pgm ZISP6UPHR: primary Client ID”

ioCommit Subroutine
ioCommit Subroutine – This subroutine is used to write changes from
zcdbph0p file to audit file and commit file changes. If there is no error,
then move data to zcdbph0p file and zcdbph0p library and execute the
AudLog Subroutine (details for the AudLog subroutine given below). If
there is no error, then commit the changes to the ZCDBPH0P file.

ioRTVFilePT Subroutine
ioRTVFilePT Subroutine – This subroutine is chain to zcdbpt0p to validate
the input type (iptype).
If exact match found, then skip the further process. Otherwise populate
error - 'ISP2015' -> Record Not Found in File ZCDBPT0P, Pgm ZISP6UPHR,
Key iptype and execute the GetMsgTxt subroutine.

ioRtvFilePH Subroutine
ioRtvFilePH Subroutine – This subroutine is used for retrieving the record
from zcdbph0p files filtered by phone key. If record not found then error
- ISP2015 -> Record Not Found in File ZCDBPH0P, Pgm ZISP6UPHR, Key
ippcid and ipxeqn and execute the getMsgTxt subroutine.
When file input or output error ISP2012 -> IO Error or Record Lock
Reading File ZCDBPT0P, Pgm ZISP6WPHR, Key iptype and execute the
GetMsgTxt subroutine.

ioUpdFilePH Subroutine
ioUpdFilePH Subroutine – this subroutine for update phone record.
➢ If already in error then, further no process performs.
➢ When no error, commit the changes in the ZCDBPH0P file.
➢ Otherwise populate the error message based on the CPFMsg value
'CPF5009' or 'CPF5026' then error - ISP2017 -> Duplicate key,
Add/Update Failed for File ZCDBPT0P , Pgm ZISP6UPHR , Key ippcid &
ipxeqn.
➢ When CPFMsg value is not equal to 'CPF5009' or 'CPF5026' then error -
ISP2013 -> IO Error or Record Lock Updating File ZCDBPT0P, Pgm
ZISP6UPHR, Key ippcid & ipxeqn. And roll back.

MoveIPtoPH Subroutine
MoveIPtoPH Subroutine – This subroutine is used for moving IPds to
ZCDBPH0P PHds fields when no error. If error occurred then, further no
process performs.

MovePHtoIP Subroutine
MovePHtoIP Subroutine - This subroutine is used for to move ZCDBPH0P
PHds fields to IPds fields when no error. If error occurred then, further
no process performs.
rtnResSet Subroutine
rtnResSet Subroutine – This Subroutine is used for returning the added
record to Server.
➢ Skip the operation if already in error.
➢ If no error, then set sql code to 0000 and execute a dynamic sql. Here
fetching the records from ZCDBPH0P file on condition matched with
primary client ID (PHPCID) and phone sequence (PHSEQN).
➢ If there is any error, then move value to variable to declare cursor C1 and
populate the error - ISP2028 -> SQL Error &1 Occurred in Pgm -
ZISP6WPHR: file - ZCDBPT0P. and execute getMsgTxt subroutine.
➢ Then, open cursor C1 and if found error then populate the error -
ISP2028 -> SQL Error &1 Occurred in Pgm ZISP6WPHR: file ZCDBPT0P.
and execute getMsgTxt subroutine.
➢ Then execute the SQL statement to stored procedure returns result sets
in the form of a multi statement response spool and if found error then
populate the error - ISP2028 -> SQL Error &1 Occurred in Pgm
ZISP6UPHR : file ZCDBPT0P. and execute getMsgTxt subroutine.

TstSQL Subroutine
TstSQL Subroutine - Checks if the sql state is not zeros and if @ok is 0 i.e.
Sql statement ended in error and already error is not set then set @ok to
0.
This subroutine sets error for any SQL state other than zeros. For SQL
error it sets message id as ISP2028 and sets message data. It calls
GetMsgTxt subroutine to form the error message text for the ISP2028
error.
ValRelation Subroutine
ValRelation Subroutine – This subroutine is used for check Phone is
linked with any other clients.
➢ Skip the operation if already in error.
➢ If no error, then execute a dynamic SQL on condition of primary Client ID
and phone sequence should match and client ID should not equal to
phone group and extract all the values in ‘rlds’ data structure. And when
sql code is other than 0 or 2000 then execute the TstSql subroutine.
➢ When client id is not equals to blank then fetch the first record to drds
data structure from ZCDBDR3L file matching with ‘DRCLID’. And execute
the TstSql subroutine. If found error, then set outRSPC is equals to
'GUI1303 and outMTXT is equals to DRSNAM and leave subroutine.
➢ When chkems is equals to 'Y' then fetch only first record to dcds data
structure from ZEMSDC0P file matching with primary client ID and phone
sequence and client id should not equal to phone group. And when sql
code is other than 0 or 2000 then execute the TstSql subroutine.
➢ When DCCLID is not equals to blank then fetch only first record to drds
data structure from ZCDBDR3L file matching with client ID and DCPART.
Execute the TstSql subroutine.
➢ When chkams is equals to 'Y’ and IPPCID is not equals to ipgrpp and
IPPRIV is equals to 'P' then fetch only first record to ‘ucds’ data structure
from ZAMSUS0P file matching with primary client ID and phone
sequence and client id should not equal to phone group. And when sql
code is other than 0 or 2000 then execute the TstSql subroutine.
➢ When USPCID is not equals to blank then fetch only first record to drds
data structure from ZCDBDR3L file matching with client ID and DCPART.
Execute the TstSql subroutine.

ExeCmd Subroutine

ExeCmd Subroutine – This subroutine is used for executing the CL


command (QCMDEXC) with passing two parameters (PCmd and Cmdlen).

You might also like