Modifying Data Sources With Unrelated Records in VSAM

During MODIFY processing, FOCUS determines and maintains the appropriate record type based on the fieldnames in the transactions. Do not include RECTYPE as an input data fields because FOCUS automatically inserts the correct RECTYPE value when a new record is included.

Consider a sporting goods store that sells tents and sails and maintains its inventory information in one file. This data source has two types of records: one containing tent information and one containing sail information.

FILE=SPORTS ,SUFFIX=VSAM ,$
SEGNAME=DUMMY ,$
FIELD= , , USAGE=A1 ,ACTUAL=A1 ,$
SEGNAME=SAILSEG ,SEGTYPE=SO ,PARENT=DUMMY ,$
GROUP=SAILKEY ,ALIAS=KEY ,USAGE=A13 ,ACTUAL=A13 ,$
FIELD=SAIL_NAME ,ALIAS=SNA ,USAGE=A3 ,ACTUAL=A3 ,$
FIELD=SAIL NUMBER ,ALIAS=SNO ,USAGE=A10 ,ACTUAL=A10 ,$
FIELD=RECTYPE ,ALIAS=S ,USAGE=A1 ,ACTUAL=A1 ,$
FIELD=S TYPE ,ALIAS=ST ,USAGE=A6 ,ACTUAL=A6 ,$
FIELD=S WIDTH ,ALIAS=SW ,USAGE=Il ,ACTUAL=I2 ,$
FIELD=S LENGTH ,ALIAS=SL ,USAGE=I2 ,ACTUAL=I2 ,$
FIELD=S QUANTITY ,ALIAS=SQ ,USAGE=I8 ,ACTUAL=I4 ,$
FIELD=S W PRICE ,ALIAS=SP ,USAGE=P8.2 ,ACTUAL=P5 ,$
FIELD=S_R PRICE ,ALIAS=SP ,USAGE=P8.2 ,ACTUAL=PS ,$
SEGNAME=TENTSEG ,SEGTYPE=SO ,PARENT=DUMMY ,$
GROUP=TENT KEY ,ALIAS=KEY ,USAGE=A13 ,ACTUAL=A13 ,$
FIELD=MANUFACTURER ,ALIAS=MFG ,USAGE=A5 ,ACTUAL=A5 ,$
FIELD=STYLE NO ,ALIAS=SNO ,USAGE=A6 ,ACTUAL=A6 ,$
FIELD=COLOR ,ALIAS=CO ,USAGE=A2 ,ACTUAL=A2 ,$
FIELD=RECTYPE ,ALIAS=T ,USAGE=A1 ,ACTUAL=A1 ,$
FIELD=T HEIGHT ,ALIAS=TH ,USAGE=I2 ,ACTUAL=I2 ,$
FIELD=SLEEP SZ ,ALIAS=SS ,USAGE=I2 ,ACTUAL=I2 ,$
FIELD=T QUANTITY ,ALIAS=TQ ,USAGE=I8 ,ACTUAL=I4 ,$
FIELD=T W PRICE ,ALIAS=TP ,USAGE=P8.2 ,ACTUAL=P5 ,$
FIELD=T R PRICE ,ALIAS=TP ,USAGE=P8.2 ,ACTUAL=P5 ,$

This MODIFY procedure updates the inventory data source when new shipments of tents and sails arrive. Tent records end at byte 35, sail records at byte 44. The CHECKFLD tests for blanks in bytes 36 through 38. When these three bytes are blank, processing branches to the TENTPROC case. If the three bytes contain data, processing branches to case SAILPROC. The transaction data source is allocated to ddname TENTSAIL

MODIFY FILE SPORTS
COMPUTE
CHECKFLD/A3=;
T_NEWQUAN/I6=;
S_NEWQUAN/I6=;
FIXFORM X35 CHECKFLD/3
IF CHECKFLD EQ ' ' THEN GOTO TENTPROC
ELSE GOTO SAILPROC;
CASE TENTPROC
FIXFORM X-38 MANUFACTURER/5 STYLE N0/6 COLOR/2 T_HEIGHT/2
FIXFORM SLEEP_SZ/2 T_W_PRICE/6 T_R_PRICE/6 T_NEWQUAN/I6 X9
MATCH MANUFACTURER STYLE_NO COLOR
ON MATCH COMPUTE
T_QUANTITY=D.T_QUANTITY + T_NEWQUAN;
ON MATCH UPDATE HEIGHT SLEEP_SZ T_W_PRICE T_R_PRICE T_QUANTITY
ON NOMATCH INCLUDE
ON MATCH/NOMATCH GOTO TOP
ENDCASE
CASE SAILPROC
FIXFORM X-38 SAIL_NAME/3 SAIL_NUMBER/10 S_TYPE/6 S_WIDTH/2
FIXFORM S_LENGTH/2 S_STYLE/3 S_W_PRICE/P6 S_R_PRICE/P6 S_NEWQUAN/I6
MATCH SAIL_NAME SAIL_NUMBER
ON MATCH COMPUTE
S_QUANTITY=D,S_QUANTITY + S_NEWQUAN;
ON MATCH UPDATE S_TYPE S WIDTH S_LENGTH S_STYLE S_W_PRICE S_R_PRICE
ON MATCH UPDATE S_QUANTITY
ON NOMATCH INCLUDE
ON MATCH/NOMATCH GOTO TOP
ENDCASE
DATA ON TENTSAIL
END

Information Builders