How to retrieve a list of attachments of workitem
3 answers
How can I retrieve a list of attachments of a workitem
programmatically.
I know how to add an attachment but I don't know how to retrieve the
existing attachments of a existing workitem.
You would do it using the same IWorkItemReferences class used when adding
attachments:
IWorkItemReferences references= workingCopy.getReferences();
List<IReference> attachments=
references.getReferences(WorkItemEndPoints.ATTACHMENT);
for (IReference reference : attachments) {
IItemReference attachmentReference= (IItemReference) reference;
IAttachmentHandle attachmentHandle= (IAttachmentHandle)
attachmentReference.resolve();
}
--
Regards,
Patrick
Jazz Work Item Team
How can I retrieve a list of attachments of a workitem
programmatically.
I know how to add an attachment but I don't know how to retrieve the
existing attachments of a existing workitem.
You would do it using the same IWorkItemReferences class used when adding
attachments:
IWorkItemReferences references= workingCopy.getReferences();
List<IReference> attachments=
references.getReferences(WorkItemEndPoints.ATTACHMENT);
for (IReference reference : attachments) {
IItemReference attachmentReference= (IItemReference) reference;
IAttachmentHandle attachmentHandle= (IAttachmentHandle)
attachmentReference.resolve();
}
--
Regards,
Patrick
Jazz Work Item Team
Hi Patrick!
First of all thanks for your fast help.
Perhaps I should post my current code:
// Query the Jazz repository for list of workitems
auditableClient = (IAuditableClient) teamRepository
.getClientLibrary(IAuditableClient.class);
IQueryClient queryClient = (IQueryClient) teamRepository
.getClientLibrary(IQueryClient.class);
IQueryableAttribute attribute = QueryableAttributes.getFactory(
IWorkItem.ITEM_TYPE).findAttribute(projectArea,
IWorkItem.PROJECT_AREA_PROPERTY, auditableClient, null);
Expression expression = new AttributeExpression(attribute,
AttributeOperation.EQUALS, projectArea);
IQueryResult<IResolvedResult<IWorkItem>> results = queryClient
.getResolvedExpressionResults(projectArea, expression,
IWorkItem.FULL_PROFILE);
while (results.hasNext(null)) {
IResolvedResult<IWorkItem> resolved = results.next(null);
...
// Getting existing attachments...
IWorkItemWorkingCopyManager workingCopyManager = workItemClient.getWorkItemWorkingCopyManager();
IWorkItemHandle foundWorkItem = workItemClient.findWorkItemById(resolved.getItem().getId(), IWorkItem.FULL_PROFILE, null);
workingCopyManager.connect(foundWorkItem, IWorkItem.FULL_PROFILE, null);
WorkItemWorkingCopy workingCopy = workingCopyManager.getWorkingCopy(foundWorkItem);
IWorkItemReferences references = workingCopy.getReferences();
List<IReference> attachments = references
.getReferences(WorkItemEndPoints.ATTACHMENT);
for (IReference reference : attachments) {
IItemReference attachmentReference = (IItemReference) reference;
IAttachmentHandle attachmentHandle = (IAttachmentHandle) attachmentReference
.resolve();
}
}
But now I have some additional questions:
1. Why do I have to use a working copy of the workitem although I already have a reference to the workitem in my iteration?
2. How can I save the attachments to disk?
Do you have any idea? Thanks in advance!
Marcel.
2. How can I save the attachments to disk?
Once you have an "IAttachment" instance, you can use a "FileOutputStream" to save the attachment to your disk:
IAttachment attachment = ...
String pathname = ...
OutputStream outputStream = new FileOutputStream(pathname);
repo.contentManager().retrieveContent(attachment.getContent(), outputStream, null);
To retrieve the attachments of a work-item you need a "WorkItemWorkingCopy" instance from the "IWorkItem":
ITeamRepository repo = ...
IWorkItem wi = ...
IWorkItemClient wiClient = (IWorkItemClient) repo.getClientLibrary(IWorkItemClient.class);
IWorkItemWorkingCopyManager wcm = wiClient.getWorkItemWorkingCopyManager();
wcm.connect(wi, IWorkItem.FULL_PROFILE, null);
WorkItemWorkingCopy wiWorkingCopy = wcm.getWorkingCopy(wi);
IWorkItemReferences wiReferences = wiWorkingCopy.getReferences();
List<IReference> refList = wiReferences.getReferences(WorkItemEndPoints.ATTACHMENT);
for (IReference ref : refList) {
IItemReference itemRef = (IItemReference) ref;
IAttachmentHandle attH = (IAttachmentHandle) itemRef.resolve();
IAttachment att = (IAttachment) repo.itemManager().fetchCompleteItem(attH, IItemManager.DEFAULT, null);
// ...
}
Cheers.