Using the Strategy Java Web SDK 9.4, it is possible to perform filtered element browsing when requesting a list of elements from the Intelligence Server. For example, there might be several quarter attribute elements, but it may be only necessary to get the quarters for a specific year. In the following code sample, a static filter on year was previously created and used to filter the elements. To see how this can be accomplished, see the code sample below:
package customclasses.misc;
import java.util.Enumeration;
import com.Strategy.web.objects.WebAttribute;
import com.Strategy.web.objects.WebAttributeForm;
import com.Strategy.web.objects.WebAttributeForms;
import com.Strategy.web.objects.WebElementSource;
import com.Strategy.web.objects.WebElements;
import com.Strategy.web.objects.WebFilter;
import com.Strategy.web.objects.WebIServerSession;
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.webapi.EnumDSSXMLApplicationType;
import com.Strategy.webapi.EnumDSSXMLAuthModes;
import com.Strategy.webapi.EnumDSSXMLObjectTypes;
public class GetFilteredElements {
public static void main(String[] args) {
String uid = "administrator";
String pwd = "";
String SessionID = "";
// Create factory object.
WebObjectsFactory factory=WebObjectsFactory.getInstance();
WebIServerSession serverSession=factory.getIServerSession();
// Set properties on the session object
serverSession.setServerName("SERVERNAME");
serverSession.setServerPort(0);
serverSession.setProjectName("PROJECTNAME");
serverSession.setLogin(uid);
serverSession.setPassword(pwd);
serverSession.setAuthMode(EnumDSSXMLAuthModes.DssXmlAuthStandard);
serverSession.setApplicationType(EnumDSSXMLApplicationType.DssXmlApplicationDSSWeb);
try {
//Create a session on the I-server
SessionID = serverSession.getSessionID();
System.out.println("Welcome " + serverSession.getLogin());
System.out.println("SessionID: " + SessionID);
WebObjectInfo objInfo = null;
WebElementSource wes = null;
WebElements oElements = null;
WebObjectSource objectSource = null;
WebAttribute oAtt = null;
//filter Year 2009 ID: 2BD0AE1C4C43A8586E685884AB8F3FB8
//attribute Year ID: 8D679D5111D3E4981000E787EC6DE8A4
// attribute quarter id: 8D679D4A11D3E4981000E787EC6DE8A4
objectSource=serverSession.getFactory().getObjectSource();
wes = serverSession.getFactory().getElementSourceObject();
objInfo = objectSource.getObject("8D679D4A11D3E4981000E787EC6DE8A4",EnumDSSXMLObjectTypes.DssXmlTypeAttribute,true);
//get the forms in this attribute:
oAtt = (WebAttribute)objInfo;
WebAttributeForms oforms = oAtt.getTemplateForms();
WebAttributeForm form = null;
for (int x=0;x<oforms.size();x++){
form = oforms.get(x);
}
//set the object in the wes
wes.setObject(objInfo);
//set the filter on the wes object
WebObjectInfo filterInfo = objectSource.getObject("2BD0AE1C4C43A8586E685884AB8F3FB8",EnumDSSXMLObjectTypes.DssXmlTypeFilter,true);
WebFilter ofilter = (WebFilter)filterInfo;
wes.getFilter().getExpression().populate(ofilter.getExpression());
//then run wes.getElements(...)
oElements = wes.getElements();
Enumeration e = oElements.elements();
int i = 0;
while(e.hasMoreElements()){
i++;
e.nextElement();
}
}catch (WebObjectsException ex) {
ex.printStackTrace();
}
}
}
//It is also possible to build the expression on the fly; however, depending on the type of expressions required, extra overhead may be incurred. To programmatically build the expression instead, change the following line:
wes.getFilter().getExpression().populate(ofilter.getExpression());
//to this instead:
WebExpression exp = wes.getFilter().getExpression();
WebOperatorNode root = (WebOperatorNode) exp.getRootNode();
root.setExpressionType(EnumDSSXMLExpressionType.DssXmlFilterSingleBaseFormQual);
root.setFunction(EnumDSSXMLFunction.DssXmlFunctionEquals);
WebObjectInfo objYear = objectSource.getObject("8D679D5111D3E4981000E787EC6DE8A4",EnumDSSXMLObjectTypes.DssXmlTypeAttribute,true);
WebAttribute attYear = (WebAttribute)objYear;
WebAttributeForms attYearForms = attYear.getBrowseForms();
WebAttributeForm attYearForm = null;
for(int i=0;i<attYearForms.size();i++){
WebAttributeForm currentForm = attYearForms.get(i);
if(currentForm.getUseName().equalsIgnoreCase("ID")){
attYearForm = currentForm;
}
}
exp.createFormShortcutNode(attYear, attYearForm );
//second child is exp type
exp.createConstantNode("2009",EnumDSSXMLDataType.DssXmlDataTypeReal);