Um eine konsistente Erfahrung bereitzustellen und die Beispiele aufeinander aufbauen zu lassen, wird in dieser Dokumentation immer wenn möglich dieselbe DL/I-Datenbank verwendet. Diese Kundendatenbank enthält in der Stammverzeichnisebene grundlegende Kundeninformationen. Für jeden Kunden sind Segmente für den Kreditstatus, den Verlauf und die einzelnen Standorte vorhanden. Jeder Standort besitzt Segmente für Bestellungen und jede Bestellung besitzt Segmente für Artikel.

//define records to match segments in DL/I db
Record CustomerRecordPart type DLISegment
{ segmentName="STSCCST", keyItem="customerNo" }
10 customerNo char(6) { dliFieldName = "STQCCNO" }; //key field
10 customerName char(25) { dliFieldName = "STUCCNM" };
10 customerAddr1 char(25) { dliFieldName = "STQCCA1" };
10 customerAddr2 char(25) { dliFieldName = "STQCCA2" };
10 customerAddr3 char(25) { dliFieldName = "STQCCA3" };
end
Record LocationRecordPart type DLISegment
{ segmentName="STSCLOC", keyItem="locationNo" }
10 locationNo char(6) { dliFieldName = "STQCLNO" }; //key field
10 locationName char(25) { dliFieldName = "STFCLNM" };
10 locationAddr1 char(25) { dliFieldName = "STFCLA1" };
10 locationAddr2 char(25) { dliFieldName = "STFCLA2" };
10 locationAddr3 char(25) { dliFieldName = "STFCLA3" };
end
Record OrderRecordPart type DLISegment
{ segmentName="STPCORD", keyItem="orderDateNo" }
10 orderDateNo char(12) { dliFieldName = "STQCODN" }; //key field
10 orderReference char(25) { dliFieldName = "STFCORF" };
10 orderItemCount num(6) { dliFieldName = "STFCOIC" };
10 orderAmount decimal(12,2) { dliFieldName = "STFCOAM" };
end
Record ItemRecordPart type DLISegment
{ segmentName="STLCITM", keyItem="itemKey" }
10 itemKey char(8); { dliFieldName = "STKCCKEY" }; //key field
15 itemInventoryNo char(6) { dliFieldName = "STKCIIN" };
15 itemLineNo smallint { dliFieldName = "STQCILI" };
10 itemQtyOrdered num(6) { dliFieldName = "STFCIQO" };
10 itemQtyShipped num(6) { dliFieldName = "STFCIQS" };
10 itemQtyBackOrdered num(6) { dliFieldName = "STFCIQB" };
10 itemAmount decimal(12,2) { dliFieldName = "STFCIAM" };
10 itemNumber char(6) { dliFieldName = "STQIINO" };
10 itemDescription char(25) { dliFieldName = "STFIIDS" };
10 itemQtyOnHand num(6) { dliFieldName = "STFIIQH" };
10 itemQtyOnOrder num(6) { dliFieldName = "STFIIOH" };
10 itemQtyReserved num(6) { dliFieldName = "STFIIQR" };
10 itemUnitPrice char(6) { dliFieldName = "STFIIPR" };
10 itemUnitOfIssue char(1) { dliFieldName = "STFIIUN" };
end
Record CreditRecordPart type DLISegment
{ segmentName="STSCSTA" }
10 creditLimit decimal(12,2) { dliFieldName = "STFCSCL" };
10 creditBalance decimal(12,2) { dliFieldName = "STFCSBL" };
end
Record HistoryRecordPart type DLISegment
{ segmentName="STSCHIS", lengthItem="historySegmentLength",
keyItem="historyDateNo" }
10 historySegmentLength smallint { dliFieldName = "STGCSL" };
10 historyDateNo char(12) { dliFieldName = "STQCHDN" };
10 historyReference char(25) { dliFieldName = "STFCHRF" };
10 historyItemCount smallint { dliFieldName = "STFCHIC" };
10 historyAmount decimal(12,2) { dliFieldName = "STQCHAM" };
10 historyStatus char(77) { dliFieldName = "STQCLOS" };
end
TITLE 'PSB FOR PROCESSING SAMPLE DATA BASES'
ELAALT PCB TYPE=TP,MODIFY=YES
ELAEXP PCB TYPE=TP,MODIFY=YES,EXPRESS=YES
STDCDBL PCB TYPE=DB,DBDNAME=CUSTOMER,PROCOPT=AP,KEYLEN=50,POS=S
SENSEG NAME=STSCCST,PARENT=0
SENSEG NAME=STSCLOC,PARENT=STSCCST
SENSEG NAME=STPCORD,PARENT=STSCLOC
SENSEG NAME=STLCITM,PARENT=STPCORD
SENSEG NAME=STSCSTA,PARENT=STSCCST
SENSEG NAME=STSCHIS,PARENT=STSCCST
PSBGEN LANG=ASSEM,CMPAT=YES,PSBNAME=STBICLG
END
//define overall db layout in PSB
Record CustomerPSBRecordPart type PSBRecord { defaultPSBName="STBICLG" }
// three PCBs required for CBLTDLI on IMS
iopcb IO_PCBRecord { @PCB { pcbType = PCBKind.TP } };
elaalt ALT_PCBRecord { @PCB { pcbType = PCBKind.TP } };
elaexp ALT_PCBRecord { @PCB { pcbType = PCBKind.TP } };
// database PCB
customerPCB DB_PCBRecord { @PCB {
pcbType = DB,
pcbName = "STDCDBL",
hierarchy = [
@relationship { segmentRecord = "CustomerRecordPart" },
@relationship {
segmentRecord = "LocationRecordPart", parentRecord = "CustomerRecordPart" },
@relationship {
segmentRecord = "OrderRecordPart", parentRecord = "LocationRecordPart" },
@relationship {
segmentRecord = "ItemRecordPart", parentRecord = "OrderRecordPart" },
@relationship {
segmentRecord = "CreditRecordPart", parentRecord = "CustomerRecordPart" },
@relationship {
segmentRecord = "HistoryRecordPart", parentRecord = "CustomerRecordPart" }]}};
end
program PrintCatalog type basicProgram { alias="PRINT",
@DLI{
psb = "myPSB",
callInterface = CBLTDLI } }
//create variables for the records
myCustomer CustomerRecordPart;
myLocation LocationRecordPart;
myOrder OrderRecordPart;
myItem ItemRecordPart;
myCrStatus CreditRecordPart
myHistory HistoryRecordPart
myPSB CustomerPSBRecordPart;
function main()
...
end
end