It's all about the answers!

Ask a question

How to get the workitems from iteration or how to filter out the workitems so that it belongs to a particular iteration?


Anirban Roy (1318) | asked Jun 14 '17, 2:19 a.m.

 i am able to fetch only 100 workitems but i am not able to fetch all the latest workitems..also i cannot get the contributors as well as target name.it always appears in the form of object.

i have used the below code:

IProcessItemService processItemService = (IProcessItemService)repository.getClientLibrary(IProcessItemService.class);
List<IProjectArea> projectArea = processItemService.findAllProjectAreas(null, null);
Iterator<IProjectArea> iter = projectArea.iterator();
IQueryResult<IResolvedResult<IWorkItem>> results;
IWorkItemClient workItemClient = (IWorkItemClient)repository.getClientLibrary(IWorkItemClient.class);
IQueryClient queryClient = workItemClient.getQueryClient();
IAuditableClient auditableClient = (IAuditableClient)repository.getClientLibrary(IAuditableClient.class);
while(iter.hasNext()){
IProjectArea area = (IProjectArea)iter.next();
IQueryableAttribute attribute = QueryableAttributes.getFactory(IWorkItem.ITEM_TYPE).findAttribute(area, IWorkItem.PROJECT_AREA_PROPERTY, auditableClient, null);
// Get the CurrentIeration 
Expression expression = new AttributeExpression(attribute, AttributeOperation.EQUALS, area);
int sizeLimit = 250;
//queryClient.getResolvedExpressionResults(area, expression, IWorkItem.FULL_PROFILE).setLimit(sizeLimit);
IQueryResult<IResolvedResult<IWorkItem>> results1 = queryClient.getResolvedExpressionResults(area, expression, IWorkItem.FULL_PROFILE);
/// UnResolved Items
results1.setLimit(Integer.MAX_VALUE);
//results.setLimit(Integer.MAX_VALUE);
List<IResolvedResult<IWorkItem>> page =  results1.nextPage(null);
results1.setPageSize(250);
Iterator<IResolvedResult<IWorkItem>> iterResult = page.iterator();
 
while(iterResult.hasNext()){
IResolvedResult<IWorkItem> resolvedResult = iterResult.next();
IWorkItem workItem = resolvedResult.getItem();
if(area.getName().equals("XXXX"))
{
System.out.println("Project Area: " + area.getName() + " ID: " + workItem.getId() + " Name: "                                 + workItem.getHTMLSummary() + "Description:" +workItem.getDuration());
System.out.println(workItem.getHTMLDescription()+ " Owner :"+workItem.getOwner());
IIterationHandle iterationHandle = workItem.getTarget();

/IContributorHandle ct=workItem.getOwner();
for (IIterationHandle handle :results1.){
IAttribute currentAttribute= (IAttribute) handle;
IContributor contributor = (IContributor) repository.itemManager() 
               .fetchCompleteItem(handle, IItemManager.DEFAULT, null); 
       String userID=contributor.getUserId(); }
/
        System.out.println(" WorkItem Target Area: " + workItem.getTarget());
       
List<?>history=
repository.itemManager().fetchAllStateHandles((IAuditableHandle)workItem.getStateHandle(), null);
if(history.size() == 0){
continue;
}
}
else
{
break;
}


can u citte me what am i doing wrong.Also i cannot resize the results.
Please help me.

One answer



permanent link
Ralph Schoon (63.1k33645) | answered Jun 14 '17, 8:54 a.m.
FORUM ADMINISTRATOR / FORUM MODERATOR / JAZZ DEVELOPER

This is how the expression would look like:

        URI uri = URI.create(projectAreaName.replaceAll(" ", "%20"));
        IProjectArea projectArea = (IProjectArea) processClient
                .findProcessArea(uri, null, null);
        if (projectArea == null) {
            System.out.println("Project area not found.");
            return false;
        }

    IAuditableCommon auditableCommon = (IAuditableCommon) teamRepository
            .getClientLibrary(IAuditableCommon.class);

    DevelopmentLineHelper devLineHelper = new DevelopmentLineHelper(teamRepository, monitor);
    IIteration targetIteration = devLineHelper.findIteration(projectArea, Arrays.asList(iteration.split("/")), DevelopmentLineHelper.BYLABEL);

    IQueryableAttribute attribute = QueryableAttributes.getFactory(
            IWorkItem.ITEM_TYPE).findAttribute(projectArea,
            IWorkItem.PROJECT_AREA_PROPERTY, auditableCommon, monitor);
    Expression inProjectArea = new AttributeExpression(attribute,
            AttributeOperation.EQUALS, projectArea);
    IQueryableAttribute plannedFor = QueryableAttributes.getFactory(
            IWorkItem.ITEM_TYPE).findAttribute(projectArea,
            IWorkItem.TARGET_PROPERTY, auditableCommon, monitor);
    Expression isPlannedFor = new AttributeExpression(plannedFor,
            AttributeOperation.EQUALS, targetIteration);

    Term typeinProjectArea = new Term(Term.Operator.AND);
    typeinProjectArea.add(inProjectArea);
    typeinProjectArea.add(isPlannedFor);

the development line helper to find an iteration from a string representation encoded as path relative to the timeline like e.g. "Main Development/Release 1.0/Sprint 2" can be found in https://rsjazz.wordpress.com/2015/06/11/creating-plans-with-the-plain-java-client-api/ or the work item command line on said blog.

Your answer


Register or to post your answer.