|
PROMPT-FOR — Prompts the user for data and puts that data into the screen buffer
|
|
ASSIGN — Moves data from the screen buffer to the record buffer
|
SET
[ STREAM stream | STREAM-HANDLE handle ]
[ UNLESS-HIDDEN ]
[
{ field [ view-as-phrase ] [ format-phrase ] }
[ WHEN expression ]
| TEXT ( field [ format-phrase ] ... )
| field = expression
| constant [ AT n | TO n ]
| ^
| SPACE [ ( n ) ]
| SKIP [ ( n ) ]
] ...
[ GO-ON ( key-label ... ) ]
[ frame-phrase ]
[ editing-phrase ]
[ NO-ERROR ]
|
SET [ STREAM stream | STREAM-HANDLE handle ] [ UNLESS-HIDDEN ]
record [ EXCEPT field ... ] [ frame-phrase ]
[ NO-ERROR ]
|
Specifies the handle to a stream. If handle it is not a valid handle to a stream, the AVM generates a run-time error. Note that stream handles are not valid for the unnamed streams. See the chapter on alternate I/O sources in
OpenEdge Development: Programming Interfaces for more information on streams and stream handles.
Sets the field only when expression has a value of TRUE. An
expression is a field name, variable name, or expression whose value is logical.
Defines a group of character fields or variables (including array elements) to use automatic word wrap. The TEXT option works with character fields only. When you insert data in the middle of a TEXT field, the AVM wraps data that follows into the next TEXT field, if necessary. If you delete data from the middle of a TEXT field, the AVM wraps data that follows into the empty area. If you enter more characters than the format for the field allows, the AVM discards the extra characters. The character fields must be in the x(
n) format.
Table 61 lists the keys you can use within a TEXT field, and their actions.
Indicates that the value of field is determined by evaluating the
expression rather than having it entered on the screen or from a file. An assignment statement is embedded within the SET statement.
Identifies the number (n) of blank spaces to insert after the expression on the display. The
n can be 0. If the number of spaces you specify is more than the spaces left on the current line of the frame, the AVM starts a new line and discards any extra spaces. If you do not use this option or do not use
n, the AVM inserts one space between items in the frame.
Identifies the number (n) of blank lines to be inserted after the expression is displayed. The
n can be 0. If you do not use this option, a line is not skipped between expressions only if they do not fit on one line. If you use the SKIP option, but do not specify
n, or if
n is 0, a new line is started unless it is already at the beginning of a new line.
Tells the AVM to take the GO action when the user presses any of the keys listed. The keys you list are used in addition to keys that perform the GO action by default or because of ON statements. When you list a key label in the GO-ON option, you use the keyboard label of that key. For example, if you want the AVM to take the GO action when the user presses
F1, you use the statement GO-ON(
F1). If you list more than one key, separate them with spaces, not commas, as in GO-ON(
F1 RETURN ).
[ label: ] EDITING: statement ... END.
|
Suppresses ABL errors or error messages that would otherwise occur and diverts them to the
ERROR-STATUS system handle. If an error occurs, the action of the statement is not done and execution continues with the next statement. If the statement fails, any persistent side-effects of the statement are backed out. If the statement includes an expression that contains other executable elements, like methods, the work performed by these elements may or may not be done, depending on the order the AVM resolves the expression elements and the occurrence of the error.
|
Check if the ERROR-STATUS:NUM-MESSAGES attribute is greater than zero to see if the AVM generated error messages. ABL handle methods used in a block without a CATCH end block treat errors as warnings and do not raise ERROR, do not set the ERROR-STATUS:ERROR attribute, but do add messages to the ERROR-STATUS system handle. Therefore, this test is the better test for code using handle methods without CATCH end blocks. ABL handle methods used in a block with a CATCH end block raise ERROR and add messages to the error object generated by the AVM. In this case, the AVM does not update the ERROR-STATUS system handle.
|
|
A CATCH statement, which introduces a CATCH end block, is analogous to a NO-ERROR option in that it also suppresses errors, but it does so for an entire block of code. It is different in that the error messages are contained in a class-based error object (generated by the AVM or explicitly thrown), as opposed to the ERROR-STATUS system handle. Also, if errors raised in the block are not handled by a compatible CATCH block, ON ERROR phrase, or UNDO statement, then the error is not suppressed, but handled with the default error processing for that block type.
|
|
When a statement contains the NO-ERROR option and resides in a block with a CATCH end block, the NO-ERROR option takes precedence over the CATCH block. That is, an error raised on the statement with the NO-ERROR option will not be handled by a compatible CATCH end block. The error is redirected to the ERROR-STATUS system handle as normal.
|
|
If an error object is thrown to a statement that includes the NO-ERROR option, then the information and messages in the error object will be used to set the ERROR-STATUS system handle. This interoperability feature is important for those integrating code that uses the traditional NO-ERROR technique with the newer, structured error handling that features error objects and CATCH end blocks.
|
The r-set.p procedure reads each Item record, displays the
ItemNum and lets the user enter information for the
ItemName,
OnHand,
Allocated, and
Price fields. When you run this procedure, notice that it does not display existing values for the
ItemName,
OnHand,
Allocated, and
Price fields.
On each iteration of the block, the FOR EACH statement reads a single record into the Item record buffer. The DISPLAY statement moves the
ItemNum from the record buffer to the screen buffer where you can see it. The SET statement prompts for data, stores the data in screen buffers, and moves the data to the record buffer, overwriting whatever is already there. Therefore, even though the
ItemName,
OnHand,
Allocated, and
Price fields are put into the Item record buffer by the FOR EACH statement, you never see the values for those fields.
The r-set2.p procedure displays the
CustNum,
Name, and
CreditLimit for a Customer and lets you change the
CreditLimit field. The HELP option in the SET statement displays help information at the bottom of the screen when you are changing the
CreditLimit. The VALIDATE option in the SET statement makes sure that the
CreditLimit value is greater than 0. If it is not, VALIDATE displays the message “Invalid credit limit.”
After you modify CreditLimit, the procedure creates an Order for the Customer and assigns the
Customer.CustNum value to the
CustNum field in the Order record. The SET statement lets you enter information for the
OrderNum and
ShipDate fields. The VALIDATE option in the SET statement makes sure that the Ship Date is greater than TODAY.
|
If any field is a field in a database record, the SET statement upgrades the record lock condition to EXCLUSIVE-LOCK before updating the record.
|
|
If any field is part of a record retrieved with a field list, the SET statement rereads the complete record before updating it.
|
|
SET does not move data into the field or variable if there is no data in the corresponding screen field. There is data in a screen field if a DISPLAY of the field was done or if you enter data into the field. If you set a field or variable that has not been DISPLAYed in the frame and key in blanks, then the field or variable is not changed because the screen field is changed only if the data differs from what was in the frame field.
|
|
The SET statement causes the ASSIGN and WRITE events to occur and fires all related database ASSIGN and WRITE triggers. The ASSIGN triggers execute before the WRITE triggers and after the field is actually updated. The WRITE triggers only execute if the ASSIGN triggers do not return an error. If an ASSIGN trigger fails (or executes a RETURN statement with the ERROR option), the SET statement is undone. This means that any changes to the database from that SET statement are backed out. If the SET statement occurs within a transaction, any changes to variables, worktable fields, and temp-table fields are also undone unless they are defined with the NO-UNDO option. Also, if a WRITE trigger fails (or executes a RETURN statement with the ERROR option), the SET statement is undone.
|
|
In the context of the .NET blocking method, System.Windows.Forms.Application:Run( ), if you directly or indirectly execute the SET statement while displaying a non-modal ABL window, in certain contexts (such as within a user-defined function or non- VOID method) this statement execution raises the STOP condition. For more information on the .NET Application:Run( ), method, see the reference entry for the WAIT-FOR statement (.NET and ABL).
|