BOX function

(Windows only; GUI for .NET only)

Returns an object reference to a .NET System.Object that contains (boxes) a .NET mapping of an ABL value. At run time, this mapping depends on the kind of ABL value passed to the function. If you pass an ABL primitive value, the function returns a corresponding .NET mapped object type. If you pass an ABL array of .NET-compatible elements, the function returns a corresponding .NET array object type.

Syntax

BOX ( ABL-expression [ , AS-data-type-expression ] )
ABL-expression
Specifies an expression with a value in one of the following .NET-compatible ABL data types:
  • CHARACTER
  • DATE
  • DATETIME
  • DATETIME-TZ
  • DECIMAL
  • INT64
  • INTEGER
  • LOGICAL
  • LONGCHAR
  • A .NET-compatible ABL array

A .NET-compatible ABL array is an ABL array of one of the listed ABL primitive types or an ABL array of any supported .NET object type (a .NET object type not mapped as specified in Table 4 ).

AS-data-type-expression
If ABL-expression is an ABL primitive type, this is a character expression equal to a keyword (AS data type) that matches the explicit .NET mapped data type into which you want to box the specified ABL-expression. If ABL-expression is an ABL primitive array, the character expression is an AS data type that specifies the explicit .NET mapped data type that the elements of the array should be converted to in the resulting .NET array object. This AS data type must correspond to one of the .NET types that maps appropriately to the ABL primitive type (or array element type) of ABL-expression (see Table 5).

If you do not specify AS-data-type-expression and ABL-expression is an ABL primitive (or primitive array), ABL boxes ABL-expression using the default matching .NET type that corresponds to the ABL primitive type (or array element type) of ABL-expression.

This option has no meaning when ABL-expression is an ABL array of a supported .NET object type.

Example

The following code creates a .NET DataTable with a single DataRow containing two columns. It then adds data to the row for the two columns. The Item indexed property used to access the columns has the data type System.Object. So, to add data to each column, you might have to use the BOX function to box the specified ABL value into an appropriate System.Object instance for the column. For example:

USING System.Data.* FROM ASSEMBLY.

DEFINE VARIABLE dataTable1 AS DataTable  NO-UNDO.
DEFINE VARIABLE dcCustNum  AS DataColumn NO-UNDO.
DEFINE VARIABLE dcName     AS DataColumn NO-UNDO.
DEFINE VARIABLE dcBusType  AS DataColumn NO-UNDO.
DEFINE VARIABLE row1       AS DataRow    NO-UNDO.

dataTable1 = NEW DataTable(INPUT "Customer").

/* Create columns for a dataTable */
dcCustNum = NEW DataColumn(INPUT "CustNum").
dcName    = NEW DataColumn(INPUT "Name").
dcBusType = NEW DataColumn(INPUT "BusType").
dataTable1:Columns:Add(INPUT dcCustNum).
dataTable1:Columns:Add(INPUT dcName).
dataTable1:Columns:Add(INPUT dcBusType).

/* Create a new row */
row1 = dataTable1:NewRow( ).

/* Add data to row */
row1:Item["CustNum"] = 1.
row1:Item["Name"] = "Mr Jones".
    /* Without BOX, this automatically boxes System.Int32 value. */
row1:Item["BusType"] = BOX( 236, "UNSIGNED-BYTE"). /* System.Byte value */

Notes

See also

Data types, UNBOX function