Exploring ThingWorx for Completing Work Item tasks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
Exploring ThingWorx for Completing Work Item tasks
I am exploring option to complete work item using a Java or Inforengine tasks. Thingworx has out of the box CompleteWorkItems service. It does not take Voting ( Approve / Reject) as an input parameter. So I am wondering if anyone has explored completing the workitem with a Vote option in WIndchill.
Thanks for your help.
Preeti
- Labels:
-
Other
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
Hi Preeti,
In Windchill there are few API's but unsupported to complete the task with voting:
wt.workflow.work.WorkflowHelper.service.workComplete
wt.workflow.engine.WfEventHelper.createVotingEvent
Regards,
Bhushan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
thanks again Bhushan. I could complete the task using above workComplete method. The workflow moves forward to next activity depending on the routing choices.
I haven't got success yet for creating Voting event.
🙂
Preeti
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
This works Bhushan.
wt.workflow.engine.WfEventHelper.createVotingEvent
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
Hi Preeti,
i am also trying to complete Workflow activity and setting vote using below methods. Activity is getting completed. Voting event is set but process is not moving ahead to next activity as per the vote. Can you please add some light to this? do i need to have any additional method call?
WorkflowHelper.service.workComplete(workItem, principalRef, events);
WfEventHelper.createVotingEvent(null, wfActivity, workItem, principalRef, comment, events, isSigned, workItem.isRequired());
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
The following method works for me when called from an expression robot.
/** * * @param self * @param activityPartialName */ public static void completeAssignedActivity(wt.fc.ObjectReference self , String activityPartialName) { wt.workflow.engine.WfProcess wfProcess = (wt.workflow.engine.WfProcess) self.getObject(); wt.fc.QueryResult queryResult = new wt.fc.QueryResult(); try { queryResult = wfProcess.getContainerNodes(); } catch (wt.util.WTException ex) { System.out.println(ex); } while (queryResult.hasMoreElements()) { java.lang.Object obj = queryResult.nextElement(); if (obj instanceof wt.workflow.work.WfAssignedActivity) { wt.workflow.work.WfAssignedActivity wfAssignedActivity = (wt.workflow.work.WfAssignedActivity) obj; try { if (!wfAssignedActivity.isComplete()) { java.lang.String currentActivityName = wfAssignedActivity.getName(); if (currentActivityName.contains(activityPartialName)) { @SuppressWarnings("UseOfObsoleteCollectionType") java.util.Vector<String> v = new java.util.Vector<>(); v.addElement("<vote_name>"); // route with same name is required to be defined in the task wt.workflow.engine.WfEngineHelper.service.complete(wfAssignedActivity, v); System.out.println("Completed activity name: " + currentActivityName); } } } catch (wt.util.WTException ex) { System.out.println(ex); } } } }
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
Hi @pjoshi-2
In the workflow, there should be a code that solve the voting and go forward the process to the right routing.
A Vote and a route are two different things. Check example in the Promotion Request process where the code is used to chose right route.
PetrH
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
Thanks @BhushanNehe & @PreetiGupta
This post really helped me with the workitems task completion.
But I am unable to save the comments that I am passing from Thingworx to the windchill service.
The task completes with the appropriate Routing choice selected but on visiting the completed task from Windchill, cannot see the comments, so basically I am looking for a way to persist the comments when completing task
As of now I have used the below approach that is clearly not working for me (setting the comments to the activity process). Not sure is this is the right way. Any clue/suggestions will be appreciated. Please help
ProcessData data = activity.getContext();
data.setTaskComments("<Comments>"); // setting the updated comments
activity.setContext(data);
Thanks!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
DId you ever find a way to do this? I'm also trying to set the task comments in code and can't get it to work
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
The following method works great for me.
/**
*
* @param wItem
* @param comment
*/
public static boolean setComment(WorkItem wItem, String comment) {
boolean failed = false;
ProcessData wItemContext = wItem.getContext();
Transaction trx = null;
try {
trx = new Transaction();
trx.start();
if (wItemContext == null) {
WfAssignedActivity wfAssignedActivity = (WfAssignedActivity) wItem.getSource().getObject();
ProcessData activityContext = wfAssignedActivity.getContext();
wItemContext = activityContext.copy();
}
if (comment == null) {
comment = "";
}
wItemContext.setTaskComments(comment);
wItem.setContext(wItemContext);
PersistenceHelper.manager.save(wItem);
trx.commit();
trx = null;
} catch (Exception e) {
System.out.println("Exception\n" + e);
} finally {
if (trx != null) {
trx.rollback();
failed = true;
System.out.println("Failed to update the comment");
}
}
return failed;
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
HI James,
Your code works for setting the comments which you can see within the Windchill PDMLink and they will propogate when completing the task through the Windchill interface. But if you complete the task from code using a line like
WorkflowHelper.service.workComplete(workitem, wt.org.WTPrincipalReference.newWTPrincipalReference(wt.session.SessionHelper.getPrincipal()), events);
the comments are not persisted and basically disappear. This is what sbegum-2 is also saying.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
Hello All,
You need to do something like below
WorkItem workItem = ...;
Vector events = new Vector();
// add routing if applicable
// events.addElement("Reject");
WorkflowHelper.service.workComplete(workItem, workItem.getOwnership().getOwner(), events);
// -- start create Voting Event
WTPrincipalReference principalRef= WTPrincipalReference.newWTPrincipalReference(SessionHelper.manager.getPrincipal());
WfActivity myActivity = (WfActivity) workItem.getSource().getObject();
WfAssignedActivityTemplate wfAssignedActivityTemplate=(WfAssignedActivityTemplate) myActivity.getTemplateReference().getObject();
boolean isSigned=wfAssignedActivityTemplate.isSigningRequired();
String comment = "my_comment";
//unsupported API
WfEventHelper.createVotingEvent(null, myActivity, workItem, principalRef, comment, events, isSigned, workItem.isRequired());
// -- end create Voting Event
Also check this Article : https://www.ptc.com/en/support/article/cs234435
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
Thanks Srinivas. Worked like a charm. Great work.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Notify Moderator
Your code works perfectly when you execute using Admin login.. but it wont work if you try to execute with non-admin login.. For non admins.. we have to use below code.
WorkItem workItem = ...;
Vector events = new Vector();
// add routing if applicable
// events.addElement("Reject");
WorkflowHelper.service.workComplete(workItem, workItem.getOwnership().getOwner(), events);
// -- start create Voting Event
WTPrincipalReference principalRef= WTPrincipalReference.newWTPrincipalReference(SessionHelper.manager.getPrincipal());
WfActivity myActivity = (WfActivity) workItem.getSource().getObject();
WfAssignedActivityTemplate wfAssignedActivityTemplate=(WfAssignedActivityTemplate) myActivity.getTemplateReference().getObject();
boolean isSigned=wfAssignedActivityTemplate.isSigningRequired();
String comment = "my_comment";
//unsupported API
boolean accessEnforced = false;
try {
accessEnforced = SessionServerHelper.manager.setAccessEnforced(false);
WfEventHelper.createVotingEvent(null, myActivity, workItem, principalRef, comment, events, isSigned, workItem.isRequired());
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug(e.getLocalizedMessage(), e);
}
throw e;
} finally {
SessionServerHelper.manager.setAccessEnforced(accessEnforced);
}
// -- end create Voting Event
Thanks
Shyam.
