问题描述
在二次开发中,需要使用构建查询来实现业务需求。例如,查询Item ID,查询Project。
解决方案:
可以使用Saved Queries来实现大多数的需求,以下获取的结果在TC客户端表现形式如图所示:
GetSavedQueriesResponse savedQueries = queryService.getSavedQueries();
通过以下实例,可以举一反三。
获取指定的Project:
public TC_Project findProject(String project_id) {
ImanQuery query = null;
TC_Project project = null;
SavedQueryService queryService = SavedQueryService.getService(AppXSession.getConnection());
DataManagementService dmService = DataManagementService.getService(AppXSession.getConnection());
try {
GetSavedQueriesResponse savedQueries = queryService.getSavedQueries();
if (savedQueries.queries.length == 0) {
System.out.println("There are no saved queries in the system.");
return project;
}
for (int i = 0; i < savedQueries.queries.length; i++) {
if (savedQueries.queries[i].name.equals("Projects...")) {
query = savedQueries.queries[i].query;
break;
}
}
} catch (ServiceException e) {
System.out.println("GetSavedQueries service request failed.");
System.out.println(e.getMessage());
return project;
}
if (query == null) {
System.out.println("There is not an 'Projects...' query.");
return project;
}
try {
QueryInput savedQueryInput[] = new QueryInput[1];
savedQueryInput[0] = new QueryInput();
savedQueryInput[0].query = query;
savedQueryInput[0].entries = new String[1];
savedQueryInput[0].values = new String[1];
savedQueryInput[0].entries[0] = "Project ID";
savedQueryInput[0].values[0] = project_id;
savedQueryInput[0].maxNumToReturn = 25;
SavedQueriesResponse savedQueryResult = queryService.executeSavedQueries(savedQueryInput);
QueryResults found = savedQueryResult.arrayOfResults[0];
int length = found.objectUIDS.length;
String[] uids = new String[length];
for (int ii = 0; ii < length; ii++) {
uids[ii] = found.objectUIDS[ii];
}
ServiceData sd = dmService.loadObjects(uids);
ModelObject[] foundObjs = new ModelObject[sd.sizeOfPlainObjects()];
for (int k = 0; k < sd.sizeOfPlainObjects(); k++) {
foundObjs[k] = sd.getPlainObject(k);
}
project = (TC_Project) foundObjs[0];
} catch (Exception e) {
System.out.println("ExecuteSavedQuery service request failed.");
System.out.println(e.getMessage());
}
return project;
}