You first need to get a reference to the work item being saved as part of the operation:
Object data = operation.getOperationData();
if(data instanceof ISaveParameter) {
ISaveParameter saveParameter = (ISaveParameter) data;
IAuditable newState = saveParameter.getNewState();
if(newState instanceof IAuditable) {
IWorkItem workItemNewState = (IWorkItem) newState;
You then need to get a reference to the attribute(s) you want to update:
IWorkItemServer workItemServer = getService(IWorkItemServer.class);
IAttribute customAttribute =
workItemServer.findAttribute(workItemNewState.getProjectArea(), "customAttributeId", null);
You then need to get a working copy of the work item you want to update:
IWorkItem workingCopy = (IWorkItem) workItemNewState.getWorkingCopy();
Lastly you need to update the value of the attribute and save the working copy:
workingCopy.setValue(customAttribute, "my new value");
workItemServer.saveWorkItem2(workingCopy, null, null);
Full code looks like this:
public void run(AdvisableOperation operation, IProcessConfigurationElement participantConfig,
IParticipantInfoCollector collector, IProgressMonitor monitor) throws TeamRepositoryException {
Object data = operation.getOperationData();
if(data instanceof ISaveParameter) {
ISaveParameter saveParameter = (ISaveParameter) data;
IAuditable newState = saveParameter.getNewState();
if(newState instanceof IAuditable) {
IWorkItem workItemNewState = (IWorkItem) newState;
IWorkItem workingCopy = (IWorkItem) workItemNewState.getWorkingCopy();
IWorkItemServer workItemServer = getService(IWorkItemServer.class);
IAttribute customAttribute =
workItemServer.findAttribute(workItemNewState.getProjectArea(), "customAttribute", null);
workingCopy.setValue(customAttribute, "my new value");
workItemServer.saveWorkItem2(workingCopy, null, null);
}
}
}