GET [ HP Transact Reference Manual ] MPE/iX 5.0 Documentation
HP Transact Reference Manual
GET
Moves data to the data register from a data set, file, or formatted
screen.
Syntax
GET[(modifier)] source[,option-list];
GET retrieves a single entry from a data set or KSAM or MPE file after
rewinding the file or data set. It is also used to move data values into
the data register from a terminal under the control of a VPLUS screen.
Statement Parts
modifier To specify the type of access to the data set or file,
choose one of the following modifiers:
none For master sets, retrieves a master set entry
based on the value in the argument register.
For MPE files, the next entry is serially
read. For KSAM files, this option does not
use the match register.
CHAIN Retrieves an entry from a detail set or KSAM
chain. It retrieves the first entry to meet
any match criteria set up in the match
register. The matching items must be
included in a LIST= option. The contents of
the key and argument registers specify the
chain in which the retrieval occurs. If no
match criteria are specified, it retrieves
the first entry in the chain. If no matching
entry is found, GET issues a run-time error.
CURRENT Retrieves the last entry that was accessed
from the data set or the MPE or KSAM file.
DIRECT Retrieves the entry stored at a specified
record number in an MPE or KSAM file, or a
detail or master set. Before using this
modifier, you must store the record number as
a 32-bit integer in the item specified in the
RECNO= option.
FORM GET(FORM) displays a VPLUS form on any VPLUS
compatible terminal and then waits for the
user to press ENTER to transfer data from the
form to the data register. If the user
presses a function key instead of ENTER, no
data is transferred unless the AUTOREAD
option is used.
KEY Executes a calculated access on a master set
using the key and argument register contents,
but transfers no data. The LIST= option
cannot be specified with this modifier. (Use
GET with no modifier for a calculated
retrieval from a master set.)
This modifier is most useful when you combine
it with the ERROR and/or NOFIND options to
check for the existence of a key value in a
master set. It allows programmatic control
of the result of the checking. It is the
equivalent of a CHECK or CHECKNOT on a PROMPT
statement.
PRIMARY Retrieves the master set entry stored at the
primary address of a synonym chain. The
primary address is located through the key
value contained in the argument register.
RCHAIN Retrieves an entry from a detail set or a
KSAM chain in the same manner as the CHAIN
option, only in reverse order. For a KSAM
file this operation is identical to CHAIN.
RSERIAL Retrieves an entry from a data set in the
same manner as the SERIAL option, except in
reverse order. If an equal match without
match characters exists, Transact will
convert an RSERIAL option to an RCHAIN option
to improve the application's efficiency. For
a KSAM or MPE file, this operation is
identical to SERIAL.
SERIAL Retrieves an entry in serial mode from an MPE
or KSAM file or a detail or master set. It
retrieves the first entry that matches any
match criteria set up in the match register.
If an equal match without match characters
exists, Transact will convert an SERIAL
option to an CHAIN option to improve the
application's efficiency. If no match
criteria are specified, it retrieves the
first entry in the file or data set. The
match items must be included in a LIST=
option. If no entry matches or if the file
is empty, GET issues a run-time error.
source The file, data set, or form to be accessed by the retrieval
operation. If the data set is not in the home base as
defined in the SYSTEM statement, the base name must be
specified in parentheses as follows:
set-name(base-name)
For GET(FORM) only, source can be specified as any of the
following:
form-name Name of the form to be displayed by
GET(FORM).
(item-name Name of an item that contains the name of the
[(sub- form to be displayed by GET(FORM). subscript
script)])
can be included if the referenced item is an
array item. (See "Array Subscripting" in
Chapter 3.)
* Displays the form identified by the "current"
form name; that is, the form name most
recently specified in a statement that
references VPLUS forms. Note that this
option is not the same as the CURRENT option
(described under option-list), which
indicates the currently displayed form.
& Displays the form identified as the "next"
form name; that is, the form name defined as
"NEXT FORM" in the FORMSPEC definition of the
current form, where current form means the
form name most recently specified in a
statement that references VPLUS forms.
option-list The LIST option is available with or without the FORM
modifier. Other options, described below, are restricted
for use as specified.
LIST=(range- The list of items from the list register to
list) be used for the GET operation. For GET(FORM)
ONLY, items in the range list can be child
items.
If the LIST= option is omitted for GET(FORM),
the list of items named in the list register,
and either in the SYSTEM statement or the
data dictionary for the form are used.
The LIST= option should not be used when
specifying an asterisk (*) as the source.
When the LIST= option is used, only the items
specified in a LIST= option have their match
conditions applied when the items are
included in the match register. When the
LIST= option is omitted, items which appear
in the list register and the match register
have their match conditions applied.
Otherwise, the match conditions for an item
are ignored.
The match register can be used only with the
modifiers CHAIN, RCHAIN, SERIAL, or RSERIAL.
For all options of range-list, the data items
selected are the result of scanning the data
items in the list register from top to
bottom, where top is the last or most recent
entry. (See Chapter 4 for more information
on registers.)
The LIST= option has a limit of 64
individually listed item names. A range
limitation of 255 items for TurboIMAGE data
sets and 128 items for VPLUS forms also
exists.
All item names specified must be parent
items.
The options for range-list and the data items
they cause GET to retrieve include the
following:
(item-name) A single data item.
(item-nameX: All the data items in the range
item-nameY) from item-nameX through
item-nameY. In other words, the
list register is scanned for
the occurrence of item-nameY
closest to the top of the list
register. From that entry, the
list register is scanned for
item-nameX. All data items
between are selected. An error
is returned if item-nameX is
between item-nameY and the top
of the list register.
Duplicate data items can be
included or excluded from the
range, depending on their
position on the list register.
For example, if range-list is
A:D and the list register is as
shown,
then data items A, B, C, D, and
D are selected. For database
files, an error is returned if
duplicate entries are selected.
If item-nameX and item-nameY
are marker items (see the
DEFINE(ITEM) verb), and if
there are no data items between
the two on the list register,
no database access is
performed.
(item- All data items in the range
nameX:) from the last entry through the
occurrence of item-nameX
closest to the top of the list
register.
(:item- All data items in the range
nameY) from the occurrence of
item-nameY closest to the top
through the bottom of the list
register.
(item-nameX, The data items are selected
item-nameY, from the list register. For
... databases, data items can be
item-nameZ) specified in any order. For
KSAM and MPE files or for VPLUS
forms, data items must be
specified in the order of their
occurrence in the physical
record or form. This order
need not match the order of the
data items on the list
register. Does not include
child items in the list unless
they are defined in the VPLUS
form. This option is less
efficient to use than the
options listed above.
(@) Specifies a range of all data
items of file-name as defined
in a data dictionary. The
range-list is defined as
item-name1:item-namen for the
file.
(#) Specifies an enumeration of all
data items of file-name as
defined in the data dictionary.
The data items are specified in
the order of their occurrence
in the physical record or form
as defined in the data
dictionary. This order need
not match the order of the data
items in the list register.
() A null data item list. That
is, accesses the file or data
set, but does not retrieve any
data.
Options Available Without the Form Modifier
ERROR=label Suppresses the default error return that Transact
([item-name]) normally takes. Instead, branches to the statement
identified by label, and sets the stack pointer for
the list register to the data item item-name.
Transact generates an error at execution time if the
item cannot be found in the list register. The
item-name must be a parent.
If you specify no item-name, as in ERROR=label();,
the list register is reset to empty. If you use an
"*" instead of item-name, as in ERROR=label(*);, then
the list register is not changed. For more
information, see "Automatic Error Handling" in
Chapter 7.
LOCK Locks the specified file or database. The lock is
active the whole time that the GET executes. If LOCK
is not specified and a TurboIMAGE data set is being
accessed, no locking is done.
For a KSAM or MPE file, if LOCK is not specified on
GET but is specified for the file in the SYSTEM
statement. The file is then locked before each entry
is retrieved, remains locked while the entry is
processed by any PERFORM= statements, and is unlocked
briefly before the next entry is retrieved.
Including the LOCK option overrides SET(OPTION)
NOLOCK for the execution of the GET verb.
For transaction locking, you can use the LOCK option
on the LOGTRAN verb instead of the LOCK option on GET
if SET(OPTION) NOLOCK is specified.
For more information on locking, see "Database and
File Locking" in Chapter 6.
NOFIND Ensures that a matching entry is not present in the
referenced master set. If such an entry is found, an
error message is generated. If the STATUS option has
also been specified, the code returned in the STATUS
register for the error condition is 1, meaning that a
record was found.
NOMATCH Ignores any match criteria set up in the match
register.
NOMSG Suppresses the standard error message produced as a
result of a file or database error. All other error
actions occur.
RECNO=item-name With the DIRECT modifier, you must define item-name
[(subscript)] to contain the 32-bit integer. number (I(9,,4)) of
the record to be retrieved.
With other modifiers, Transact returns the record
number of the retrieved record in the 32-bit integer
item-name.
The item-name can be modified with subscript if the
referenced item is an array item. (See "Array
Subscripting" in Chapter 3.)
STATUS Suppresses the action defined in the Chapter 7 under
"Automatic Error Handling." You may want to add
status checking to your code if you use this option.
When STATUS is specified, the effect of a GET
statement is described by the 32-bit integer value in
the status register:
Status Meaning
Register
Value
0 The GET operation was successful.
-1 A KSAM or MPE end-of-file condition
for serial read or end-of-chain for
chain read has occurred.
>0 For a description of the condition
that occurred, refer to database or
MPE/KSAM file system error
documentation that corresponds to
the value.
1 If NOFIND is used and the record is
found.
STATUS causes the following with GET:
* The normal rewind done by the GET is
suppressed, so CLOSE should be used before
GET(SERIAL).
* The normal find of the chain head by the GET
is suppressed, so PATH should be used before
GET(CHAIN).
See "Using the STATUS Option" in Chapter 7.
Options Available Only With the Form Modifier
APPEND Appends the next form to the form specified in
this statement, overriding any freeze or append
condition specified for the form in its FORMSPEC
definition. APPEND sets the FREEZAPP field of the
VPLUS comarea to 1.
AUTOREAD Accepts any function key not specified in an
Fn=label option to transfer data from the form to
the data register. If a key has been specified in
an Fn=label option, GET does not execute AUTOREAD
for that key.
CLEAR Clears the previously displayed form when the
requested form is displayed, overriding any freeze
or append condition specified for the form in its
FORMSPEC definition. CLEAR sets the FREEZAPP
field of the VPLUS comarea to zero.
CURRENT Uses the form currently displayed on the terminal
screen; that is, it performs all the GET(FORM)
processing except retrieving and displaying the
form. Use this option to avoid the processing
that normally occurs when a new form is displayed.
CURSOR=field-name| Positions the cursor within the specified field.
item- Field-name identifies the field and the item-name
name[(subscript)] names the item identifying the field. The
item-name can be subscripted if an array item is
being referenced. (See "Array Subscripting" in
Chapter 3.)
_________________________________________________
NOTE To ensure that the cursor will be positioned
on the correct field, you must have a one to
one correspondence between the fields
defined in VPLUS. Transact determines where
to position the cursor by counting the
fields.
_________________________________________________
FEDIT Performs the field edits defined in the FORMSPEC
definition immediately before displaying the form.
FKEY=item-name Moves the number of the function key the operator
[(subscript)] presses in this retrieval operation to the single
word integer (I(4)) item-name. The item-name can
be subscripted if an array item is being
referenced. (See "Array Subscripting" in Chapter
3.) The function key is determined by the
contents of the field LAST-KEY in the VPLUS
comarea. It can have a value of 0 through 8,
inclusive, where 0 indicates the ENTER key and 1
through 8 indicate function keys 1 through 8,
respectively. Note that pressing f8 returns an 8
in the item field and does not cause an automatic
exit.
Fn[(AUTOREAD)]= label Control passes to the labelled statement if the
operator presses function key n. This option can
be repeated for each desired function key as many
times as necessary in a single GET(FORM)
statement. If (AUTOREAD) is included, transfers
the data from the form to the data register before
going to the specified label. F0, or ENTER,
always transfers data. This option is cancelled
by the STATUS option.
FREEZE Freezes the specified form and appends the next
form to the specified form, overriding any freeze
or append conditions specified for the form in the
FORMSPEC definition. FREEZE sets the FREEZAPP
field of the VPLUS comarea to 2.
INIT Initializes the fields in a VPLUS form to any
initial values specified for the form by FORMSPEC,
or performs any Init Phase processing specified
for the form by FORMSPEC. The INIT processing is
performed before the form is displayed on the
screen.
STATUS Suppresses the display of VPLUS field edit error
messages in window; Transact conversion messages
are sent to the window. Transfer control
immediately back to the program after the user has
pressed ENTER or the appropriate function key.
The STATUS option suppresses any branch specified
by Fn= label. If field edit errors exist,
Transact sets the value of the status field to a
negative count of the number of errors (given by
the NUMERRS field of the VPLUS comarea).
Otherwise, the value in the status field is 0.
WINDOW= ([field,] Places a message in the window area of the screen
message) and, optionally, enhances a field in the form.
The fields field and message can be specified as
follows:
field Either the name of the data
item for the field to be
enhanced, or an
item-name[(subscript)]
within parentheses which
will contain the data item
of the field to be enhanced
at run time.
message Either a string enclosed in
quotation marks that
specifies the message to be
displayed, or an
item-name[(subscript)]
within parentheses
containing the message
string to be displayed in
the window.
Examples
The following example shows the use of the WINDOW option when the field
name and the message are specified directly.
GET(FORM) FORM1,
INIT,
LIST=()
WINDOW=(field1,"This field must be numeric.");
In the following example, both the field and the message are specified
through an item-name reference:
DEFINE(ITEM) ENHANCE U(16):
MESSAGE U(72);
MOVE (ENHANCE) = "field1";
MOVE (MESSAGE) = "This field must be numeric.";
:
GET(FORM) *,
INIT,
WINDOW=((ENHANCE),(MESSAGE));
The first entry in the chain is retrieved from the data set DETAIL using
the items CUST-NAME through CUST-PHONE in the list register.
PROMPT(PATH) CUST-NO;
LIST CUST-NAME:
CUST-PHONE;
GET(CHAIN) DETAIL,
LIST=(CUST-NAME:CUST-PHONE);
The first GET retrieves the last record in the chain. The second GET
reads the chain in reverse order until a record matches the criteria set
up by the DATA(MATCH) statement.
PROMPT(PATH) CUST-ID;
LIST CUST-NAME:
CUST-PHONE;
GET(RCHAIN) DETAIL, LIST=(CUST-NAME:CUST-PHONE);
:
DATA(PATH) CUST-ID;
DATA(MATCH) CUST-NAME;
GET(RCHAIN) DETAIL, LIST=(CUST-NAME:CUST-PHONE);
This statement displays the form CUSTFORM, performs any initialization
specified by FORMSPEC, retrieves values entered into the form, performs
any FORMSPEC edits, and then transfers the entered values to the data
register areas associated with the specified list items.
GET(FORM) CUSTFORM, INIT, LIST=(CUST-NAME, CUST-ADDR, CUST-PHONE);
In the following example, GET with the STATUS option allows you to
process the "nonexistent permanent file" error yourself. This coding
lets you access a file that may be in another account by setting up a
file equation through a PROC call to the command intrinsic.
<<1st access, no CLOSE required before SERIAL operation>>
GET(SERIAL) DATA-FILE, LIST=(A:N), STATUS;
IF STATUS <> 0 THEN <<An error occurred, check further >>
IF STATUS <> 52 THEN <<Error is other than expected >>
GO TO ERROR-CLEANUP
ELSE <<52 - Nonexistent permanent file >>
DO
LET (CR) = 8205; <<8205 = space,carriage return >>
<<Could have used (CR)=3360 for carriage>>
<<return,space >>
MOVE (COM-STRING) = "FILE DATAFILE=DATAFILE.PUB.OTHERONE"+(CR);
<<Try opening DATAFILE in another group >>
PROC COMMAND (%(COM-STRING),(ERROR),(PARM));
IF (ERROR) <> 0 THEN <<Command error >>
GO TO ERROR-CLEANUP;
<<Try again, give up if unsuccessful >>
GET(SERIAL) DATA-FILE, LIST=(A:N), STATUS;
IF STATUS <> 0 THEN GO TO ERROR-CLEANUP;
DOEND;
The following example shows a method for "structured programming" with
VPLUS forms. Each RETURN statement passes control back to the PERFORM
statement.
START:
DISPLAY "Start of program";
PERFORM GETINFO;
DISPLAY "End of program";
EXIT;
GETINFO:
GET(FORM) MENU,
F1=ADD,
F2=UPDATE,
F3=DELETE,
F4=LIST,
F5=START,
F6=START,
F7=START,
F8=ENDIT;
<<Process ENTER here>>
.
.
.
ADD:
<<Process F1 here>>
RETURN;
UPDATE:
<<Process F2 here>>
RETURN;
DELETE:
<<Process F3 here>>
RETURN;
LIST:
<<Process F4 here>>
RETURN;
ENDIT:
EXIT;
An alternate method is to use the FKEY=item-name construct, and then test
the value of item-name with an IF statement.
MPE/iX 5.0 Documentation