[ForEach:]
Loops over a set of values.
Purpose
Use the [ForEach:] / [EndForEach:] macros to loop over a number of values, repeating a section of the input template as it does so.
Macro Compatibility
The macro can be used in all input document types and in Report Studio.
Usage
The [Break:] and [Continue:] macros can also be used with the [ForEach:] / [EndForEach:] macros, to provide more control over your macro execution. The 'skip' and 'take' parameters limit the number of items returned.
Parameter | Type | Deprecation Message | Preferred Parameter | Presence | Purpose | Options | Default |
---|---|---|---|---|---|---|---|
String | Use instead of:
| Mandatory | The iteration variable. | N/A | N/A | ||
String | Deprecated | storeAs | The iteration variable. | N/A | N/A | ||
List<Object> | Mandatory | The values. | N/A | N/A | |||
Char | Optional | The character to use per item to delimit individual fields when assigning to multiple output variables. Likely value to use: '^'. | N/A | ||||
String | Optional | Add a comment to make your document template more readable. The comment is discarded in the output document. | N/A | N/A | |||
Char | Optional | The delimiter to use to split the input values, e.g. item1;item2;item3. | N/A | ; | |||
Boolean | Optional | Should NCalc expression evaluation throw error on Overflow |
|
true | |||
String | Optional | The text to display should the macro fail to execute. Note that a poorly-specified macro (e.g. omitting mandatory parameters) will still result in an error message. | N/A | N/A | |||
String | Optional | The condition that must be true in order for the macro to be executed/evaluated. Must either evaluate to true or false, for example: "3+5=8" or "contains('abcd', 'z'). | N/A | true | |||
String | Optional | The optional 'ifNoValues' parameter is used to specify the output text if the values parameter is empty (e.g. when using string replacement from previous macros in the document). | N/A | N/A | |||
MacroMode | Optional | The mode in which variables are stored. In the legacy mode (default for Schedules), the variable created is a string and formatted. In the normal mode (default for Report Studio), the output variable is stored as a strongly-typed object, e.g. an Int32 or a List |
|
Legacy | |||
ObfuscationType | Optional | Obfuscation type. Use obfuscation to write reports where sensitive data is hidden. When used, ReportMagic guarantees that the same input string will map to the same output string for the whole of the report (but the next time the report runs, it will most likely map to a different value). If you use obfuscation, the property in your macro will not show up and instead, you will see a fake item of the obfuscation type chosen. |
|
None | |||
Int32 | Optional | The number of items to skip. |
|
0 | |||
Int32 | Optional | The number of items to take. |
|
2147483647 | |||
String | Optional | If specified, adds a warning message for this macro. This is processed as an NCalc, and the warning message will ALWAYS be present and will be the value of the evaluated NCalc expression. | N/A | N/A |
Examples (4)
Example 1:
A simple [ForEach:] / [EndForEach:] macros (indenting for clarity, but not necessary):
[ForEach: storeAs=currentDevice, values=dev.panoramicdata.com;test.panoramicdata.com] ***[String:value={currentDevice}]*** [LogicMonitor.Graph: device={currentDevice}, graphName=CPU Usage, dataSourceName=WinCPU] [EndForEach:]
Example 2:
A nested [ForEach:] / [EndForEach:] macros (indenting for clarity, but not necessary):
[ForEach: storeAs=currentDevice, values=dev.panoramicdata.com;test.panoramicdata.com] ***Host: [String:value={currentDevice}]*** [ForEach: storeAs=currentDrive, values=C:] **[String: value={currentDrive}]** [ForEach: storeAs=currentGraph,values=Throughput;Latency] **[String:value={currentGraph}]** [LogicMonitor.Graph: device={currentDevice}, dataSourceName=WinLogicalDrivePerformance-, dataSourceInstanceName={currentDrive}, graphName={currentGraph}] [EndForEach:] [EndForEach:] [EndForEach:]
Example 3:
A simple [ForEach:] / [EndForEach:] macros (indenting for clarity, but not necessary) with missing values. Assume that {devices} is set by a previous macro but has evaluated to an empty string:
[String: value=, hidden=true, storeAs=Devices] [ForEach: storeAs=Device, values={Devices}, ifNoValues=There are no devices.] This device is: [String: value={Device}] [EndForEach:]
Example 4:
Skip and Take mean that you can limit report sizes during development.
BC Only: [ForEach: values=A;B;C, skip=1, take=2, storeAs=Item][String:value={Item}][EndForEach:] BC Only: [ForEach: values=A;B;C, skip=1, take=5, storeAs=Item][String: value={Item}][EndForEach:] No items: [ForEach: values=A;B;C, skip=5, take=5, storeAs=Item][String: value={Item}][EndForEach:]