SteelFrame AWS CardDemo — the official sample, as-is

AWS's open-source CardDemo mainframe application — CICS online plus batch COBOL, VSAM, Db2, IMS, MQ and BMS 3270 screens — running on the SteelFrame engine from its official source. This page explains what CardDemo is, states plainly what was and was not changed to run it here, and serves as an operations manual: signing on, the menus and transactions, the batch jobs and the data files. Every transaction, job, option and dataset below is drawn from the official repository and the members installed on this engine.

Contents

A. What CardDemo is B. Runs as-is: the official source, unmodified C. Reaching CardDemo on SteelFrame D. Online transactions & menus E. Batch jobs F. Data files & libraries G. Source, licence & credit

A. What CardDemo is

CardDemo is the open-source mainframe sample application published by Amazon Web Services to exercise mainframe migration and modernization tooling. It is a credit-card management system: customers, accounts, cards and the cross-reference between them, transactions and transaction types, bill payment, statements and reports, and an admin side for user security. It was written to look like a real estate rather than a toy — pseudo-conversational CICS programs with BMS 3270 maps, a batch cycle driven by JCL, VSAM KSDS files with alternate indexes, and optional extensions on Db2, IMS DB and MQ.

Upstream source, published by AWS under the Apache-2.0 licence:

github.com/aws-samples/aws-mainframe-modernization-carddemo ↗

CardDemo is AWS's work and AWS's copyright. SteelFrame is not affiliated with, sponsored by or endorsed by Amazon Web Services; the application is used here as the independent, publicly available test subject it was designed to be.

LayerIn CardDemo
OnlineCICS COBOL programs, BMS mapsets, pseudo-conversational menus (sign-on, user menu, admin menu)
BatchJCL-driven cycle: file refresh, transaction posting, interest, statements, reports; SORT, IDCAMS, IEBGENER, GDGs, an internal-reader flow, a timed wait step
Data (base)VSAM KSDS: accounts, cards (+ AIX by account), customers, card cross-reference (+ AIX), transactions, transaction types and categories, disclosure groups, category balances, user security
Db2 (optional)Transaction-type management: CARDDEMO.TRANSACTION_TYPE and TRANSACTION_TYPE_CATEGORY, online list/update (CTLI, CTTU), batch maintenance and extract
IMS DB + Db2 + MQ (optional)Pending credit-card authorizations: an MQ-triggered authorization program, IMS summary/detail screens, Db2 fraud table, a batch purge
MQ (optional)Request/response inquiries: system date (CDRD) and account details (CDRA)

B. Runs as-is: the official source, unmodified

The point of running CardDemo here is not that it is a large application — it is that it is somebody else's application, written for real z/OS, with no knowledge of SteelFrame. So we did not port it. SteelFrame takes the official repository in as-is — the COBOL programs, BMS mapsets, copybooks, JCL, CSD definitions, Db2 DDL and IMS DBD/PSB source — and compiles and runs it with the same standard z/OS job streams a mainframe shop would use: IGYWCL for the COBOL, DFHBMSCP for the maps, DBDGEN/PSBGEN for IMS, DSNTEP/DSNTIAUL for Db2. All 44 programs and all 21 mapsets compile and run from the official source.

The claim, stated exactly. The application source is unmodified, with one honest exception: real, pre-existing bugs in CardDemo's own code — code that IBM Enterprise COBOL would reject on a real z/OS, exactly as SteelFrame did. We corrected those minimally, and nothing else. Our platform takes CardDemo in as-is; the only edits were to CardDemo's own bugs. Beyond those corrections we authored exactly one file: CARDDEMO.JCL(RELDPADB), the IMS database reload job — CardDemo ships the unload job (DBPAUTP0) and its unloaded data, but no job to load that data back, so we wrote the mirror image (§E). Every other member, including the scheduler definitions, is the official one.

The CardDemo bugs corrected

MemberThe bugThe correction
CBEXPORT, CBIMPORT
COBOL
RECORD KEY IS EXPORT-SEQUENCE-NUM names a field that exists only in WORKING-STORAGE (COPY CVEXPORT); the file's own record is a plain 01 … PIC X(500). The COBOL Language Reference requires the key to be described within a record description entry of that file — Enterprise COBOL fails it with IGYPS2121-S. The key is declared inside the FD record, at the same offset and length. The record image and every READ/WRITE are untouched.
CBEXPORT.jcl
JCL
The IDCAMS DEFINE says KEYS(4 28); IDCAMS offsets are 0-based and the key sits at 27, so the cluster's key would not match the program's and the file would not open. KEYS(4 27).
CBIMPORT.jcl
JCL
No CARDOUT DD for the program's card output file. The DD added.

