# Report Elements

The reports in IT-Conductor use the IT-Conductor XML markup identified by "itc" namespace prefix. At this time, the XML is not validated against the IT-Conductor schema.

### **Global Variables** <a href="#reporting-globalvariables" id="reporting-globalvariables"></a>

"variables ${self/....}, ${report/...}" are supported in any report element

#### Qualifiers

* **self** - report object like ${self/OBJECT\_Name}
* **report** - report specific [ Variables](#reporting-variable)

### **Section** <a href="#reporting-section" id="reporting-section"></a>

Dynamic Sections behave the same way as "\<query>", producing a list of objects based on select criteria:

```
<itc:section  
    <itc:parameter name="OBJECT_ClassName">class-name</itc:parameter>  
    <itc:select name="attr-name" [oper="Operator"]>value</itc:select>    
        ...  
    <itc:select ... > ...
    <itc:parameter name="maintenance">true|false</itc:parameter> - Optional, allows for selection of objects based on the effective Maintenance Mode
    <itc:parameter name="linkClassName">Link Target Class</itc:parameter>                - Optional, if the intent is to return a list of linked objects,
                                                                                         this is the class of the link objects
     <itc:parameter name="linkAttrName">Link target object attribute name</itc:parameter> - Optional, if the intent is to return a list of linked objects
                                                                                         and the selection targets Links, this attribute contains 
                                                                                         the target object id in the link, normally LINK_LinkedObjectId or LINK_ObjectId
                                                                                         the opposite of what is used in the select criteria
     ...
 </itc:section>
```

Where content can be any other construct including another.

The essence of sections is that for each object found in the query, the content will be replicated, and if "${context/...}" variables are used in any of the parameters they will be resolved with the query result Object attribute.

Nested "\<section>" push the context into a FIFO stack so all children will have the new object instance set as a context.

```
<itc:section>
<a>${context/OBJECT_Name}</a>
<p>   
    <itc:chart context="${context/OBJECT_Id}"> ... </itc:chart>
    </p>
    </itc:section>
```

Assuming the section query finds 3 objects, it will create the following construct:

```
<p>
  <p>     
    <a>Object 1</a>     
    <p><img for chart 1...></p>  
  </p>  
  <p>    
    <a>Object 2</a>    
    <p><img for chart 2...></p>  
  </p>  
  <p>     
    <a>Object 3</a>     
    <p><img for chart 3...></p>   
  </p>
</p>
```

### **Variable** <a href="#reporting-variable" id="reporting-variable"></a>

Sets report variable:

```
<itc:variable name="var-name">value</itc:variable>
```

The variables can be accessed anywhere in the report elements as ${report/var-name}

The variable must be decalred in the report xml before it is used - IT-Conductor processes xml sequentially.

### **If** <a href="#reporting-if" id="reporting-if"></a>

Conditional block:

```
<itc:if>  
    <itc:parameter name="mode">context|variables</itc:parameter>  
    <itc:select name="name" [oper="Operator"]>value</itc:select>    
        ...  
    <itc:select ... > ...   
    ... any content ...
</itc:if>
```

The optional **mode** parameter (defaults to "context") - determines what the condition criteria (selects) are applied to:

* **context** - the current context object (report external context or section-derived context)
* **variables** - report variables (assigned with \<itc:variable>)

If the criteria (all "\<itc:select>" elements) evaluates to true the content of the if is included and evaluated according to report-type supported elements, otherwise it is skipped.

### **Icon** <a href="#reporting-icon" id="reporting-icon"></a>

Insert Icon:

```
<itc:icon>  
    <itc:parameter name="name"><Icon Name></itc:parameter>
</itc:icon>
```

For available icon names, please refer to: <https://service.itconductor.com/iconList>

### **Path** <a href="#reporting-path" id="reporting-path"></a>

Displays service element path:

```
<itc:path> 
    <itc:parameter name="OBJECT_Id"><Object Id></itc:parameter>
</itc:path>
```

{% hint style="info" %}
**Note:** For PDF reports this is the only itc:... construct currently supported inside heading markup \<h..>\</h..>
{% endhint %}

### **Object & Context Selectors** <a href="#reporting-object-and-contextselectors" id="reporting-object-and-contextselectors"></a>

In all constructs we now support dynamic object and context selectors in addition to parameters "OBJECT\_Id" & "context":

```
<Object Selector />
<Context Selector />
```

See detail in ["Where"](#reporting-where).

### **Chart** <a href="#reporting-chart" id="reporting-chart"></a>

Reports Chart:

```
<itc:chart>
    <Object Selector><!-- Optional see OBJECT_Id above -->
    <itc:parameter name="context"><context id></itc:parameter><!-- Optional see Context Selector -->
    <Context Selector /><!-- Optional see context above -->
    <itc:parameter name="width">100%</itc:parameter>
    <itc:parameter name="timeScale">HOUR</itc:parameter>
    <itc:parameter name="title">true|false</itc:parameter> <!-- Display Chart Title, default: true -->
    <itc:parameter name="titleText">New Text</itc:parameter> <!-- Override Chart Title -->
    <itc:parameter name="annotations">true|false</itc:parameter> <!-- Disable /enable annotation in charts and tables, default: true -->
    <itc:parameter name="legend">none|left|right|top|bottom</itc:parameter> <!-- Display Legend in the position relative to the chart, default: as specified in the chart object -->
    <itc:parameter name="valuesOnly">true|false</itc:parameter> <!-- Disable /enable suppression of thresholds, severity & annotations, default: false -->
    <itc:parameter name="excludeCategory">Category id</itc:parameter>  <!-- Exclude Chart Category (if chart Supports category exclusion -->
    <itc:parameter name="range">Range, see below</itc:parameter>
    <itc:parameter name="endTime">End Time</itc:parameter> <!-- Optional, if specified used either specificaly or as a base for range calculation -->
    <itc:parameter name="annotations">true|false</itc:parameter>  <!-- disable /enable annotation in charts and tables, default: true -->
    <itc:parameter name="excludeCategory.<category id>">true|false</itc:parameter>  <!-- Exclude Chart Category (if chart Supports category exclusion -->
    <itc:parameter name="table">false</itc:parameter> <!-- Show as Table. default: false -->
    <itc:parameter name="matrix">false</itc:parameter> <!-- Show as Matrix. Superseded by "table"=true; default: false -->
    <!-- When table=true -->
    <itc:parameter name="header">true|false</itc:parameter> <!-- disable/enable chart table header row, default: true -->
    <itc:parameter name="categoryHeader">Text</itc:parameter> <!-- set category column header text, default: none -->
    <itc:parameter name="valueHeader">Text</itc:parameter>   <!-- set value column header text, default: none -->
    <itc:parameter name="tableTime">true|false</itc:parameter> <!-- disable/enable chart (time-series nly) table Time column, default: true -->
    <itc:parameter name="tableCategories">true|false</itc:parameter> <!-- disable/enable chart table Category column, default: true -->
</itc:chart>
```

Where Category ID is either category Object Id (for multi-line graphs) or "Alarm", "Warning", "Severity", "itconductor.Annotations", "itconductor.Summary".

### **Threshold** <a href="#reporting-threshold" id="reporting-threshold"></a>

Locates & reports a threshold, based on the target Object ID and value Attribute Name.

{% hint style="info" %}
**Note:** Only Regular thresholds are supported. Collection thresholds should be accessed using "\<chart>" construct.
{% endhint %}

```
<itc:threshold>
<Object Selector> <!-- Optional see THRESHOLD_ObjectId above -->
  <itc:parameter name="THRESHOLD_AttributeName">OBJECT_Availability</itc:parameter>
  <itc:parameter name="table">false</itc:parameter>
  <itc:parameter name="width">100%</itc:parameter>
  <itc:parameter name="timeScale">HOUR</itc:parameter>
  <itc:parameter name="title">true|false</itc:parameter> <!-- Display Threshold Title, default: true -->
  <itc:parameter name="titleText">New Text</itc:parameter> <!-- Override Chart Title -->
  <itc:parameter name="annotations">true|false</itc:parameter> <!-- Disable /enable annotation in charts and tables, default: true --> 
  <itc:parameter name="legend">none|left|right|top|bottom</itc:parameter> <!-- Display Legend in the position relative to the chart, default: depends on the threshold type --> 
  <itc:parameter name="valuesOnly">true|false</itc:parameter> <!-- Disable /enable suppression of thresholds, severity & annotations, default: false -->
  <itc:parameter name="range">Range, see below</itc:parameter>
  <itc:parameter name="endTime">End Time</itc:parameter> <!-- Optional, if specified used either specificaly or as a base for range calculation -->
  <itc:parameter name="scale">Value scale, Decimal</itc:parameter>
  <itc:parameter name="unit">Unit Name, String</itc:parameter> 
  <itc:parameter name="format">Value Format, Java Formatting:  %,.2f</itc:parameter> 
  <itc:parameter name="details">true|false</itc:parameter> <!-- For Consolidator Thresholds enables Details mode display ->
  <itc:parameter name="collector">Collector ObjectId</itc:parameter> <!-- For Consolidator Thresholds if Details mode, use collector for a specific component details ->
</itc:threshold>
```

Parameters "THRESHOLD\_ObjectId" and "THRESHOLD\_AttributeName" allow for the selection of the relevant threshold (search is performed).

If parameter "OBJECT\_Id" is specified, it overrides the above and the construct behaves fully as "\<chart>".

Parameters scale, unit, and format are threshold specific and allow to override of how the value is charted.

Otherwise "\<threshold>" behaves exactly like "\<chart>".

### **Alerts** <a href="#reporting-alerts" id="reporting-alerts"></a>

Report alerts for the selected criteria\*\*:\*\*

```
<itc:alerts>
<!-- Target Alerts Criteria -->
  <itc:parameter name="className">Alert</itc:parameter> <!-- Target Class Name, optional, default "Alert" -->
  <itc:parameter name="ALERT.Status">Status</itc:parameter> <!-- Optional, Default - All, Overridden by itc:select for the same attribute-->
  <itc:parameter name="table">false</itc:parameter>
  <itc:parameter name="width">100%</itc:parameter>
  <itc:parameter name="timeScale">HOUR</itc:parameter>
  <itc:parameter name="range">Range, see below</itc:parameter>
  <!-- Search Criteria -->
  <itc:select name="export">true|false</itc:select>   <!-- Columns reported based ListExport flag not TableView flag (default) -->
  <itc:select name="select">Comma-separated column Attributes</itc:select>   <!-- Specific Columns to display, supersedes "export" -->
  <itc:select name="sortAttr">attribute name</itc:select> <!-- default ALERT.Time -->
  <itc:select name="sortOrder">DESC|ASC</itc:select> <!-- default ASC -->
</itc:alerts>
```

### **Service Query** <a href="#reporting-servicequery" id="reporting-servicequery"></a>

Query on a service tree (applies the search criteria to each element in the sub-tree):

```
<itc:servicequery>
  <!-- root Service node selector -->
  <itc:select  ..
  <!-- Target Objects Criteria -->
  <itc:target> 
    <itc:parameter name="className">Target Object Class</itc:parameter> <!-- Target Class Name , optional - default "Service" -->
    <itc:parameter name="serviceAttr">ALERT.ContextService</itc:parameter> <!-- Target Class Attribute  in the search criteria set with the service element ID , Required --> 
    <itc:parameter name="timeAttr">ALERT.Time</itc:parameter> <!-- Target Class Time Attribute, Optional --> 
    <!-- Query Criteria -->
    <itc:select 
  </itc:target>
  <itc:parameter name="table">false</itc:parameter>
  <itc:parameter name="width">100%</itc:parameter>
  <itc:parameter name="timeScale">Time Scale</itc:parameter><!-- Optional, Default HOUR -->
  <itc:parameter name="range">Range</itc:parameter> <!-- Optional, only evaluated if timeAttr is specified-->
  <itc:parameter name="startTime">Time</itc:parameter><!-- Optional, Override Range, only evaluated if timeAttr is specified -->
  <itc:parameter name="endTime">Time</itc:parameter>  <!-- Optional, Override Range, only evaluated if timeAttr is specified-->
  <itc:parameter name="export">true|false</itc:parameter>   <!-- Columns reported based ListExport flag not TableView flag (default) -->
  <itc:parameter name="select">Comma-separated column Attributes</itc:parameter>   <!-- Specific Columns to display, supersedes "export" -->
  <itc:parameter name="sortAttr">attribute name</itc:parameter>
  <itc:parameter name="sortOrder">DESC|ASC</itc:parameter>
</itc:servicequery>
```

### **Query** <a href="#reporting-query" id="reporting-query"></a>

Free-form object query:

```
<itc:query>
<Object Selector>
  <itc:parameter name="export">true|false</itc:parameter>   <!-- Columns reported based ListExport flag not TableView flag (default) -->
  <itc:parameter name="select">Comma-separated column Attributes</itc:parameter>   <!-- Specific Columns to display, supersedes "export" -->
  <itc:parameter name="linkAttrName">Link target object attribute name</itc:parameter> <!-- Optional, if the intent is to return a list of linked objects 
                                                                                           and the selection targets Links, this attribute contains 
                                                                                           the target object id in the link, normally LINK_LinkedObjectId or LINK_ObjectId
                                                                                           the opposite of what is used in the select criteria -->
  <itc:parameter name="linkClassName">Linked object Class Name</itc:parameter> <!-- If linkAttrName is not specified - ignore, otherwise mandatory, specifies the target object Class --> 
  <itc:parameter name="sortAttr">attribute name</itc:parameter> <!-- Target (final) object sorting attribute name, must visible as the table column, otherwise ignored -->
  <itc:parameter name="sortOrder">DESC|ASC</itc:parameter>
</itc:query>
```

### **Object Details** <a href="#reporting-objectdetails" id="reporting-objectdetails"></a>

Display all visible object attributes as a vertical table with "Name:Value" rows:

```
<itc:details>  
    <Object Selector>
</itc:details>
```

### **Counter** <a href="#reporting-counter" id="reporting-counter"></a>

Object counter based on query returns the number of objects in the query result:

```
<itc:counter>  
    <Object Selector>  
    <itc:parameter name="title">Label</itc:parameter> <!-- if specified displayed as: Label <Count> -->
</itc:counter>
```

### **Saved Search** <a href="#reporting-savedsearch" id="reporting-savedsearch"></a>

```
<itc:savedsearch>  
    <itc:parameter name="OBJECT_Id">Saved Search Object ID</itc:parameter>  
    <Context Selector>  
    <itc:parameter name="export">true|false</itc:parameter>   <!-- Columns reported based ListExport flag not TableView flag (default) -->  
    <itc:parameter name="select">Comma-separated column Attributes</itc:parameter>   <!-- Specific Columns to display, supersedes "export" -->
</itc:savedsearch>
```

### **Audit Log** <a href="#reporting-auditlog" id="reporting-auditlog"></a>

Report audit log events:

```
<itc:auditlog>  
    <Object Selector> <!-- If any objects matched, the auditlog will be queried for those objects, if none found and className is not specified, global tenant search is performed -->  
    <itc:parameter name="severity">Min Severity</itc:parameter>   <!-- Minimum event severity to include, Optional -->  
    <itc:parameter name="request">Request Name</itc:parameter>   <!-- Event Request (update,delete,maintenance,...), Optional -->  
    <itc:parameter name="range">Range, see below</itc:parameter>  
    <itc:parameter name="exclude.<ObjectName|AuthorName|Request|Severity|Details|Timestamp>">true</itc:parameter>  
    <itc:parameter name="sortAttr">Timestamp|ObjectId|ObjectName|ObjectClass|AuthorId|AuthorName|Request|Severity</itc:parameter> <!- Optional, Default=Timestamp -->  
    <itc:parameter name="sortOrder">DESC|ASC</itc:parameter>
</itc:auditlog>
```

### **Subscriptions** <a href="#reporting-subscriptions" id="reporting-subscriptions"></a>

Creates a table displaying the email addresses of tenant subscriptions:

```
<itc:subscriptions />
```

### **Attribute Text** <a href="#reporting-attributetext" id="reporting-attributetext"></a>

Display object attribute text based on the attribute Display format. For the HTML report, it is wrapped with "\<p>value\</p>". For PDF, a paragraph is created with the value:

```
<itc:attributetext>  
    <itc:parameter name="name">EXTERNAL_ACTIVITY.Log</itc:parameter>  
    <Object Selector>
</itc:attributetext>
```

{% hint style="info" %}
**Note:** Avoid HTML content. It can not be converted to PDF
{% endhint %}

### **Where** <a href="#reporting-where" id="reporting-where"></a>

**Object Selector:**

```
 <itc:parameter name="OBJECT_Id">${context/OBJECT_Id}</itc:parameter><!-- If specified, the rest is ignored, Optional --> 
 <itc:parameter name="className">Object Class</itc:parameter> <!-- Target Class Name, optional --> 
 <itc:select name="AttrName" [oper="Operator"]>value</itc:select> 
 <itc:select>...</itc:select>
```

**Context Selector:**

```
<itc:parameter name="context">Context ID</itc:parameter> <!-- Optional, if not specified see below →
<itc:context>  <!-- Optional, if not specified see above →  
    <itc:parameter name="className">Object Class</itc:parameter>   
    <itc:select name="AttrName" [oper="Operator"]>Value</itc:select>  
    <itc:select>...</itc:select>
<itc.context>
```

**Operator**: EQ|NE|GT|GE|LT|LE|MATCH|NOT\_MATCH|IN|NOT\_IN|NULL|NOT\_NULL **default:** EQ

**Time Scale**: MIN|5MIN|QUARTER\_HOUR|HALF\_HOUR|HOUR|DAY|WEEK|MONTH|QUARTER|YEAR

**Range**:

* YTD - year to date
* QTD - quarter to date
* MTD - month to date
* WTD - week to date
* DTD - day to date
* M# - last # full month (M12 - last 12 month)
* D# - last # full days (D1 - yesterday, D7 - last 7 days)
* H# - last # full hours
* TY - This Year&#x20;
* TQ - This Quarter
* TM - This Month
* TW - This Week
* TD - Today
* LY - Last year
* LM - Last Month
* LW - Last week
* LD - Yesterday
* MH1 - First half (1-15) of the prior or current month (if current month day is after 15)
* MH1P - First half (1-15) of the prior month (even if the current month day is after 15)
* MH2 - Second half (16-30/31) of the prior month

**Time**:

* User's locale/timezone-specific time format: US: dd/MM/yyyy hh:mm:ss a

(Please refer [here](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) for more details.)

* **now** - current time/date snapped to TimeScale interval
* **before** - time/date snapped to previous from now TimeScale interval
* **after** - time/date snapped to next from now TimeScale interval

#### Parameter Width and Height <a href="#reporting-parameterwidthandheight" id="reporting-parameterwidthandheight"></a>

For HTML reports Chart/Threshold parameters width and height now accept UOM: 100%, 5em, 10ex, 100px, etc. If no UOM is provided and only the number is supplied the PX is assumed.

### Output Type CSV <a href="#reporting-outputtypecsv" id="reporting-outputtypecsv"></a>

Reports now support CSV output. In this mode:

* All graphical constructs are ignored.
* Charts/Thresholds are displayed as tables regardless of the table parameter value.
* Headers (h1/h2/...) are rendered as a line of text.
* Other HTML (non itc:) markup is exploded but not rendered (if you specify "\<p>\<itc:chart>....\</p>", the "\<itc:chart>" will be rendered without any formatting associated with "\<p>").

### Examples <a href="#reporting-examples" id="reporting-examples"></a>

The following example will produce a report that includes Availability (Table and Chart) for each SAP System with a Development application role.

This work is in both PDF and HTML mode ("\<pbr />" is a page break and only rendered in PDF).

```
<itc:report xmlns:itc="urn:itconductor">
  <itc:parameter name="fontSize">4</itc:parameter>
  <h1>Development SAP Systems Availability Report</h1>
  <itc:section>
    <itc:parameter name="OBJECT_ClassName">SAP</itc:parameter>
    <itc:select name="APPLICATION_Role">DEV</itc:select>
    <pbr />
    <h2>${context/OBJECT_Name}</h2>
    <itc:threshold>
      <itc:parameter name="THRESHOLD_ObjectId">${context/OBJECT_Id}</itc:parameter>
      <itc:parameter name="THRESHOLD_AttributeName">OBJECT_Availability</itc:parameter>
      <itc:parameter name="table">false</itc:parameter>
      <itc:parameter name="width">100%</itc:parameter>
      <itc:parameter name="timeScale">HOUR</itc:parameter>
      <itc:parameter name="range">LD</itc:parameter>
    </itc:threshold>
    <itc:threshold>
      <itc:parameter name="THRESHOLD_ObjectId">${context/OBJECT_Id}</itc:parameter>
      <itc:parameter name="THRESHOLD_AttributeName">OBJECT_Availability</itc:parameter>
      <itc:parameter name="table">true</itc:parameter>
      <itc:parameter name="timeScale">HOUR</itc:parameter>
      <itc:parameter name="range">LD</itc:parameter>
    </itc:threshold>
  </itc:section>
</itc:report>
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.itconductor.com/user-guide/reporting/report-elements.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
