<?xml version="1.0" encoding="UTF-8"?>
<action-sequence> 
  <title>Dynamic SQL Tech Tip</title>
  <version>1</version>
  <logging-level>DEBUG</logging-level>
  <documentation> 
    <author>Marc Batchelor</author>  
    <description>This action sequence demonstrates how to use a javascript rule to dynamically generate SQL for use in a report.</description>  
    <help>No help available.</help>  
    <result-type>report</result-type>  
    <icon/> 
  </documentation>

  <inputs> 
    <region type="string"> 
      <sources> 
        <request>region</request> 
      </sources>  
      <default-value>Central</default-value> 
    </region>  
    <deptorposn type="string"> 
      <default-value/>  
      <sources> 
        <request>deptorposn</request> 
      </sources> 
    </deptorposn>  
    <type type="string"> 
      <default-value/>  
      <sources> 
        <request>type</request> 
      </sources> 
    </type>  
    <type_FILTER type="property-map-list"> 
      <default-value type="property-map-list"> 
        <property-map> 
          <entry key="type">pdf</entry>  
          <entry key="Display">PDF</entry> 
        </property-map>  
        <property-map> 
          <entry key="type">xls</entry>  
          <entry key="Display">Excel File</entry> 
        </property-map>  
        <property-map> 
          <entry key="type">html</entry>  
          <entry key="Display">Web Page</entry> 
        </property-map> 
      </default-value> 
    </type_FILTER>  
    <region_FILTER type="string-list"> 
      <sources> 
        <request>region_FILTER</request> 
      </sources>  
      <default-value type="string-list"> 
        <list-item>Central</list-item>  
        <list-item>Eastern</list-item>  
        <list-item>Southern</list-item>  
        <list-item>Western</list-item> 
      </default-value> 
    </region_FILTER>  
    <deptorposn_RS type="result-set"> 
      <sources/>  
      <default-value type="result-set">
        <row>
          <deptorposn>department</deptorposn>
          <Display>Department</Display>
        </row>
        <row>
          <deptorposn>positiontitle</deptorposn>
          <Display>Position</Display>
        </row>
      </default-value>
      <columns>
        <deptorposn type="string"/>
        <Display type="string"/>
      </columns>
    </deptorposn_RS> 
  </inputs>

  <outputs/>

  <resources> 
    <report-definition> 
      <solution-file> 
        <location>SampleDynamicColumn.xml</location>  
        <mime-type>text/xml</mime-type> 
      </solution-file> 
    </report-definition> 
  </resources>
  
  <actions> 
    <action-definition> 
      <component-name>SecureFilterComponent</component-name>
      <action-type>SecureFilter Parameter Input</action-type>
      <action-inputs> 
        <deptorposn_RS type="result-set"/>  
        <deptorposn type="string"/>  
        <type type="string"/>  
        <type_FILTER type="property-map-list"/>  
        <region type="string"/>  
        <region_FILTER type="string-list"/> 
      </action-inputs>
      <component-definition> 
        <selections> 
          <deptorposn style="radio"> 
            <title>Department or Position</title>  
            <filter value-col-name="deptorposn" display-col-name="Display">deptorposn_RS</filter> 
          </deptorposn>  
          <region style="select"> 
            <title>Region</title>  
            <filter>region_FILTER</filter> 
          </region>  
          <type style="select"> 
            <title>Report Format</title>  
            <filter value-col-name="type" display-col-name="Display">type_FILTER</filter> 
          </type> 
        </selections> 
      </component-definition> 
    </action-definition>
  
    <action-definition> 
      <component-name>JavascriptRule</component-name>
      <action-type>JavaScript DSQL</action-type>
      <action-inputs> 
        <deptorposn type="string"/>  
        <region type="string"/> 
      </action-inputs>
      <action-outputs> 
        <query type="string"/> 
      </action-outputs>
      <component-definition> 
        <script><![CDATA[
         query = "select " + deptorposn;
         query += " as column1, sum(actual) from QUADRANT_ACTUALS where region={PREPARE:region} group by ";
         query += deptorposn + " order by actual desc";]]></script> 
      </component-definition> 
    </action-definition>
  
    <action-definition> 
      <component-name>JavascriptRule</component-name>
      <action-type>JavaScript ColumnTitle</action-type>
      <action-inputs> 
        <deptorposn type="string"/>  
        <deptorposn_RS type="result-set"/> 
      </action-inputs>
      <action-outputs> 
        <columnTitle type="string"/> 
      </action-outputs>
      <component-definition> 
        <script><![CDATA[
          columnTitle="UNDEFINED"; // Make sure it is initialized to something
          rowCnt = deptorposn_RS.getRowCount();
          for (i=0; i<rowCnt; i++) {
            colName = deptorposn_RS.getValueAt(i, 0); // get row: i, col 0
            if (colName == deptorposn) {
              columnTitle = deptorposn_RS.getValueAt(i, 1); // get row:i, column 1
              break;
            }
          }
        ]]> </script> 
      </component-definition> 
    </action-definition>
  
    <action-definition> 
      <component-name>JFreeReportComponent</component-name>
      <action-type>ReportUsingDSQL</action-type>
      <action-inputs> 
        <region type="string"/>  
        <columnTitle type="string"/>  
        <query type="string"/>  
        <output-type type="string" mapping="type"/> 
      </action-inputs>
      <action-resources> 
        <report-definition type="resource"/> 
      </action-resources>
      <component-definition> 
        <source>sql</source>  
        <jndi>SampleData</jndi>  
        <live>true</live> 
      </component-definition> 
    </action-definition>
 
  </actions> 
</action-sequence>