Java example --recursive queries
private static final String EMPLOYEE_FORM = "Employee";
private static final int EMP_EMPLOYEE_NAME = 536870913;
private static final int EMP_EMPLOYEE_ID = 536870914;
private static final int EMP_MANAGER_ID = 536870915;
private static final int EMP_MANAGER_ID = 536870915;
private void queryOnEmployeeForm(ARServerUser arConnection) throws ARException
{
// Create recursive query part first.
RecursiveQuery recursive = new RecursiveQuery();
// Add Employee form as the source. Since there is only
// one source you do not need to specify recursive source with
// the setRecursiveForm method.
QuerySourceForm employeeForm = new QuerySourceForm(EMPLOYEE_FORM);
recursive.addFromSource(employeeForm);
// The following fields are included in the results of the recursion.
recursive.addFromField(EMP_EMPLOYEE_NAME, employeeForm);
recursive.addFromField(EMP_EMPLOYEE_ID, employeeForm);
recursive.addFromField(EMP_MANAGER_ID, employeeForm);
// Create the starting qualifier.
ArithmeticOrRelationalOperand startFieldOp =
new ArithmeticOrRelationalOperand(EMP_EMPLOYEE_NAME, employeeForm);
ArithmeticOrRelationalOperand startValueOp =
new ArithmeticOrRelationalOperand(new Value("Bob Jones"));
RelationalOperationInfo startRelOp =
new RelationalOperationInfo(RelationalOperationInfo.AR_REL_OP_EQUAL,
startFieldOp, startValueOp);
QualifierInfo startQual = new QualifierInfo(startRelOp);
recursive.setQualifier(startQual);
// Create the recursion qualifier.
ArithmeticOrRelationalOperand recurseField1 =
new ArithmeticOrRelationalOperand(EMP_MANAGER_ID, employeeForm);
ArithmeticOrRelationalOperand recurseField2 =
new ArithmeticOrRelationalOperand(EMP_EMPLOYEE_ID, recursive);
RelationalOperationInfo recurseRelOp =
new RelationalOperationInfo(RelationalOperationInfo.AR_REL_OP_EQUAL,
recurseField1, recurseField2);
QualifierInfo recurseQual = new QualifierInfo(recurseRelOp);
recursive.setRecursionQualifier(recurseQual);
// Specify the number of levels in the hierarchy to retrieve.
// Specify 3 to retrieve 2 levels below the parent level.
// (The parent level is identified by the starting qualifier.)
recursive.setLevelsToRetrieve(3);
// Create regular query.
RegularQuery query = new RegularQuery();
// Add recursive query as source.
query.addFromSource(recursive);
// Add the fields from the recursive query as the return field
// in the regular query.
query.addFromField(EMP_EMPLOYEE_NAME, recursive);
query.addFromField(EMP_EMPLOYEE_ID, recursive);
query.addFromField(EMP_MANAGER_ID, recursive);
// Call routine.
List<QuerySourceValues> results =
arConnection.getListEntryObjects(query, 0, 0, false, null);
}
private static final int EMP_EMPLOYEE_NAME = 536870913;
private static final int EMP_EMPLOYEE_ID = 536870914;
private static final int EMP_MANAGER_ID = 536870915;
private static final int EMP_MANAGER_ID = 536870915;
private void queryOnEmployeeForm(ARServerUser arConnection) throws ARException
{
// Create recursive query part first.
RecursiveQuery recursive = new RecursiveQuery();
// Add Employee form as the source. Since there is only
// one source you do not need to specify recursive source with
// the setRecursiveForm method.
QuerySourceForm employeeForm = new QuerySourceForm(EMPLOYEE_FORM);
recursive.addFromSource(employeeForm);
// The following fields are included in the results of the recursion.
recursive.addFromField(EMP_EMPLOYEE_NAME, employeeForm);
recursive.addFromField(EMP_EMPLOYEE_ID, employeeForm);
recursive.addFromField(EMP_MANAGER_ID, employeeForm);
// Create the starting qualifier.
ArithmeticOrRelationalOperand startFieldOp =
new ArithmeticOrRelationalOperand(EMP_EMPLOYEE_NAME, employeeForm);
ArithmeticOrRelationalOperand startValueOp =
new ArithmeticOrRelationalOperand(new Value("Bob Jones"));
RelationalOperationInfo startRelOp =
new RelationalOperationInfo(RelationalOperationInfo.AR_REL_OP_EQUAL,
startFieldOp, startValueOp);
QualifierInfo startQual = new QualifierInfo(startRelOp);
recursive.setQualifier(startQual);
// Create the recursion qualifier.
ArithmeticOrRelationalOperand recurseField1 =
new ArithmeticOrRelationalOperand(EMP_MANAGER_ID, employeeForm);
ArithmeticOrRelationalOperand recurseField2 =
new ArithmeticOrRelationalOperand(EMP_EMPLOYEE_ID, recursive);
RelationalOperationInfo recurseRelOp =
new RelationalOperationInfo(RelationalOperationInfo.AR_REL_OP_EQUAL,
recurseField1, recurseField2);
QualifierInfo recurseQual = new QualifierInfo(recurseRelOp);
recursive.setRecursionQualifier(recurseQual);
// Specify the number of levels in the hierarchy to retrieve.
// Specify 3 to retrieve 2 levels below the parent level.
// (The parent level is identified by the starting qualifier.)
recursive.setLevelsToRetrieve(3);
// Create regular query.
RegularQuery query = new RegularQuery();
// Add recursive query as source.
query.addFromSource(recursive);
// Add the fields from the recursive query as the return field
// in the regular query.
query.addFromField(EMP_EMPLOYEE_NAME, recursive);
query.addFromField(EMP_EMPLOYEE_ID, recursive);
query.addFromField(EMP_MANAGER_ID, recursive);
// Call routine.
List<QuerySourceValues> results =
arConnection.getListEntryObjects(query, 0, 0, false, null);
}
Tip: For faster searching, add an asterisk to the end of your partial query. Example: cert*