m204 Appl Dev Guide
m204 Appl Dev Guide
ADG71
Computer Corporation of America
Corporate Headquarters: CCA International:
200 West Street First Floor, Edinburgh House
3rd Floor West 43-51 Windsor Road
Waltham, MA 02451 Slough, Berkshire SL1 2EE
USA England
Phone: (781) 466-6601 Phone: +44-1753-472800
Fax: (781) 466-6641 Fax: +44-1753-472888
Other trademarks and trade names are used to identify entities claiming the marks and names
of their products and are hereby acknowledged.
Permission to use this technical documentation (the “Document”) retrieved from the Computer
Corporation of America’s (“CCA”) server is granted, provided that (1) the copyright notice in the
document appears on all copies, (2) use of this Document is for informational and non-
commercial or personal and internal use only, and (3) no modifications are made to this
Document. Use, duplication, or disclosure by the Government is subject to restrictions as set
forth in subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at
DFARS 252.227-7013.
CCA makes no representations about the suitability of the information contained in the
Document. THIS DOCUMENT IS BEING PROVIDED TO YOU “AS IS” ACCORDINGLY, CCA
MAKES NO WARRANTY AS TO ITS ACCURACY OR ITS USE.CCA HEREBY DISCLAIMS ALL
WARRANTIES AND CONDITIONS WITH REGARD TO THIS DOCUMENT, INCLUDING ALL
IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL CCA BE
LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
INFORMATION CONTAINED IN THIS DOCUMENT.
Any use of the technical documentation or the information contained herein is at the risk of the
user. This document may include technical or other inaccuracies or typographical errors.
Changes are periodically added to this Document and CCA reserves the right to improve or make
changes to the document at any time and without prior notice.
Contents
Model 204®
Application Development Guide
Preface
Audience .................................................................................................................. vii
Introducing Model 204 electronic documentation..................................................... vii
Contacting CCA Customer Support ....................................................................... i-vii
Notation conventions............................................................................................... viii
Contents v
Using subroutines ..................................................................................................... 2-19
Using %variables In complex subroutines............................................................ 2-20
Using dummy strings in subroutines .................................................................... 2-20
Index
This manual is not designed to replace any manual in the Model 204
documentation set, but to provide a supplement that helps you produce clearer,
faster applications. The information in this manual is not version-specific.
Audience
This manual is for system managers, file managers, and application
programmers, who want to develop Model 204 User Language code that is
efficient, readable, and easy to maintain.
The document files are in portable document format (PDF) and compiled into a
library so you can search all the documents at once for a word or phrase. You
can download the manuals to a network server and view them, or view them
directly from the CD-ROM. You can view and search an individual manual with
any PDF reader, but to search the compiled library, you must download the free
Adobe® Acrobat® Reader® from the Adobe web site.
Note: You may access the documentation online or print out copies, as
needed. However, consistent with the terms of your license agreement, you
may not copy or distribute the CD-ROM, or distribute hard-copies to third
parties.
http://www.cca-int.com
If you have not licensed this product directly from CCA, please consult your
vendor.
Preface vii
Notation conventions
This manual uses the following standard notation conventions in statement
syntax and examples:
Convention Description
TABLE tablename In text, italics are used for variables and for
emphasis. In examples, italics denote a
variable value that you must supply. In this
example, you must supply a value for
tablename.
In this chapter
This chapter has the following sections:
• Procedure names
• Fieldnames
• %Variables
• Statement labels
• Subroutines
• Other naming convention considerations
• Filenames can either describe the file content or conform to local file-
naming standards. For example:
EMPLOYE
PER0001
CCA recommends that you adopt a file-naming standard for your site. This
standard should reflect data about the file contents, such as the file number or
file description, and link to specific entries in the DICTIONARY. For example:
Model 204 files made up of multiple datasets or that are part of a group should
follow a consistent naming scheme. For example:
• Use an identifier to indicate that the file is a Model 204 file. Distinguish
between live and dump files.
• Use a name that identifies whether the file is a test or a production file.
• To ease conversion from test to production systems, use the same Model
204 filename in all Model 204 copies at your site (for example, between test
and production copies). This also simplifies file maintenance.
• If your site has both data and procedure files, clearly distinguish between
the two.
For example, your site uses these identifiers:
If multiple subsystems share the same procedure file, use the subsystem name
as part of the prefix to distinguish among procedures from different
subsystems.
When using the application subsystem facility, you must use a prefix to
distinguish between precompiled and nonprecompiled procedures. CCA
recommends using P. and N. prefixes for precompiled and nonprecompiled
procedures. For example:
P.DAILYAVG N.TABLESRT
P.DEL.REC N.OPEN.PROC
P.ADD.STORE N.PER.SETUP
The recommended characters for fieldnames are A-Z, 0-9, period (.), and
underscore (_). Using any other special characters, especially spaces, makes
the fieldname more difficult to read and isolate within a program.
When possible, call the same field by the same name if it exists in more than
one file, especially if the files are likely to be grouped and used as a logical unit.
Never use reserved words in fieldnames. The reserved words in Model 204 are
listed in Table 1-1.
AFTER END OR EQ
AND IN RECORDS GT
AT IS TAB LE
BY NOR TO NE
%DATE = $DATE
%ACCT = Account number
%CLIENT.ID = Client ID number
When creating %variables to hold the values of global variables, use a G. prefix
followed by the name of the global variable. For example:
For example:
FD.MARKETS:
FIND ALL RECORDS FOR WHICH...
CT.COMP.REC:
COUNT RECORDS IN FD.COMP.REC...
DATE_MATCH:
FIND ALL RECORDS...
• A statement that follows a FIND or STORE statement and does not have
an END statement. CCA strongly recommends, however, using an END
statement instead.
Although not required, statement labels may be useful in the following cases:
• STORE
• ON
• Subroutines
Simple subroutines
Begin the names of %variables unique to a subroutine with a %SUB prefix, or
with the first three characters of the subroutine name. For example:
%SUB.WELL.DATE
%WEL.DATE
Complex subroutines
To avoid conflicts in subroutine names, prefix all subroutines that reside in a
procedure file outside your current file with a name unique to the procedure file.
For example, if you have a procedure file containing various subroutines used
for printing out data and named PRTSUBS:
PRTSUBS.SALES
PRTSUBS.REGION
Distinguish between internal and external subroutines. Use, for example, an IN
and an EX prefix to differentiate between the two:
IN.WELL.DATE
EX.PRT.RECS
When using a record type field to distinguish between different record types
within the same file, abbreviate the rectype name, but keep it meaningful and
descriptive of the record's content. This helps make the data self-descriptive.
For example, in the Model 204 demonstration database, there are two types of
records in the CLIENTS file. They are RECTYPE = POLICYHOLDER, for the
records containing information about the holder of the insurance policy, and
RECTYPE = DRIVER for records about every driver listed on any insurance
policy.
Model 204 provides you with a versatile set of application development tools.
This chapter provides suggestions on how to use Model 204 features to create
efficient applications.
In this chapter
This chapter has the following sections:
• Sample coding structure
• Using comments
• Using commands
• Declaring %variables
• Using $functions
• Committing records
• Releasing records
• Using the IN clause
• Using lists
• Sorting records
• Using subroutines
BEGIN
Dialog Control Read screen and input commands, process PF keys, get
input data, perform edits, make audit entries
END
Note:Do not use symbols that can be misconstrued as dummy strings (??, ?&,
?S), even within comments. If you do, Model 204 treats them as dummy strings
and gives you unexpected results. Also, do not end comments with a hyphen,
because this also comments out the line following the comment.
*****************************************************
* INCLUDE VALIDATION SUBROUTINE FOR PART NUMBER *
*****************************************************
IN PROCLIB INCLUDE SUB.PART.VAL
Or,
• Keep track of any system-level parameters that you set; that is, RESET
MCPU, MBSCAN, ERMX. You can monitor system-level parameters from
the audit trail.
• Type of %variable
When declaring array %variables, use index loops. Also, use the NO FIELD
SAVE option whenever possible to save space and to indicate that the
%variable will not be used as a fieldname. For example:
BEGIN
VARIABLE %X IS FLOAT
VARIABLE %NAME IS STRING LEN 20 ARRAY (10) NO FIELD
SAVE
SCREEN SELECT
PROMPT 'NAME' LEN 10 INPUT NAME LEN 20
END SCREEN FOR %X FROM 1 TO 10
READ SCREEN SELECT
%NAME (%X) = %SELECT:NAME
END FOR
END
Call $functions like $DATE only once per request. All $functions incur some
overhead, and because the date rarely changes during a run, it is more efficient
to establish the value once and, if you need to reference the value again, place
the result of the call in a %variable.
You can eliminate the need to use $SUBSTR to retrieve the first n characters
of a value by assigning the original value to a variable of the correct length. This
method makes the code more difficult to read and update, but it saves CPU
time. For example:
BEGIN
%A IS STRING LEN 2
%B IS STRING LEN 10
%B = '1234567890
%A = %B
PRINT '%A = ' WITH %A
END
%A = 12
If a situation involves repeated calls to a User Language $function, you can
save CPU time by resolving the $function to a %variable and then calling the
%variable. For example, recode the following statement:
to read:
Formatting IF statements
Format IF statements as follows:
IF condition THEN
.
.
.
END IF
Use consistent operator syntax, that is, do not mix symbols and abbreviations.
For example:
or
IF %A EQ 'X' THEN
PRINT %A
END If
Always use a continuation hyphen to segment compound conditionals. For
example:
IF %A EQ 'X' AND -
%B EQ 'Y' THEN
%C = %A
END IF
Evaluating IF statements
The condition following the IF statement is always evaluated to zero or
nonzero. Therefore, it is more efficient to use the expression IF %N rather than
IF %N NE 0 and, conversely, IF NOT %N rather than IF %N = 0.
If you have a complex condition that is used several times in a procedure, you
can create a fixed %variable and refer to the entire condition under that
%variable name. For example:
CTRECS:
COUNT RECORDS IN FDRECS
IF NOT COUNT IN CTRECS THEN
PRINT 'NO RECORDS FOUND'
END IF
.
.
.
********************************
** EVALUATE IF CONDITION *
********************************
%VALID.DATA = (COUNT IN CTRECS) AND (%FLD = 'VAL')
IF %VALID.DATA THEN
.
.
.
IF %VALID.DATA AND %1 = 5 THEN
.
.
.
%OPTION = OPT
IF %OPTION EQ '1' THEN
%OPTION = OPT
JUMP TO (OPT1, OPT2, OPT3) OPT
**********************************
** INVALID OPTIONS FALL TO HERE **
**********************************
PRINT 'INVALID OPTION'
JUMP TO CHECKED
OPT1: ... process option 1
OPT2: ... process option 2
OPT3: ... process option 3
CHECKED: ... end of jump to
• ELSE IF functions as a nested IF statement. Note that for ELSE IF, each IF
requires an END IF statement. For example:
IF A > B THEN
A = A - 1
ELSE IF B > C THEN
C = C + 1
END IF
END IF
IF A > B THEN
A = A - 1
ELSEIF A < B THEN
A = A + 1
*****************
** ELSE A = B **
****************
NUMERIC RANGE
HASHED
SORT KEY (SFGES. SFLS)
ORDERED
If you must search on a nonkey field, try to pair the FIND with a Boolean AND
using a key field as the other search criterion. The key field search is performed
first, which means (ideally) that there are fewer records in the set requiring a
Table B search. This helps minimize Table B access. You might also want to
consider redefining fields so that they meet the more efficient search criteria.
• When building a system, if you know that a field will be used to find sets of
records, define the field as KEY or one of the types listed above.
• Like the nonkey search, pair IS PRESENT with a Boolean AND and a key
field when doing a FIND to minimize the number of records that require a
sequential Table B search
In situations where you perform FINDs using both %variables and constants,
put the constant terms (that is, terms without %variables or %%variables) into
a separate FIND that is only executed once. Let the %%variable FIND access
the previously found set. For example:
BEGIN
FD.MAKE:
FIND ALL RECORDS WHERE MAKE = FORD
Field attributes that affect the way a file is accessed during a FIND are
described in Table 2-2.
The chart below can help you use FIND efficiently when you are writing
requests or creating fields. The FIND is performed on the value '12345'.
• B = Table B Search
• C = Table C Index
• O = Ordered Index
= C C C O O C B
IS (EQ) B B O B O R R
IS GE B B O B O R R
IS LE B B O B O R R
IS GT B B O B O R R
IS LT B B O B O R R
IS BEFORE B O B O B B B
IS AFTER B O B O B B B
IS NUM B B O B O R R
IS NUM GT B B O B O R R
IS NUM B B O B O R R
BEFORE
IS NUM AFTER B B O B O R R
IS IN RANGE B B O B O R R
IS NUM IN B B O B O R R
RANGE
IS BETWEEN B B O B O R R
IS NUM B B O B O R R
BETWEEN
(IS) LIKE B O B O B B B
IS ALPHA B O B O B B B
IS ALPHA GT B O B O B B B
IS ALPHA B O B O B B B
BEFORE
IS ALPHA B O B O B B B
AFTER
IS ALPHA IN B O B O B B B
RANGE
IS ALPHA B O B O B B B
BETWEEN
IS PRESENT B B B B B B B
COMMIT Leaves lists and found sets of records intact. COMMIT can
be used within a FOR EACH RECORD loop.
COMMIT RELEASE Releases all found sets of records. You must use COMMIT
RELEASE outside of a FOR EACH RECORD loop.
If your site updates records frequently and in high volume, be sure that your
requests commit records at regular intervals. (Depending on the size of the
records, commit no less than every 500 records as a rule of thumb.)
Use RELEASE as soon as you no longer need a found set, sorted set, or list.
The two forms of the RELEASE statement are:
RELEASE ALL RECORDS Releases records in all found sets, sorted sets,
and lists.
• FIND statements
• INCLUDE statements
• LIST statements
• Commands
Always use the IN clause when processing a multiple file application. For
example:
OPEN DAILY
OPENC CLIENTS
password
OPENC CLAIMS83
password
BEGIN
FD.CLAIM:
IN CLAIMS83 FIND ALL RECORDS WHERE...
Records placed on a list are not necessarily locked; and any lock associated
with the records results from their original found set. Nor does placing records
on a list unlock them (only a RELEASE RECORDS statement accomplishes
this). Therefore, if you place records on a list and then release the found set,
you can retain the list for future processing. In this case, however, you cannot
guarantee that the records will remain unchanged between the FIND and any
subsequent processing statements.
When processing multiple files, you must first clear the list using the IN filename
clause to establish list context and to prevent invalid cross-reference errors.
For example:
Clear lists as soon as you are done processing them using one the following
statements:
When sorting numeric fields, you must specify the NUMERIC attribute. Try to
keep numeric fields under 64 significant digits.
CCA recommends that you always specify whether you want to sort a field in
ascending or descending order by specifying ASCENDING or DESCENDING
in the SORT syntax for each fieldname. This helps make the code more explicit
for future users.
You can sort records in found sets and on lists; however, records in a sorted
set cannot then be placed on a list. Also, you cannot directly update sorted
records; you must first perform a FIND or use the FOR RECORD NUMBER
statement within a FOR loop.
If you do want to update sorted records, you can use the SORT k RECORD
KEYS statement to generate a set of records sorted by specified keys. Because
these records contains record numbers, you can update records in this set via
the FOR RECORD NUMBER statement. For more information, see the Model
204 User Language Manual.
FOR processing begins with the current record in the sorted set.
Use comments within a subroutine to explain the purpose and function of the
subroutine, inputs and output, and to name the place(s) from which it is called.
To make the code easier to read and maintain, try not to nest subroutines; that
is, do not call one subroutine from within another.
Process logic Specifies any User Language statements that are used
by multiple requests
To make complex subroutines easier to read, place the subroutine name and
each %variable name on a separate line (except for the CALL statement).
Remember to end each continued line with a hyphen. For example:
SUBROUTINE BINARY.SEARCH ( -
%SRT.ARRAY IS STRING ARRAY (*)
%VALUE IS STRING LEN 20
%SUBSCRIPT IS FIXED OUTPUT)
• For STRING SCALARS, always specify LEN rather than depending on the
VLEN setting.
• For STRING ARRAYS, do not specify LEN; the length of the calling routine
is always used.
Note: Screen and Image items can be used as input into complex subroutines,
but they cannot be used for output.
The advantage of using dummy strings in this instance is that you can change
both the file and the field value easily (with modifications, this example can also
allow for changes in the fieldname).
***********************
** PROCEDURE SETNAME **
***********************
BEGIN
ENDIF
END MORE
************************************
** IF IT PASSES, GO TO MAKELIST **
************************************
IF CONTINUE = Y, MAKELIST
************************
** PROCEDURE MAKELIST **
************************
MORE
DECLARE LIST NAME.LIST IN FILE $&FILE
**********************
** PROMPT FOR NAME **
**********************
FDNAME:
IN $&FILE FD LASTNAME = ?$LASTNAME
END FIND
*****************************
** PUT FOUND SET ON LIST **
*****************************
PLACE RECORDS IN FDNAME ON LIST NAME.LIST
****************************************
** CALL SUBROUTINE TO PRINT RECORDS **
****************************************
CALL PRINT.RECORDS (LIST NAME.LIST)
INCLUDE PRINT.REC
***************************
** PROCEDURE PRINT.REC **
***************************
SUBROUTINE PRINT.RECORDS (LIST NAME.LIST IN FILE ?&FILE)
FRPAI:
FOR EACH RECORD ON LIST NAME.LIST
PRINT ALL INFORMATION
END FOR
END SUBROUTINE
Record locking controls the access and maintains the integrity of the data within
the record. A record-locking conflict occurs when multiple users try to access
the same records in a file for update.
In this chapter
This chapter has the following sections:
• Locking conflict example
• Using ON units
Request #1:
BEGIN
%NAME = 'HADRIAN WALL'
FD.NAME:
IN EMPLOYEES FIND ALL RECORDS FOR WHICH
EMPLOYEE = %NAME
END FIND
FOR EACH RECORD IN FD.NAME
PRINT JOB.TITLE AT 10 AND DIVISION AT 20
END FOR
END
Request #2:
BEGIN
%NAME = 'HADRIAN WALL'
%JOB = 'HRD REP'
FD.NAME:
IN EMPLOYEES FIND ALL RECORDS FOR WHICH
EMPLOYEE = %NAME AND
JOB.TITLE = %JOB
END FIND
FOR EACH RECORD IN FD.NAME
CHANGE JOB.TITLE TO 'SR. HRD REP'
END FOR
END
• A share lock (SHR) occurs for users with read access. All users can read a
record, but no user has update access to it.
• An exclusive lock (EXC) occurs for users who are updating records. When
records are exclusively locked, no other user has any access.
If a FIND statement fails, that is, triggers an ON unit, no locks are held for that
statement. Therefore, if an ON FIND CONFLICT is triggered during a group
find, record locks are released for all files in the group.
In the following example, Model 204 places the found set of records in share
status but allows other users shared access as well. As a result, no one user
can gain the exclusive access needed for updating. This method guarantees
that data in these records cannot be changed while this procedure examines
and displays them. When using techniques, be sure to release the records as
soon as possible to allow access by other users.
BEGIN
SET HEADER 1 'RECORD STATUS REPORT'
SET HEADER 2
NEW PAGE
.
.
The next example still provides read-only access, but the records can be
deleted or field values changed between the time the FIND statement is issued
and the current time of processing. Note that the IF statement is used within the
FOR EACH RECORD loop to validate that the record has not been deleted and
that the original FIND criteria have not changed. If changes have occurred, then
the body of the IF statement is not processed.
BEGIN
.
.
.
ON FIND CONFLICT
AUDIT 'RECORD LOCKING CONFLICT CANCELLED' WITH -
$RLCFILE $RLCUSR $RLCREC
JUMP TO PRT.ERROR
END ON
FD.ACCT:
FIND ALL RECORDS FOR WHICH ACCT = '23643'
END FIND
• Do not reserve records across terminal I/O (READ SCREEN, for example).
To update a large set of records without locking the entire set, place the records
to be updated on a list, and then issue a FIND AND RESERVE on each record
as you update it. Whenever you use the FIND AND RESERVE statement, be
sure to release the records with one of the following statements:
• RELEASE
• COMMIT RELEASE
If you use a RETRY counter more than once in a program, remember to reset
the counter to zero before each FIND AND RESERVE statement. If the FIND
is within an outer FIND loop, you must create a new counter to monitor these
iterations as well.
The following example shows the code for a screen that appears when Model
204 encounters a record-locking conflict. This example sets a RETRY counter
and cancels the RETRY after a specified number of attempts.
BEGIN
*******************************************************
** IN CASE OF RECORD CONFLICT ASK USERS IF THEY WANT **
** TO TRY AGAIN. CANCEL AFTER 25 USER ATTEMPTS. **
** AUDIT EACH ATTEMPT TO THE JOURNAL. **
** ON RECORD LOCKING CONFLICT SCREEN **
*******************************************************
SCREEN ORLC
TITLE 'UNABLE TO ACCESS REQUESTED RECORDS' AT 24 BRIGHT
SKIP 3 LINES
PROMPT 'CONFLICTING USER:' PROMPT USER
PROMPT ' FILE:' PROMPT FILE
PROMPT ' RECORD:' PROMPT RECORD
SKIP 2 LINES
PROMPT 'DO YOU WANT TO TRY AGAIN?' INPUT
TRY ONEOF Y,N DEFAULT 'N'
END SCREEN
ORLC:
ON RECORD LOCKING CONFLICT
**************************
** WRITE LOG TO AUDIT TRAIL **
********************************
%RECORD = $RLCREC
%FILE = $RLCFILE
%USER = $RLCUSR
AUDIT = 'RECORD LOCKING CONFLICT DURING DEPT -
PROCESSING' WITH %RECORD %FILE %USER
*******************
** SET COUNTER **
*******************
%COUNTER = %COUNTER + 1
IF %COUNTER EQ 25 THEN
BACKOUT
PRINT '**** REQUEST CANCELLED ****'
In the following example, one record at a time is displayed for update. After the
record is changed, the update ID is checked. If it is not the number expected,
an error message is issued.
BEGIN
.
.
.
FD.VIN:
IN VEHICLES FD VIN = 123456789
END FIND
IN VEHICLES CLEAR LIST VIN
PLACE RECORDS IN FD.VIN ON LIST VIN
RELEASE RECORDS IN FD.VIN
***************************
** FILL SCREEN HERE **
************************
END FOR
IF $CHKTAG ('SCR.UPD.VIN') THEN
REREAD SCREEN SCR.UPD.VIN
ELSE
READ SCREEN SCR.UPD.VIN NO REREAD
END IF
.
.
.
************************
** EDIT SCREEN HERE **
************************
FDR.VIN:
FDR VIN = 123456789
END FIND
FR FDR.VIN
IF UPDATE ID = %UPDATEID THEN
CHANGE UPDATE ID TO UPDATE ID + 1
CHANGE ...(other record fields)
.
.
.
• If possible, keep update units within the same terminal I/O point.
• To free pages in CCATEMP, use the CLEAR LIST statement when you no
longer need the records in a list.
• Place the records you need on a list, release the records, and process from
the list in situations where no updates are taking place or where updates
are known not to affect the data in question.
For more information, see the Model 204 File Manager’s Guide.
Symbols D
$Functions Datasets
using 2-6 rules for naming 1-3
%Variables Declaration statements
COMMON 2-20 2-5
declaring 2-5 DELETE FIELD function 3-12
in subroutines 2-19 Dummy strings
naming conventions 1-6 in subroutines 2-20
A E
C F
Index-1
I standard prefixes for 1-7
PROMPT parameter 2-20
IF statements 3-5
evaluating 2-7 R
formatting 2-7
using 2-7 Read-only access 3-5
using %variables in 2-8 Record locking 3-1
IN clause 2-16 guidelines for controlling 3-12
with multiple file application 2-16 Record locks
INCLUDE statements 2-19 exclusive lock (EXC) 3-3
Index loop 2-5 share lock (SHR) 3-3
Index updates 3-12 types 3-3
Inquiry procedures Record-locking conflicts 3-1
using lists to process 2-17 example 3-2
managing 3-4
L Records
committing 2-14
Lists 2-17 finding efficiently 2-11
clearing 2-17 releasing 2-15
sorting 2-18
REDEFINE function 3-12
N
RELEASE ALL RECORDS statement 2-15, 2-17
RELEASE RECORDS IN statement 2-15
Naming conventions 1-1
RELEASE RECORDS ON statement 2-17
%variables 1-6
RELEASE RECORDS statement 2-17
complex subroutines 1-9
RELEASE statement 2-15, 3-7
datasets 1-3
two forms of 2-15
fieldnames 1-5
REMOVE 2-17
filename restrictions 1-2
REMOVE RECORDS IN statement 2-17
filenames 1-2
REMOVE RECORDS ON statement 2-17
file-naming standard 1-2
RENAME function 3-12
for multiple datasets 1-2
Report procedures
for screens, menus, and reports 1-10
using lists to process 2-17
global variables 1-6
Reserved words 1-5
procedures 1-4
RETRY counters
simple subroutines 1-9
coding 3-8
statement labels 1-7
RETRY statement 3-8
subroutines 1-9
NO FIELD SAVE option 2-5
Notation conventions viii S
NUMERIC attribute 2-18
Share lock (SHR) 3-3
Shared access 3-4
O
Simple subroutines
naming conventions 1-9
ON FIND CONFLICT statement 3-4
SORT k RECORD KEYS statement 2-18
ON RECORD LOCKING CONFLICT statement 3-4
SORT syntax 2-18
ON units 3-4, 3-8
Statement labels
naming conventions 1-7
P using 1-7
STRING ARRAYS 2-20
Procedure names STRING SCALARS 2-20
naming conventions 1-4 SUB parameter 2-20
Procedures Subroutines
Table B searches
minimizing 2-11
Update ID 3-10
Using CCA documentation
audience vii
Variables
naming conventions 1-6
Index-3
Index-4 Model 204 Application Development Guide