.foreach_item Macro

This macro iterates over a collection of sub-objects or related objects.

.foreach_item (collection [,head [,tail [,filter [,order]]]])
	output
.next [(separator)]

The following parameters are available:

Parameter

Description

collection

Specifies the collection over which to iterate.

Type: Simple template

head

[optional] Specifies text to be generated before the output, unless the collection is empty.

Type: Text

tail

[optional] Specifies text to be generated after the output, unless the collection is empty.

Type: Text

filter

[optional] Specifies a filter to apply to the collection before iteration.

Type: Simple condition

order

[optional] Specifies the order in which the collection will be iterated in the format:
%Item1.property% <= %Item2.property%
When the comparison evaluates to true, %Item1% will be placed after %Item2%. By default, the collection is ordered alphabetically by name.

Type: Simple condition

output

Specifies the text to output for each item in the collection.

Type: Complex template

separator

[optional] Specifies text to be generated between each instance of output.

Type: Text

Note: If parameter values contain commas, braces, or leading or trailing blanks, they must be delimited with double-quotes. To escape double-quotes inside a parameter value, use \".
Examples
Simple list:
.foreach_item(Attributes)
	*%Code% (%DataType%)[ = %InitialValue%];
.next(\n)
Result:
	*available (boolean) = true;
	*actualCost (int);
	*baseCost (int);
	*color (String);
	*height (int) = 10;
	*width (int) = 5;
	*name (int);
With head and tail:
.foreach_item(Attributes,Attributes:\n,\n\nEnd of Attribute List)
	*%Code% (%DataType%)[ = %InitialValue%];
.next(\n)
Result:
Attributes: 
*available (boolean) = true; 
*actualCost (int); 
*baseCost (int); 
*color (String); 
*height (int) = 10; 
*width (int) = 5; 
*name (int); 

End of Attribute List
With filter:
.foreach_item(Attributes,,,%.1:Code%==a)
	*%Code% (%DataType%)[ = %InitialValue%];
.next(\n)
Result:
	*available (boolean) = true;
	*actualCost (int);
With reverse alphabetical ordering:
.foreach_item(Attributes,,,, %Item1.Code% <= %Item2.Code% )
	*%Code% (%DataType%)[ = %InitialValue%];
.next(\n)
Result:
	*width (int) = 5;
	*name (int);
	*height (int) = 10;
	*color (String);
	*baseCost (int);
	*available (boolean) = true;
	*actualCost (int);