Jazz Forum Welcome to the Jazz Community Forum Connect and collaborate with IBM Engineering experts and users

How to retrieve a list of attachments of workitem

Hi!

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.

Thanks!
Marcel.

0 votes



3 answers

Permanent link
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

0 votes


Permanent link
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.

0 votes


Permanent link
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.

0 votes

Your answer

Register or log in to post your answer.

Dashboards and work items are no longer publicly available, so some links may be invalid. We now provide similar information through other means. Learn more here.

Search context
Follow this question

By Email: 

Once you sign in you will be able to subscribe for any updates here.

By RSS:

Answers
Answers and Comments
Question details
× 10,952

Question asked: Jun 02 '09, 6:45 a.m.

Question was seen: 5,781 times

Last updated: Jun 02 '09, 6:45 a.m.

Confirmation Cancel Confirm