The corrected members are marked at the point of change so anyone can diff them against upstream. A platform that accepts everything is not a compatible one; catching what the IBM compiler would catch is part of running the application faithfully.

C. Reaching CardDemo on SteelFrame

  1. Log on to the terminal at / (the demo user is shown on the manuals index). You land on the ISPF primary option menu.
  2. Choose option C — CICS: 3270 terminal into region CICSSFRM. The OIA shows CICSSFRM CONNECTED.
  3. Press Esc (CLEAR) for a blank screen, type CC00 and press Enter. The CardDemo sign-on screen appears.
  4. Sign on with one of the shipped users (loaded by DUSRSECJ):
    User IDPasswordTypeLands on
    ADMIN001PASSWORDAdmin (A)Admin menu, transaction CA00
    USER0001PASSWORDUser (U)Main menu, transaction CM00
    ADMIN001–005 and USER0001–005 are all defined with the same password, as in the official data.

Layout sketch of the sign-on header (not a capture — the real map also carries CardDemo's ASCII-art banner):

Tran: CC00 AWS Mainframe Modernization Date: mm/dd/yy Prog: COSGN00C CardDemo Time: hh:mm:ss [ sign-on: User ID / Password ]

Keys. F1–F12 send PF1–PF12, Shift+F1–F12 send PF13–PF24, Esc sends CLEAR, Enter is Enter. Alt+1 is PA1 and is the one key handled locally: it leaves the 3270 session and returns to ISPF. Inside CardDemo, F3 steps back one screen (from a menu it returns to the sign-on), a menu option is its number plus Enter, and list screens page with F7/F8. Every screen prints its transaction and program in the top-left, which is the quickest way to know where you are.

D. Online transactions & menus

CardDemo is pseudo-conversational: each screen is a separate transaction and program, and the menus XCTL to the option you pick. The option lists below are the ones compiled into the menu programs (copybooks COMEN02Y and COADM02Y); the transaction-to-program mapping is the CSD as installed on this engine.

Sign-on

TransactionProgramMapsetFunction
CC00COSGN00CCOSGN00Sign-on; routes admin users to CA00, regular users to CM00

Main menu — CM00 / COMEN01C (regular users)

OptionTitleTransactionProgramMapset
1Account ViewCAVWCOACTVWCCOACTVW
2Account UpdateCAUPCOACTUPCCOACTUP
3Credit Card ListCCLICOCRDLICCOCRDLI
4Credit Card ViewCCDLCOCRDSLCCOCRDSL
5Credit Card UpdateCCUPCOCRDUPCCOCRDUP
6Transaction ListCT00COTRN00CCOTRN00
7Transaction ViewCT01COTRN01CCOTRN01
8Transaction AddCT02COTRN02CCOTRN02
9Transaction ReportsCR00CORPT00CCORPT00
10Bill PaymentCB00COBIL00CCOBIL00
11Pending Authorization ViewCPVSCOPAUS0CCOPAU00

Option 9 (Transaction Reports) submits the TRANREPT batch job through the internal reader — the online side asks for a date range, batch produces the report. Option 11 belongs to the optional IMS/Db2/MQ authorization feature; its detail screen is CPVD / COPAUS1C / COPAU01, and the MQ-triggered processor is CP00 / COPAUA0C.

Admin menu — CA00 / COADM01C (admin users)

OptionTitleTransactionProgramMapset
1User List (Security)CU00COUSR00CCOUSR00
2User Add (Security)CU01COUSR01CCOUSR01
3User Update (Security)CU02COUSR02CCOUSR02
4User Delete (Security)CU03COUSR03CCOUSR03
5Transaction Type List/Update (Db2)CTLICOTRTLICCOTRTLI
6Transaction Type Maintenance (Db2)CTTUCOTRTUPCCOTRTUP

Options 5 and 6 read and update the Db2 tables created by CREADB21. Option 5 lists the seven shipped transaction types and pages with F7/F8:

Tran: CTLI AWS Mainframe Modernization Date: mm/dd/yy Prog: COTRTLIC CardDemo Time: hh:mm:ss Maintain Transaction Type Page 1 Select Type Description 01 PURCHASE 02 PAYMENT 03 CREDIT 04 AUTHORIZATION 05 REFUND 06 REVERAL 07 ADJUSTMENT Type U to update, D to delete any record F2=Add F3=Exit F7=Page Up F8=Page Dn F10=Save

"REVERAL" is spelled that way in the official load data; it is reproduced, not corrected.

Other transactions (optional features)

TransactionProgramFeatureFunction
CDRDCODATE01MQInquire system date via an MQ request/response
CDRACOACCT01MQInquire account details via MQ
CP00COPAUA0CIMS + Db2 + MQMQ-triggered authorization request processor (IMS insert/update, Db2 fraud table)
CPVSCOPAUS0CIMS + Db2 + MQPending authorization summary (IMS + VSAM)
CPVDCOPAUS1CIMS + Db2 + MQPending authorization detail (IMS update, Db2 insert)

E. Batch jobs

The JCL lives in CARDDEMO.JCL; the batch load library is AWS.M2.CARDDEMO.LOADLIB. Submit from ISPF (option 6, SUBMIT 'CARDDEMO.JCL(POSTTRAN)') or from the edit panel, and read the output in SDSF. The order below is the one AWS documents for a full cycle; the program column is taken from each member's EXEC statements as installed.

Full cycle, in AWS's documented order

#JobProgramPurposeFeature
1CLOSEFILSDSFClose the VSAM files in CICS before batch touches them
2ACCTFILEIDCAMSDefine and load the account master from sample data
3CARDFILEIDCAMSDefine and load the card master (+ AIX by account)
4XREFFILEIDCAMSLoad the customer–card–account cross reference (+ AIX)
5CUSTFILEIDCAMSDefine and load the customer master
6TRANBKPIDCAMSCreate the transaction master (first run) / back it up (later runs)
7TRANEXTRDSNTIAULExtract the latest transaction types and categories from Db2 into GDGsDb2
8TRANCATGIDCAMSCopy the transaction category file to VSAM
9TRANTYPEIDCAMSCopy the transaction type file to VSAM
10DISCGRPIDCAMSLoad the disclosure-group file
11TCATBALFIDCAMSLoad the transaction-category balance file
12DUSRSECJIEBGENER + IDCAMSLoad the user security file (the sign-on users above)
13POSTTRANCBTRN02CCore transaction posting — validates each daily transaction, posts to accounts and category balances, writes rejects
14INTCALCCBACT04CInterest calculation by category balance and disclosure group
15TRANBKPIDCAMSBack up the transaction master
16COMBTRANSORT + IDCAMSCombine system-generated transactions with the daily ones
17CREASTMTCBSTM03AProduce statements (text and HTML) per customer
18TRANIDXIDCAMSDefine the alternate index on the transaction file
19OPENFILSDSFRe-open the files in CICS
20WAITSTEPCOBSWAITTimed wait step (scheduler demonstration)
21CBPAUP0JDFSRRC00 → CBPAUP0CPurge expired authorizationsIMS + Db2 + MQ

Other jobs in the library

JobProgramPurpose
READACCT / READCARD / READCUST / READXREFCBACT01C / CBACT02C / CBCUS01C / CBACT03CRead-and-print utilities for the four masters; READACCT also reformats dates through the assembler routine COBDATFT
TRANREPTSORT + CBTRN03CTransaction report for a date range — normally submitted from the online Transaction Reports option
TRANFILEIDCAMSInitialise the transaction KSDS from the daily transaction data
CBEXPORT / CBIMPORTCBEXPORT / CBIMPORTExport the five masters into one keyed export file, and import them back into normalized files (§B)
CREADB21IKJEFT01 (DSNTIAD / DSNTEP4)Create the Db2 database, tablespaces, tables, indexes; load 7 transaction types and 18 categories
MNTTRDB2IKJEFT01 → COBTUPDTBatch maintenance of the transaction-type table from a 53-byte action deck (add / update / delete)
DEFGDGB / DEFGDGDIDCAMS (+ IEBGENER)Define the GDG bases used by the backups and the Db2 extracts
DEFCUST, ESDSRRDS, REPTFILE, DALYREJS, PRTCATBLIDCAMS / SORTDataset setup: customer define, ESDS/RRDS examples, report file, daily-reject file, category-balance print
INTRDRJ1 / INTRDRJ2IDCAMS + IEBGENERInternal-reader demonstration (job that submits a job)
CBADMCDJDFHCSDUPCSD utility deck for the CardDemo resource group
FTPJCL, TXT2PDF1FTP, IKJEFT1BTransfer and PDF-conversion utilities as published
DBPAUTP0DFSRRC00 → DFSURGU0IMS HD Reorganization Unload of the authorization database DBPAUTP0 (as published; its output is the shipped AWS.M2.CARDDEMO.IMSDATA.DBPAUTP0)
RELDPADBDFSRRC00 → DFSURGL0The one member we authored — the HD Reorganization Reload that CardDemo does not ship: loads the shipped unload back into DBPAUTP0 (22 authorization summaries, 202 details). Run it once after install; the IMS screens (CPVS/CPVD) and the purge job then have data.
UNLDPADB, LOADPADB, UNLDGSAMDFSRRC00IMS flat-file unload/load through GSAM. As published these expect datasets produced at your site (the flat files one job writes for the other) — run UNLDPADB first.

The batch schedule (CA-7 and Control-M)

CardDemo does not only ship the jobs — it ships its production schedule, in both formats a mainframe shop exports: a CA-7 LJOB,LIST=ALL report (CardDemo.ca7: the 17-job trigger graph — CLOSEFIL triggers the readers, the statement run, the purge; each of those triggers the next; three schedule-id variants 030/031/032) and a Control-M folder export (CardDemo.controlm: four SMART folders — DAILY-TransactionBackup, WEEKLY-TransactionTypesDBRefresh, WEEKLY-DisclosureGroupsRefresh, MONTHLY-InterestCalculation — chained by IN/OUT conditions, one folder waiting on another's condition). SteelFrame's scheduler imports both definition files verbatim: 32 job definitions naming 23 scheduled jobs over 21 JCL members — their triggers, conditions and schedule-ids are AWS's, not ours.

The schedule is active on this system and the batch actually runs under it. The verified result, cycle by cycle:

MechanismWhat ranResult
CA-7 trigger closure SCHID=030CLOSEFIL → TRANTYPE, READACCT→READCARD→READCUST→READXREF, CREASTMT→TXT2PDF1, CBPAUP0J→POSTTRAN → WAITSTEP → OPENFILevery trigger fired in order; 9 of the 12 jobs RC 0; TXT2PDF1 and CBPAUP0J fail (below), and because CBPAUP0J is POSTTRAN's only trigger, CA-7 leaves POSTTRAN waiting — demanded on its own it ends RC 4
CA-7 SCHID=031CLOSEFIL1 → TRANCATG → WAITSTEP → OPENFIL → CLOSEFIL → PRTCATBLall RC 0, cycle ended OK
CA-7 SCHID=032CLOSEFIL2 → TCATBALF → WAITSTEPall RC 0, cycle ended OK
Control-M foldersDAILY: CLOSEFIL→TRANBKP→WAITSTEP→OPENFIL · WEEKLY-TT: MNTTRDB2→TRANEXTR · WEEKLY-DG: (waits on the weekly MNTTRDB2 condition) CLOSEFIL→DISCGRP→WAITSTEP→OPENFIL · MONTHLY: CLOSEFIL→INTCALC→COMBTRAN→WAITSTEP→OPENFILall four folders ran to ENDED-OK; the cross-folder condition released the dependent folder; every job RC 0 except COMBTRAN RC 4

Of the 23 scheduled jobs, 19 end RC 0 and two end RC 4 by design: POSTTRAN (see the return-code note below) and COMBTRAN (its IDCAMS REPRO into the transaction file reports IDC3013I DUPLICATE RECORD for records the daily run had already posted — the same condition code a z/OS run gives once the file holds them). The two that fail are not scheduler faults and are reported exactly as they happen:

To drive the schedule yourself: PGM=ZWSCHED,PARM='DEMAND,JOB=CLOSEFIL,SCHID=030' demands a CA-7 job and its trigger closure; PARM='ORDER,FOLDER=DAILY-TransactionBackup' orders a Control-M folder; the scheduler page shows each cycle's jobs, triggers, conditions and log. WAITSTEP really waits — COBSWAIT calls the MVSWAIT timer for the 36 seconds its SYSIN asks for — so a full cycle takes a few minutes.

Return codes. POSTTRAN ends with RC 4 when it rejects transactions — the shipped daily data deliberately contains transactions that fail validation, so RC 4 with a non-empty reject file is the expected result, not a failure. INTCALC, TRANREPT and CREASTMT likewise return 0 or 4 by design.

F. Data files & libraries

VSAM files as defined to CICS

CICS FILEDatasetContent
ACCTDATAWS.M2.CARDDEMO.ACCTDATA.VSAM.KSDSAccount master
CARDDATAWS.M2.CARDDEMO.CARDDATA.VSAM.KSDSCard master
CARDAIXAWS.M2.CARDDEMO.CARDDATA.VSAM.AIX.PATHCards by account (alternate index path)
CUSTDATAWS.M2.CARDDEMO.CUSTDATA.VSAM.KSDSCustomer master
CCXREFAWS.M2.CARDDEMO.CARDXREF.VSAM.KSDSCard → customer → account cross reference
CXACAIXAWS.M2.CARDDEMO.CARDXREF.VSAM.AIX.PATHCross reference by account (alternate index path)
TRANSACTAWS.M2.CARDDEMO.TRANSACT.VSAM.KSDSPosted transactions
USRSECAWS.M2.CARDDEMO.USRSEC.VSAM.KSDSUser security (sign-on users)

Batch-only VSAM: AWS.M2.CARDDEMO.TRANTYPE, TRANCATG, DISCGRP, TCATBALF (all .VSAM.KSDS), plus the sequential twins (ACCTDATA.PS, DALYTRAN.PS, the TRANBKP / TRANTYPE.BKUP / TRANCATG.PS.BKUP generation groups) and the export file AWS.M2.CARDDEMO.EXPORT.DATA.PS.

Libraries

LibraryHolds
CARDDEMO.SOURCEThe 44 COBOL programs (online and batch, base and optional features)
CARDDEMO.BMSThe 21 BMS mapsets
CARDDEMO.COPYLIBRecord layouts, menu tables, symbolic maps, DCLGENs, IMS PCB masks, MQ copybooks
CARDDEMO.JCLAll jobs in §E
CARDDEMO.CSDThe four official CSD decks (CARDDEMO, CRDDEMOD, CRDDEMOM, CRDDEMO2)
CARDDEMO.DDLDb2 DDL: TRNTYPE, TRNTYCAT, AUTHFRDS and their indexes
CARDDEMO.IMS.DBDSRC / PSBSRCIMS DBD and PSB source (four each); generated into OEM.IMS.IMSP.DBDLIB / PSBLIB
AWS.M2.CARDDEMO.LOADLIBBatch load modules (STEPLIB of the shipped JCL)
AWS.M2.CARDDEMO.CNTLControl cards for the Db2 jobs (DB2CREAT, DB2FREE, DB2LTTYP, DB2LTCAT, …)

Db2 (subsystem DSN1)

TableRows shippedUsed by
CARDDEMO.TRANSACTION_TYPE7CTLI, CTTU, COBTUPDT, TRANEXTR
CARDDEMO.TRANSACTION_TYPE_CATEGORY18TRANEXTR
CARDDEMO.AUTHFRDS0 (no data shipped)COPAUS1C, COPAUS2C

To recompile anything, the compiling manual covers the procedures; CardDemo programs compile with IGYWCL and SYSLIB pointing at CARDDEMO.COPYLIB, the CICS ones through the CICS translator and the Db2 ones through the precompiler, exactly as their headers expect.

G. Source, licence & credit

CardDemo is developed and published by Amazon Web Services at github.com/aws-samples/aws-mainframe-modernization-carddemo under the Apache License 2.0. The copy on this engine was taken from that repository. The source corrections in §B are ours, made under that licence, marked in the affected members, and described here so that anyone can compare the installed members with upstream. We have not modified the application in any other way, and we do not represent this work as AWS's. If you are evaluating SteelFrame, the strongest test is the one CardDemo was built for: bring the official source, compile it here, and compare the results with your own system.