KeyValueCollectionContainer are designed to work with
KeyValueEntity. This entity can contain an arbitrary number of attributes that are defined at runtime.
The KeyValue containers define the following specific methods:
addProperty()- as the container can store entities with any number of attributes, you have to specify what attributes are expected by using this method. It accepts a name of the attribute and its type in the form of Datatype or a Java class. In the latter case, the class should be either an entity class or a class supported by one of the datatypes.
setIdName()is an optional method that allows you to define one of the attributes as an identifier attribute of the entity. It means that
KeyValueEntityinstances stored in this container will have identifiers obtained from the given attribute. Otherwise,
KeyValueEntityinstances get randomly generated UUIDs.
getEntityMetaClass()returns a dynamic implementation of the MetaClass interface that represents the current schema of
KeyValueEntityinstances. It is defined by previous calls to
KeyValueCollectionContainer can be defined in a screen XML descriptor using
XML definition of a KeyValue container must include the
properties element that defines the
KeyValueEntity attributes. The order of nested property elements should conform to the order of result set columns returned by the query. For example, in the following definition the
customer attribute will get its value from
o.customer column and the sum attribute from
<data readOnly="true"> <keyValueCollection id="ordersDc"> <loader id="ordersDl"> <query> <![CDATA[select o.customer, sum(o.amount) from uiex1_Order o group by o.customer]]> </query> </loader> <properties> <property name="customer" class="ui.ex1.entity.Customer"/> <property name="sum" datatype="decimal"/> </properties> </keyValueCollection> </data>