Using the following code sample below, users can create a new report and filter expression from scratch.
package testFiles;
import java.util.Date;
import java.util.Enumeration;
import com.Strategy.web.objects.EnumWebToggleFunction;
import com.Strategy.web.objects.WebAttribute;
import com.Strategy.web.objects.WebConstantNode;
import com.Strategy.web.objects.WebElements;
import com.Strategy.web.objects.WebElementsObjectNode;
import com.Strategy.web.objects.WebElementsPrompt;
import com.Strategy.web.objects.WebExpression;
import com.Strategy.web.objects.WebExpressionHelper;
import com.Strategy.web.objects.WebFilter;
import com.Strategy.web.objects.WebFolder;
import com.Strategy.web.objects.WebGridHeaders;
import com.Strategy.web.objects.WebGridRows;
import com.Strategy.web.objects.WebGridTitles;
import com.Strategy.web.objects.WebHeader;
import com.Strategy.web.objects.WebHeaders;
import com.Strategy.web.objects.WebIServerSession;
import com.Strategy.web.objects.WebNode;
import com.Strategy.web.objects.WebObjectInfo;
import com.Strategy.web.objects.WebObjectSource;
import com.Strategy.web.objects.WebObjectsException;
import com.Strategy.web.objects.WebObjectsFactory;
import com.Strategy.web.objects.WebOperatorNode;
import com.Strategy.web.objects.WebPrompts;
import com.Strategy.web.objects.WebReportData;
import com.Strategy.web.objects.WebReportGrid;
import com.Strategy.web.objects.WebReportInstance;
import com.Strategy.web.objects.WebReportManipulation;
import com.Strategy.web.objects.WebReportSource;
import com.Strategy.web.objects.WebReportValidationException;
import com.Strategy.web.objects.WebRow;
import com.Strategy.web.objects.WebRowValue;
import com.Strategy.web.objects.WebShortcutNode;
import com.Strategy.web.objects.WebTemplate;
import com.Strategy.web.objects.WebTemplateMetrics;
import com.Strategy.web.objects.WebTitle;
import com.Strategy.web.objects.WebWorkingSet;
import com.Strategy.webapi.EnumDSSXMLAuthModes;
import com.Strategy.webapi.EnumDSSXMLAxisName;
import com.Strategy.webapi.EnumDSSXMLDataType;
import com.Strategy.webapi.EnumDSSXMLDisplayMode;
import com.Strategy.webapi.EnumDSSXMLExecutionFlags;
import com.Strategy.webapi.EnumDSSXMLExpressionType;
import com.Strategy.webapi.EnumDSSXMLFolderNames;
import com.Strategy.webapi.EnumDSSXMLFunction;
import com.Strategy.webapi.EnumDSSXMLObjectTypes;
import com.Strategy.webapi.EnumDSSXMLReportSaveAsFlags;
import com.Strategy.webapi.EnumDSSXMLResultFlags;
import com.Strategy.webapi.EnumDSSXMLStatus;
public class CreateReport {
public static void main(String[] args) throws WebObjectsException {
WebObjectsFactory objectFactory = WebObjectsFactory.getInstance();
WebIServerSession serverSession = objectFactory.getIServerSession();
serverSession.setServerPort(0);
serverSession.setAuthMode(EnumDSSXMLAuthModes.DssXmlAuthStandard);
serverSession.setProjectName("PROJECT_NAME");
serverSession.setLogin("USER_ID");
serverSession.setPassword("");
serverSession.setServerName("SERVER_NAME");
WebObjectSource objectSource = objectFactory.getObjectSource();
WebReportSource reportSource = objectFactory.getReportSource();
reportSource.setExecutionFlags(EnumDSSXMLExecutionFlags.DssXmlExecutionResolve);
reportSource.setResultFlags(EnumDSSXMLResultFlags.DssXmlResultWorkingSet | EnumDSSXMLResultFlags.DssXmlResultViewReport | EnumDSSXMLResultFlags.DssXmlResultStatusOnlyIfNotReady);
//retrieve Blank Report for manipulation
WebReportInstance reportInstance = reportSource.getNewInstance("05B202B9999F4C1AB960DA6208CADF3D");
reportInstance.setAsync(false);
int status = reportInstance.pollStatus();
//retrieve report template
WebTemplate template = reportInstance.getTemplate();
//add Region and Subcategory to the template
WebObjectInfo regionInfo = objectSource.getObject("8D679D4B11D3E4981000E787EC6DE8A4", EnumDSSXMLObjectTypes.DssXmlTypeAttribute);
WebObjectInfo subcategoryInfo = objectSource.getObject("8D679D4F11D3E4981000E787EC6DE8A4", EnumDSSXMLObjectTypes.DssXmlTypeAttribute);
template.add(regionInfo,EnumDSSXMLAxisName.DssXmlAxisNameRows, 1 );
template.add(subcategoryInfo,EnumDSSXMLAxisName.DssXmlAxisNameRows, 2 );
//add Revenue and Cost metrics to the template
template.addMetrics(EnumDSSXMLAxisName.DssXmlAxisNameColumns, 1);
WebObjectInfo revenueInfo = objectSource.getObject("4C05177011D3E877C000B3B2D86C964F", EnumDSSXMLObjectTypes.DssXmlTypeMetric);
WebObjectInfo costInfo = objectSource.getObject("7FD5B69611D5AC76C000D98A4CC5F24F", EnumDSSXMLObjectTypes.DssXmlTypeMetric);
WebTemplateMetrics wtm = template.getTemplateMetrics();
wtm.add(revenueInfo);
wtm.add(costInfo);
//get filter
WebFilter rptFilter = null;
if (reportInstance != null) {
WebWorkingSet wws = reportInstance.getWorkingSet();
if (wws != null) {
rptFilter = wws.getFilter();
WebExpression filterExpression = rptFilter.getExpression();
WebNode root = filterExpression.getRootNode();
//shortcut to a filter expression E7773E5B4ECCCA9A22B23CB3367F21DB
WebObjectInfo filterShortcut = objectSource.getObject("E7773E5B4ECCCA9A22B23CB3367F21DB", EnumDSSXMLObjectTypes.DssXmlTypeFilter);
WebShortcutNode nodeShortcutNode = filterExpression.createShortcutNode(filterShortcut, root);
//metric qualification expression
WebOperatorNode greaterThanNode1 = filterExpression.createOperatorNode(EnumDSSXMLExpressionType.DssXmlFilterSingleMetricQual,EnumDSSXMLFunction.DssXmlFunctionGreater, root);
WebObjectInfo profitInfo = objectSource.getObject("4C051DB611D3E877C000B3B2D86C964F", EnumDSSXMLObjectTypes.DssXmlTypeMetric);
WebShortcutNode profitShortcutNode = filterExpression.createShortcutNode(profitInfo, greaterThanNode1);
WebConstantNode profitValueNode = filterExpression.createConstantNode("0", EnumDSSXMLDataType.DssXmlDataTypeNumeric, greaterThanNode1);
//revenue qualification expression
WebOperatorNode greaterThanNode2 = filterExpression.createOperatorNode(EnumDSSXMLExpressionType.DssXmlFilterSingleMetricQual,EnumDSSXMLFunction.DssXmlFunctionGreater, root);
WebShortcutNode revenueShortcutNode = filterExpression.createShortcutNode(revenueInfo, greaterThanNode2);
WebConstantNode revenueValueNode = filterExpression.createConstantNode("10000", EnumDSSXMLDataType.DssXmlDataTypeNumeric, greaterThanNode2);
//toggle the AND operator to OR, indent revenue and profit qualifications
WebExpressionHelper helper = filterExpression.getExpressionHelper();
helper.toggleFunction(greaterThanNode1, greaterThanNode2, EnumWebToggleFunction.WebToggleFunctionOr);
//attribute qualification expression
WebOperatorNode inListNode = filterExpression.createOperatorNode(EnumDSSXMLExpressionType.DssXmlFilterListQual,EnumDSSXMLFunction.DssXmlFunctionIn, root);
WebAttribute quarter = (WebAttribute) objectSource.getObject("8D679D4A11D3E4981000E787EC6DE8A4", EnumDSSXMLObjectTypes.DssXmlTypeAttribute);
WebShortcutNode attributeNode = filterExpression.createShortcutNode(quarter, inListNode);
WebElementsObjectNode quarterNode = filterExpression.createElementsObjectNode(quarter, inListNode);
WebElements elements = quarterNode.getElements();
elements.add("8D679D4A11D3E4981000E787EC6DE8A4:20062", "2006 Q2");
elements.add("8D679D4A11D3E4981000E787EC6DE8A4:20061", "2006 Q1");
}
}
//apply changes
WebReportManipulation rptManip = reportInstance.getReportManipulator();
WebReportInstance newInst = null;
try {
rptManip.setExecutionFlags(EnumDSSXMLExecutionFlags.DssXmlExecutionResolve);
rptManip.setResultFlags(1268388256);
newInst = rptManip.applyChanges();
newInst.setAsync(false);
status = newInst.pollStatus();
} catch (WebReportValidationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//answer prompts
if(status == EnumDSSXMLStatus.DssXmlStatusPromptXML){
System.out.println("prompts are open");
WebPrompts wps = newInst.getPrompts();
WebElementsPrompt elementsPrompt = (WebElementsPrompt) wps.get(0);
WebElements elements = elementsPrompt.getAnswer();
elements.clear();
elements.add("8D679D4B11D3E4981000E787EC6DE8A4:3");
newInst.getPrompts().answerPrompts();
newInst.pollStatus();
}
newInst.setSaveAsDisplayMode(EnumDSSXMLDisplayMode.DssXmlDisplayModeGrid);
newInst.setSaveAsFlags(EnumDSSXMLReportSaveAsFlags.DssXmlReportSaveAsFilterWithPrompts | EnumDSSXMLReportSaveAsFlags.DssXmlReportSaveAs8iWarning | EnumDSSXMLReportSaveAsFlags.DssXmlReportSaveAsEmbedded);
//save report to Shared Reports folder
String folderID = objectSource.getFolderID(EnumDSSXMLFolderNames.DssXmlFolderNamePublicReports);
WebFolder myReports = (WebFolder) objectSource.getObject(folderID, EnumDSSXMLObjectTypes.DssXmlTypeFolder);
//set report name to report name with current timestamp
String datedReportName ="Demo report - ".concat((new Date()).toString());
//save report calling saveAs() method of WebReportInstance
WebObjectInfo woi = newInst.saveAs(myReports, datedReportName);
//run report, this time return data
rptManip = newInst.getReportManipulator();
rptManip.setExecutionFlags(EnumDSSXMLExecutionFlags.DssXmlExecutionFresh);
rptManip.setResultFlags(EnumDSSXMLResultFlags.DssXmlResultGrid);
try {
newInst = rptManip.applyChanges();
newInst.pollStatus();
transformResults(newInst);
} catch (WebReportValidationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void transformResults(WebReportInstance reportInstance) {
try {
WebReportData results = reportInstance.getResults();
WebReportGrid reportGrid = results.getWebReportGrid();
System.out.println("Report returned with "+reportGrid.getGridRows().size()+" rows");
//Code to display Row Title.
WebGridTitles rowTitles = reportGrid.getRowTitles();
Enumeration rowTitlesEnumeration = rowTitles.elements();
while (rowTitlesEnumeration.hasMoreElements()){
WebTitle rowTitle = (WebTitle) rowTitlesEnumeration.nextElement();
try {
System.out.print(rowTitle.getWebTemplateUnit().getName());
} catch (WebObjectsException e) {
e.printStackTrace();
}
}
// Display column headers - names of template units placed in columns
WebGridRows gridRows=reportGrid.getGridRows();
WebGridHeaders columnHeaders=reportGrid.getColumnHeaders();
for (int i=0;i<columnHeaders.size();i++) {
for (int j=0;j<reportGrid.getRowTitles().size();j++) {
System.out.print("\t");
}
WebHeaders headers=columnHeaders.get(i);
for (int j=0;j<headers.size();j++) {
WebHeader header=headers.get(j);
System.out.print(header.getDisplayName()+"\t");
}
System.out.print("\n");
}
for (int i=0;i<gridRows.size();i++) {
WebRow row=gridRows.get(i);
WebHeaders rowHeaders=row.getHeaderElements();
for (int j=0;j<rowHeaders.size();j++) {
WebHeader header=rowHeaders.get(j);
System.out.print(header.getDisplayName()+"\t");
}
for (int j=0;j<row.size();j++) {
WebRowValue value=row.get(j);
value.getRawValue();
System.out.print(value.getValue());
}
System.out.print("\n");
}
System.out.print("\n");
}catch (Exception e) {
e.printStackTrace();
}
}
}