$Field ListI: Difference between revisions
m (→Syntax terms: add nowrap) |
(Syntax clarification) |
||
Line 32: | Line 32: | ||
<tr><th>image_id</th> | <tr><th>image_id</th> | ||
<td> | <td>This is the name of the mapping image (without the % prefix) which can be a quoted string, a %variable, an image item name or even a Model 204 fieldname. | ||
<p class="code">%rc = $Field_ListI(%OLIST, 'ORDERINFO', , , , '_NULL_') | |||
or | |||
%var = 'ORDERINFO' | |||
%rc = $Field_ListI(%OLIST, %var, , , , '_NULL_') | |||
</p> | |||
Optionally, if the image name is followed by a colon followed by an item name in that image, then that item, mapped in the $list, will be set to the occurrence number retrieved. | |||
<p class="code">%rc = $Field_ListI(%OLIST, 'ORDERINFO:PRICE', , , , '_NULL_') | |||
</p> | |||
The image and optional item name can be separated with a blank from an optional fieldname prefix to simplify field name references in the field group. See the example later in this section. | |||
If this parameter is not specified, or is null, or is simply a colon followed by an image item name, the image bound to the output $list via <var>$ListImg</var> is used as the mapping image. The specified image must have been defined with the <var>NAMESAVE</var> option. Also, the image is not allowed to have arrays, cannot have more than 255 items, and cannot be more than the maximum length of $list items (6124 bytes). | If this parameter is not specified, or is null, or is simply a colon followed by an image item name, the image bound to the output $list via <var>$ListImg</var> is used as the mapping image. The specified image must have been defined with the <var>NAMESAVE</var> option. Also, the image is not allowed to have arrays, cannot have more than 255 items, and cannot be more than the maximum length of $list items (6124 bytes). | ||
The names of the image items in the specified image are | The names of the image items in the specified image must be exactly the same as the field names in the field group that are being retrieved in the current record context. The values of those fields are then moved into the $list, mapped by the image; nothing is moved into the image.</td></tr> | ||
<tr><th>start</th> | <tr><th>start</th> |
Revision as of 23:47, 1 June 2018
Return field values into a $list mapped to an image
Note: Most Sirius $functions have been deprecated in favor of Object Oriented methods. The OO equivalent for $Field_ListI is the Stringlist AppendFieldImages function
This function retrieves fields in repeating groups into $list items mapped to a User Language image. It provides an alternative to PAI INTO.
$Field_ListI accepts six arguments and returns a number indicating the success of the function.
Syntax
%rc = $Field_ListI(olist, [image_id], [start], [num], [options], [null_value])
Syntax terms
%rc | The number of items added to olist, or a status code:
| ||||||||
---|---|---|---|---|---|---|---|---|---|
olist | The output $list identifier or -1. If the output $list is not empty, data is added to the end of the output $list.
If -1 is specified, the record is scanned as if data would be added to the $list, but no data is actually added. This can be useful for validating the integrity of or number of occurrences of a repeating group without actually loading its values. This is a required argument. | ||||||||
image_id | This is the name of the mapping image (without the % prefix) which can be a quoted string, a %variable, an image item name or even a Model 204 fieldname.
%rc = $Field_ListI(%OLIST, 'ORDERINFO', , , , '_NULL_') or %var = 'ORDERINFO' %rc = $Field_ListI(%OLIST, %var, , , , '_NULL_') Optionally, if the image name is followed by a colon followed by an item name in that image, then that item, mapped in the $list, will be set to the occurrence number retrieved. %rc = $Field_ListI(%OLIST, 'ORDERINFO:PRICE', , , , '_NULL_') The image and optional item name can be separated with a blank from an optional fieldname prefix to simplify field name references in the field group. See the example later in this section. If this parameter is not specified, or is null, or is simply a colon followed by an image item name, the image bound to the output $list via $ListImg is used as the mapping image. The specified image must have been defined with the NAMESAVE option. Also, the image is not allowed to have arrays, cannot have more than 255 items, and cannot be more than the maximum length of $list items (6124 bytes). The names of the image items in the specified image must be exactly the same as the field names in the field group that are being retrieved in the current record context. The values of those fields are then moved into the $list, mapped by the image; nothing is moved into the image. | ||||||||
start | The first occurrence number of the repeating group to return. This is an optional argument, and it defaults to 1, meaning that the first occurrence of the repeating group will be returned. | ||||||||
num | The maximum number of occurrences of the repeating group to return. This is an optional argument, and it defaults to 0, meaning that all occurrences of the repeating group, including and after the one specified by the start argument, will be returned. | ||||||||
options | A set of blank-delimited options to affect $List_FieldI processing. The valid options are shown below. As of Sirius Mods Version 7.1, they can be specified in any combination of uppercase and lowercase letters; prior to that, all uppercase letters are required.
| ||||||||
null_value | A special value to be treated as a null when populating the target $list. This is useful because storing nulls in fields is problematic on many fronts in Model 204, so most sites have a special value that acts as a placeholder for a null. Without the null_value argument, an application would have to go through the $list items to find these placeholder values and convert them to real nulls. Obviously, this is tedious, error-prone and can be CPU intensive.
By specifying the null_value argument to $Field_ListI, this function will automatically convert the null placeholder to a real null. For example, if the string %rc = $Field_ListI(%OLIST, 'ORDERINFO', , , , '_NULL_') |
Usage notes
- You must PREPARE the template image at the time of the $Field_ListI call. If the NoPartCan or NoMissCan option is specified, the contents of the parts of the $list that are associated with image items that are not set from fields will be whatever they are in the actual image at the time of the $Field_ListI call. The actual contents of the template image are not modified by the $Field_ListI call.
Except in rare cases, NoPartCan is probably a bad idea since it suggests that the fields being extracted are not really a repeating group and so shouldn't be grouped. One case where NoPartCan might be useful is in validating the integrity of repeating groups, that is, making sure that all fields in the group have the same number of occurrences. The most efficient way to do this is to set the output $list identifier to -1, specify the NoPartCan parameter, and then check for a negative return code from $Field_ListI.
- If -1 is specified for the output $list identifier, no data movement or validation is performed, which means that if the same operation is performed with a valid output $list identifier, a
VARIABLE TOO SMALL FOR RESULT
or some other image assignment type error might occur, even if the call with a -1 $list identifier produced no such errors. - $Field_ListI behaves much as if each individual field value were assigned individually to its corresponding image item. This means that assignments of non-numeric field values to a numeric target image item cause the target item to be set to 0. It also means that in certain cases a
M204.0552: VARIABLE TOO SMALL FOR RESULT
might be issued. - If the image name and possibly the occurrence number item are specified as literals or static variables, the mapping of image item names to field names is performed at compile-time and so can be considerably more efficient at evaluation time than a $Field_ListI call with a variable image name. Unfortunately, since the binding of an image to a $list is done at evaluation time there is no way to take advantage of compile-time image item to field mapping when using this binding with $Field_ListI.
- The second argument to $Field_ListI can have a blank after the image name (and optional occurrence item name) followed by a prefix to be prepended to each image item name in generating field names.
For example, formerly (before Sirius Mods Version 6.3), if a file had fields in a repeating group called
ORDERDATA.PRODID
,ORDERDATA.QUANTITY
andORDERDATA.PRICE
, an image definition used with $Field_ListI would need to look something like this:IMAGE ORDERINFO ORDERDATA.PRODID IS STRING LEN 8 ORDERDATA.QUANTITY IS BINARY LEN 4 ORDERDATA.PRICE IS BINARY LEN 4 END IMAGE
So you could do:
%rc = $Field_ListI(%OLIST, 'ORDERINFO')
which means you'd have "ugly" looking image item names like
%ORDERINFO:ORDERDATA.PRODID
.But if you specify a prefix in the $Field_ListI call:
%rd = $Field_ListI(%OLIST, 'ORDERINFO ORDERDATA.')
The image definition could be simplified to:
IMAGE ORDERINFO PRODID IS STRING LEN 8 QUANTITY IS BINARY LEN 4 PRICE IS BINARY LEN 4 END IMAGE
The resulting image item references like
%ORDERINFO:PRODID
are much "nicer."
Examples
In the following example, a repeating group with three fields is extracted into a $list:
IMAGE CHILD NAMESAVE LNAME IS STRING LEN 16 FNAME IS STRING LEN 16 SSN IS PACKED LEN 5 END IMAGE . . . . %OLIST = $ListNew PREPARE IMAGE CHILD IN GROUP FAMILIES FRN %RECNO %RC = $Field_ListI(%OLIST, 'CHILD') END FOR
$ListInfI could then be used to extract the individual occurrences of the repeating group into the image.
And in the following example the occurrence number is placed into the $list at the position of image item NUMBER
in each $list item:
IMAGE CHILD NAMESAVE LNAME IS STRING LEN 16 FNAME IS STRING LEN 16 SSN IS PACKED LEN 5 NUMBER IS BINARY LEN 4 END IMAGE . . . . %OLIST = $ListNew PREPARE IMAGE CHILD IN GROUP FAMILIES FRN %RECNO %RC = $Field_ListI(%OLIST, 'CHILD:NUMBER') END FOR