Contents

Preface
What this book is about
Who should read this book
Summary of changes
Changes for CICS Transaction Server for z/OS, Version 3 Release 1
Changes for CICS Transaction Server for z/OS, Version 2 Release 3
Changes for CICS Transaction Server for z/OS, Version 2 Release 2
Changes for CICS Transaction Server for z/OS, Version 2 Release 1
Changes for CICS Transaction Server for OS/390, Version 1 Release 3
Writing CICS Applications
What is a CICS application?
CICS programs, transactions and tasks
CICS programming
CICS programming commands
System programming commands
EXEC interface block (EIB)
Translation
Translator Options
Testing for CICS
CICS programming roadmap
Language Environment
Language Environment services
Using Language Environment Abend-handling
User-written Language Environment condition handlers
Managing Language Environment storage
Mixing languages in Language Environment
Using Dynamic Link Libraries and Language Environment
Defining runtime options for Language Environment
Runtime options in child enclaves
CEEBXITA coding
Determining which options were used
Writing a CEEBINT initialization exit for Language Environment
Programming in COBOL
COBOL programming considerations
COBOL programming restrictions
Language Environment CBLPSHPOP option
Using the DL/I CALL interface
Considerations for VS COBOL II programs
Using based addressing with COBOL
Using WITH DEBUGGING MODE
Calling subprograms from COBOL
Rules for calling subprograms
Flow of control between programs and subprograms
Using the COBOL2 and COBOL3 translator options
Literals intervening in blank lines
Lower case characters
Sequence numbers containing any character
REPLACE statement
Batch compilation
Nested programs
Reference modification
Global variables
Comma and semicolon as delimiters
Symbolic character definition
Programming in C and C++
C and C++ programming considerations
XPLink considerations for C and C++ programming
Passing arguments in C or C++
Accessing the EIB
Naming EIB fields
Locale support for C and C++
Programming in C++
Restrictions
Programming in PL/I
PL/I programming restrictions
Language Environment considerations for PL/I applications
Programming in Assembler
Language Environment considerations for Assembler applications
Calling Assembler programs
Preparing applications to run
Translation and compilation
The integrated CICS translator
Using the integrated CICS translator
Specifying CICS translator options
The translation process
The CICS-supplied translators
Dynamic invocation of the separate translator
Using a CICS translator
Defining translator options
Translator options
Translator options table
Using COPY statements
The CICS-supplied interface modules
The EXEC interface modules
The CPI Communications interface module
The SAA Resource Recovery interface module
Using the EXEC interface modules
COBOL
PL/I
C and C++
Assembler language
EXAMPLE Assembler language PROGRAM using LEASM
Installing application programs
Program installation roadmap
Preparing for program installation
Defining MVS residence and addressing modes
Establishing a program’s addressing mode
CICS address space considerations
Making programs permanently resident
Running applications in the link pack area
Running application programs in the RDSAs
Assembler
C and C/++
COBOL
PL/I
Using BMS map sets in application programs
Using the CICS-supplied procedures to install application programs
Installing programs in load library secondary extents
Including the CICS-supplied interface modules
Installing assembler language application programs
Installing COBOL application programs
Sample JCL to install COBOL application programs
Installing PL/I application programs
Sample JCL to install PL/I application programs
PL/I procedure with an integrated translator
Installing C application programs
Sample JCL to install C application programs
Using your own job streams
Translator requirements
Online programs that use EXEC CICS or EXEC DLI commands
Online programs that use the CALL DLI interface
Batch or BMP programs that use EXEC DLI commands
Batch or BMP programs that use DL/I CALL commands
Installing map sets and partition sets
Installing map sets
Types of map sets
Installing physical map sets
Installing symbolic description map sets
Installing physical and symbolic description maps together
Installing partition sets
Defining programs, map sets, and partition sets to CICS
Application design
Application design
Pseudoconversational and conversational design
Terminal interruptibility
How tasks are started
Which transaction?
Separating business and presentation logic
Multithreading: Reentrant, quasi-reentrant and threadsafe programs
Quasi-reentrant application programs
Threadsafe programs
OPENAPI programs
Using the FORCEQR system initialization parameter
Non-reentrant programs
Storing data within a transaction
Transaction work area (TWA)
User storage
COMMAREA in LINK and XCTL commands
Channels in LINK and XCTL commands
Program storage
Temporary storage
Intrapartition transient data
GETMAIN SHARED command
Your own data sets
Lengths of areas passed to CICS commands
LENGTH options
Journal records
Data set definitions
Recommendation
Minimizing errors
Protecting CICS from application errors
Testing applications
Non-terminal transaction security
Design for performance
Program size
Virtual storage
Reducing paging effects
Exclusive control of resources
Operational control
Operating system waits
The NOSUSPEND option
Efficient data operations
Efficient database operations
Efficient data set operations
Efficient browsing (in non-RLS mode)
Efficient logging
Efficient sequential data set access
Efficient terminal operations
Length of the data stream sent to the terminal
Basic mapping support considerations
Page-building and routing operations
Requests for printed output
Additional terminal control considerations
Sharing data across transactions
Using the common work area (CWA)
Protecting the CWA
Using the TCTTE user area (TCTUA)
Using the COMMAREA in RETURN commands
Using a channel on RETURN commands
Using the display screen to share data
Enhanced inter-program data transfer: channels as modern-day COMMAREAs
Channels: quick start
Containers and channels
Basic examples
Using channels: some typical scenarios
One channel, one program
One channel, several programs (a component)
Several channels, one component
Multiple interactive components
Creating a channel
The current channel
Current channel example, with LINK commands
Current channel example, with XCTL commands
Current channel: START and RETURN commands
The scope of a channel
Scope example, with LINK commands
Scope example, with LINK and XCTL commands
Discovering which containers a program's been passed
Discovering which containers were returned from a link
CICS read only containers
Designing a channel: best practices
Constructing and using a channel: an example
Channels and BTS activities
Context
Using channels from JCICS
Dynamic routing with channels
Data conversion
Why is data conversion needed?
Preparing for code page conversion with channels
Data conversion with channels
Benefits of channels
Migrating from COMMAREAs to channels
Migration of existing functions
Migration to the new function
Affinity
Types of affinity
Inter-transaction affinity
Transaction-system affinity
Programming techniques and affinity
Safe techniques
Unsafe techniques
Suspect techniques
Recommendations
Safe programming to avoid affinity
The COMMAREA
The TCTUA
Using ENQ and DEQ commands with ENQMODEL resource definitions
BTS containers
Unsafe programming for affinity
Using the common work area
Using GETMAIN SHARED storage
Using the LOAD PROGRAM HOLD command
Sharing task-lifetime storage
Using the WAIT EVENT command
Using ENQ and DEQ commands without ENQMODEL resource definitions
Suspect programming for affinity
Using temporary storage
Using transient data
Using the RETRIEVE WAIT and START commands
Using the START and CANCEL REQID commands
Using the DELAY and CANCEL REQID commands
Using the POST and CANCEL REQID commands
Detecting inter-transaction affinities
Inter-transaction affinities caused by application generators
Duration and scope of inter-transaction affinities
Affinity transaction groups
Relations and lifetimes
Recovery design
Journaling
Journal records
Journal output synchronization
Syncpointing
Dealing with exception conditions
Default CICS exception handling
Handling exception conditions by in-line code
How to use the RESP and RESP2 options
An example of exception handling in C
An example of exception handling in COBOL
Modifying default CICS exception handling
Using the HANDLE CONDITION command
RESP and NOHANDLE options
How CICS keeps track of what to do
Using the HANDLE CONDITION ERROR command
Using the IGNORE CONDITION command
Using the HANDLE ABEND command
Using PUSH HANDLE and POP HANDLE commands
Abnormal termination recovery
Creating a program-level abend exit
Retrying operations
Trace
Trace entry points
Monitoring
Dump
The QUERY SECURITY command
Using the QUERY SECURITY command
Security protection at the record or field level
CICS-defined resource identifiers
SEC system initialization parameter
Programming hints
Data Management
An overview of file control
VSAM data sets
Key-sequenced data set (KSDS)
Entry-sequenced data set (ESDS)
Relative record data set (RRDS)
Empty data sets
VSAM alternate indexes
Accessing files in RLS mode
BDAM data sets
CICS shared data tables
Coupling facility data tables
Coupling facility data table models
Techniques for sharing data
Using CICS commands to read records
Direct reading (using READ command)
Sequential reading (browsing)
Skip-sequential processing
Using CICS commands to update records
Using CICS commands to delete records
Deleting single records
Deleting groups of records (generic delete)
Read integrity
Using CICS commands to add records
Adding to a KSDS
Adding to an ESDS
Adding to an RRDS
Records that are already locked
Specifying record length
Sequential adding of records (WRITE MASSINSERT command)
File control command options
The RIDFLD option
The INTO and SET options
The FROM option
The TOKEN option
KEYLENGTH option for remote data sets
Transaction deadlocks
VSAM-detected deadlocks (RLS only)
Rules for avoiding deadlocks
File control--VSAM considerations
VSAM record identification
Key
Relative byte address (RBA) and relative record number (RRN)
Locking of VSAM records in recoverable files
Update locks and delete locks (non-RLS mode only)
RLS Record level locking
Exclusive locks and shared locks
Conditional VSAM file update requests
File control implementation of NOSUSPEND
CICS locking for writing to ESDS
File control--BDAM considerations
Identifying BDAM records
Block reference subfield
Physical key subfield
Deblocking argument subfield
Browsing records from BDAM data sets
Adding records to BDAM data sets
Updating records from BDAM data sets
Database control
DL/I databases
DB2 databases
Requests to DB2
CICS documents
Using the DOCUMENT programming interface
Creating a document
Setting up document templates
Templates in a partitioned data set
Templates in a CICS program
Templates in CICS files, z/OS UNIX System Services HFS files, temporary storage, or transient data
Creating templates in exit programs
Programming with documents and document templates
Symbols and symbol lists
Setting symbol values
Embedded template commands
Using templates in your application
The lifespan of a document
Constructing a document
Using Bookmarks
Code page conversion for documents
Named counter servers
The named counter fields
Named counter pools
Named counter options table
Using the named counter EXEC interface
Using the named counter CALL interface
Application programming considerations
Syntax
Return codes
Named counter recovery
Data Communication
Terminal control
Terminal access method support
Terminal control commands
Send/receive mode
Speaking out of turn
Interrupting
Terminal waits
Using data transmission commands
What you get on a RECEIVE
Device control commands
Terminal device support
Finding out about your terminal
EIB feedback on terminal control operations
Using VTAM
Chaining input data
Chaining output data
Handling logical records
Response protocol
Using function management headers
Preventing interruptions (bracket protocol)
Using sequential terminal support
Coding considerations for sequential terminals
Using TCAM
Coding for the TCAM/DCB interface
Using batch data interchange
Destination selection and identification
Definite response
Waiting for function completion
The 3270 family of terminals
History of the 3270
Screen fields
Personal computers
The 3270 buffer
The output datastream
3270 write commands
3270 display fields
Display characteristics
3270 field attributes
Protection
Modification
Intensity
Base color
Extended attributes
Orders in the data stream
The start field order
The modify field order
The set buffer address order
The set attribute order
Outbound data stream sample
Input from a 3270 terminal
Data keys
Keyboard control keys
Attention keys
Reading from a 3270 terminal
Inbound field format
Input data stream example
Unformatted mode
CICS support for printing
Formatting for CICS printers
CICS 3270 printers
CICS 3270 printer options
PRINT option and print control bit
ERASE option
Line width options: L40, L64, L80, and HONEOM
NLEOM option
FORMFEED
PRINTERCOMP option
Non-3270 CICS printers
SCS input
Determining the characteristics of a CICS printer
BMS page size, 3270 printers
Supporting multiple printer types
Using CICS printers
Printing with a START command
Printing with transient data
Printing with BMS routing
Using Non-CICS printers
Formatting for non-CICS printers
Non-CICS printers: Delivering the data
Programming for non-CICS printers
Notifying the print application
Printing display screens
CICS print key
ISSUE PRINT and ISSUE COPY
Hardware print key
BMS screen copy
CICS interface to JES
Using the CICS interface to JES
Spool interface restrictions
Creating output spool files
Using the MVS internal reader
Reading input spool files
JES exits
Identifying spool files
Examples of SPOOL commands
COBOL
PL/I
C
ASSEMBLER
CICS intercommunication
Design considerations
Programming language
Transaction routing
Function shipping
Distributed program link (DPL)
Using the distributed program link function
Examples of distributed program link
Programming considerations for distributed program link
Asynchronous processing
Distributed transaction processing (DTP)
Common Programming Interface Communications (CPI Communications)
External CICS interface (EXCI)
Basic Mapping Support (BMS)
Basic mapping support
BMS support levels
Minimum BMS
Standard BMS
Full BMS
A BMS output example
Creating the map
Defining map fields: DFHMDF
Defining the map: DFHMDI
Defining the map set: DFHMSD
Writing BMS macros
Assembling the map
Physical and symbolic map sets
The SDF II alternative
Grouping maps into map sets
The Application Data Structure (ADS)
Using complex fields
Composite fields: the GRPNAME option
Repeated fields: the OCCURS option
Block data
Support for non-3270 terminals
Output considerations for non-3270 devices
Differences on input
Special options for non-3270 terminals
Device-dependent maps
Device dependent support: DDS
Finding out about your terminal
Sending BMS mapped output
Acquiring and defining storage for the maps
BASE and STORAGE options
Initializing the output map
Moving the variable data to the map
Setting the display characteristics
Changing the attributes
Attribute value definitions: DFHBMSCA
Using the SEND MAP command
SEND MAP control options
Other BMS SEND options: WAIT and LAST
Merging the symbolic and physical maps
MAPONLY option
DATAONLY option
The SEND CONTROL command
Building the output screen
What you start with
What is sent
Where the values come from
Outside the map
Using GDDM and BMS
Positioning the cursor
Sending invalid data and other errors
Output disposition options: TERMINAL, SET, and PAGING
Using SET
Receiving mapped data
An input-output example
The symbolic input map
Programming mapped input
Using the RECEIVE MAP command
Getting storage for mapped input
Formatted screen input
Modified data
Upper case translation
Using the attention identifier
Using the HANDLE AID command
Finding the cursor
Processing the mapped input
Handling input errors
Flagging errors
Saving the good input
Rechecking
Sending mapped output after mapped input
MAPFAIL and other exceptional conditions
EOC condition
Formatting other input
BMS logical messages
Building logical messages
The SEND PAGE command
RETAIN and RELEASE
The AUTOPAGE option
Terminal operator paging: the CSPG transaction
Logical message recovery
Cumulative output -- the ACCUM option
Floating maps: how BMS places maps using ACCUM
Page breaks: BMS overflow processing
Map placement rules
ASSIGN options for cumulative processing
Input from a composite screen
Performance considerations
Minimizing path length
Reducing message lengths
Text output
The SEND TEXT command
Text logical messages
Text pages
Text lines
Header and trailer format
SEND TEXT MAPPED and SEND TEXT NOEDIT
Message routing
Message destinations
Eligible terminals
Destinations specified with OPCLASS only
OPCLASS and LIST omitted
Route list provided
Route list format
Message delivery
Undeliverable messages
Recoverable messages
Message identification
Programming considerations with routing
Routing and page overflow
Routing with SET
Interleaving a conversation with message routing
The MAPPINGDEV facility
SEND MAP with the MAPPINGDEV option
RECEIVE MAP with the MAPPINGDEV option
Sample assembler MAPPINGDEV application
Partition support
Uses for partitioned screens
Scrolling
Data entry
Lookaside
Data comparison
Error messages
Partition definition
3290 character size
Establishing partitioning
Partition options for BMS SEND commands
Determining the active partition
Partition options for BMS RECEIVE commands
ASSIGN options for partitions
Partitions and logical messages
Partitions and routing
Attention identifiers and exception conditions
Terminal sharing
Support for special hardware
Logical device components
Defining logical device components
Sending data to a logical device component
LDCs and logical messages
LDCs and routing
10/63 magnetic slot reader
Field selection features
Trigger field support
Cursor and pen-detectable fields
Selection fields
Attention fields
BMS input from detectable fields
Outboard formatting
CICS management functions
Interval control
Expiration times
Request identifiers
Task control
Controlling sequence of access to resources
Program control
Program linking
Application program logical levels
Link to another program expecting return
Passing data to other programs
COMMAREA
Channels
INPUTMSG
Using mixed addressing modes
Using LINK to pass data
Using RETURN to pass data
Storage control
Overview of CICS storage protection and transaction isolation
Storage protection
Transaction isolation
Defining the storage key for applications
System-wide storage areas
Task lifetime storage
Program working storage specifically for exit and PLT programs
Passing data by a COMMAREA
The GETMAIN command
Selecting the execution and storage key
User-key applications
CICS-key applications
Using transaction isolation
MVS subspaces
Subspaces and basespaces for transactions
The common subspace and shared storage
Transient data control
Intrapartition transient data queues
Extrapartition queues
Indirect queues
Automatic transaction initiation (ATI)
Temporary storage control
Temporary storage queues
Typical uses of temporary storage control
Testing and debugging applications
Testing applications
Preparing the application for testing
Preparing the system for testing
Execution diagnostic facility (EDF)
Restrictions when using EDF
OPEN TCBs and EDF
Parameter list stacking
Security considerations
What does EDF display?
The header
The body
Using EDF
Interrupting program execution
Using EDF in single-screen mode
Using EDF in dual-screen mode
EDF and remote transactions
EDF and non-terminal transactions
EDF and DTP programs
Stopping EDF
Overtyping to make changes
EDF responses
Using EDF menu functions
Temporary storage browse (CEBR)
Using the CEBR transaction
What does the CEBR transaction display?
The header
The command area
The body
The message line
Using the CEBR function keys
Using the CEBR commands
Using the CEBR transaction with transient data
Command-level interpreter (CECI)
What does CECI display?
The command line
The status line
The body
The message line
CECI options on function keys
Using CECI
Making changes
Using the CECI function keys
Expanded area
Variables
The EXEC interface block (EIB)
Error messages display
Saving commands
How CECI runs
CECI sessions
Abends
Exception conditions
Program control commands
Terminal sharing
Shared storage: ENQ commands without LENGTH option
Using debuggers with CICS applications
Debugging profiles
Using debugging profiles to select programs for debugging
Using generic parameters in debugging profiles
Debugging CICS applications from a workstation
Preparing to debug applications from a workstation
Using Debug Tool with CICS applications
About Debug Tool
Preparing to debug applications with Debug Tool
Appendixes
Appendix A. Using the phonetic conversion subroutine DFHPHN
Appendix B. Migration for OS/VS COBOL programs
Conversion to Enterprise COBOL
Based addressing
Artificial assignments
Bibliography
The CICS Transaction Server for z/OS library
The entitlement set
PDF-only books
Other CICS books
Books from related libraries
DL/I
DB2
Screen definition facility II (SDF II)
Common programming interface
Common user access
Programming languages
Teleprocessing Network Simulator (TPNS)
Language Environment:
Miscellaneous books
Determining if a publication is current
Accessibility
Index
Notices
Trademarks
Sending your comments to IBM
[[ Contents Previous Page | Next Page Index ]]