How to fetch the Workitem (built-in / Custom) Attribute Id and Value?
3 answers
com.ibm.team.workitem.common.model.IAttributeHandle handle = workItem.getCustomAttributes().get(0); com.ibm.team.workitem.common.model.IAttribute attribute = (IAttribute) teamRepository.itemManager().fetchCompleteItem(handle, IItemManager.DEFAULT, new NullProgressMonitor()); System.out.println("The attribute id: " + attribute.getIdentifier()); System.out.println("The value of the custom attribute: " + workItem.getValue(attribute));
Comments
Lauren , Thanks for your reply, But i could not resolve below a) "teamRepository" b) IItemManager c) NullProgressMonitor
PLease guide ?
Hi Anil,
a) How you get the team repository depends on the context--if you're using the existing UI or if you're using a plain Java client. The following wiki page contains examples on finding the team repository: https://jazz.net/wiki/bin/view/Main/ProgrammaticWorkItemCreation.
b) The ItemManager can be imported from com.ibm.team.repository.client.IItemManager.
c) The NullProgressMonitor can be imported from org.eclipse.core.runtime.NullProgressMonitor.
ITeamRepository is a ClientSide interface . Since iam writing code in server side , i have difficulty.
Please send me some sample code to access the Attribute id and Value from Server side
I haven't tried this myself, but I believe the following code snippet taken from https://jazz.net/forum/questions/87541/getting-custom-attributes-names-via-java-api?page=1&focusedAnswerId=87543#87543 should work for you:
IAttributeHandle handle = workItem.getCustomAttributes().get(0); IRepositoryItemService itemService = getService(IRepositoryItemService.class); IAttribute attribute = (IAttribute) itemService.fetchItem(handle, IRepositoryItemService.COMPLETE);
// reference the right object type (cast)
IWorkItem workItem = (IWorkItem) auditable;
// get the worker objects
IAuditableCommon iac = p.getSaveOperationParameter().getAuditableCommon();
WorkflowManager wfm = new WorkflowManager(iac);
if(false)
{
IWorkItemCommon workItemCommon = iac.getPeer(IWorkItemCommon.class);
// loop thru all the attributes in the project
// attributes are project wide, not workitem specific
for(IAttribute ia:workItemCommon.findAttributes(p.getOldProcessArea().getProjectArea(), monitor) )
{
// if this attribute is available on this workitem
if(workItem.hasAttribute(ia))
{
System.out.println("processing for variable="+ia.getDisplayName()+" attrib type="+ia.getAttributeType());
try
{
// attempt to get the enumeration literal for this attribute
// will throw exception if not an enum
IEnumeration<ILiteral> enumeration = (IEnumeration<ILiteral>)workItemCommon.resolveEnumeration(ia, monitor);
if(enumeration!=null)
{
// get the literal specifically
String[] iaval = ia.getValue(iac, workItem, monitor).toString().split(":");
// if present
if(iaval.length>1 && iaval[1]!=null)
{
// loop thru the literal to value mappings
for (ILiteral literal : enumeration.getEnumerationLiterals())
{
// if this literal matches the attribute value
if(literal.getIdentifier2().getStringIdentifier().equalsIgnoreCase(iaval[1]))
{
// display the usable name
System.out.println("attribute name="+ia.getIdentifier() +", type"+"="+ia.getAttributeType()+" literal="+literal.getIdentifier2().getStringIdentifier()+" literal name="+literal.getName());
break;
}
}
}
}
}
catch (Exception e)
{
//System.out.println("Exception="+e.toString());
}
}
}
}
Lauren, I replicated the same code above , IT DOESN'T WORKED. Any Sugg ?
com.ibm.team.workitem.common.model.IAttributeHandle handle = sourceworkItem.getCustomAttributes().get(0);
IRepositoryItemService itemService = getService(IRepositoryItemService.
class);
IAttribute attribute = (IAttribute) itemService.fetchItem(handle, IRepositoryItemService.
COMPLETE);
System.out.println (" Get Cust Attribute Display Name :" + attribute.getDisplayName());
System.out.println (" Get Cust Attribute Type :" + attribute.getAttributeType());