SCL list functions such as INSERTC and GETITEMN do not perform explicit “set” and “get”
assignments. That is, when you use one of these SCL functions to manipulate a list
attribute, the _setAttributeValue
method is not invoked for the attribute. The value of the attribute might be changed, but
the other actions that occur when an attribute value is changed in a _setAttributeValue
call do not execute. The value cannot be validated, the “attributeName changed”
event is not sent, and custom access methods do not run. Your SCL code must use explicit
assignment operations, such as
object.attribute=value
, in order to invoke the expected
attribute value setting behavior.
For example, consider a frame that contains a list box
control named listbox1. If you want to write SCL that adds items to the list box, it might
seem logical to write:
/* frame SCL */
dcl num rc;
init:
rc=insertc(listbox1.items, 'Red', -1);
rc=insertc(listbox1.items, 'Blue', -1);
rc=insertc(listbox1.items, 'Green', -1);
return;
However, because the INSERTC function does not invoke the _setAttributeValue method
for
items
, the “items changed” event is never sent, and the list box is not updated on the
frame.
Instead, you can use
a list variable and set the
items
attribute to the value of the list. For example:
dcl list localList=makelist();
init:
localList=listbox1.items;
rc=insertc(localList, 'Red', -1);
rc=insertc(localList, 'Blue', -1);
rc=insertc(localList, 'Green', -1);
listbox1.items=localList;
return;
The _setAttributeValue method runs for the
items
attribute when the dot notation call sets the
value of
items
. The list box in the
frame displays the updated list.