08-04-2010 01:33 AM
08-06-2010 12:47 AM
Hi All,
I have an approval workflow having different approver groups for different spaces.
I want to know how can i get approver/s for a content which is under workflow in repository.
OR
Alternatively, how can i get number of approvals pending against each of approvers in repository?
Any help will be highly appreciated.
08-11-2010 01:39 AM
public void execute(WebScriptRequest request, WebScriptResponse response)
throws IOException {
logger.debug("Inside execute of WebServiceHelper");
//Searching for in progress reviewTasks in repository as xxxx Approval WF is using the same.
QName taskName = QName.createQName("http://www.alfresco.org/model/workflow/1.0", "reviewTask");
WorkflowTaskQuery workflowTaskQuery = new WorkflowTaskQuery();
workflowTaskQuery.setActive(true);
workflowTaskQuery.setTaskName(taskName);
workflowTaskQuery.setTaskState(WorkflowTaskState.IN_PROGRESS);
//Get List of such tasks using WF Service.
List<WorkflowTask> pendingTasks = getWorkflowService().queryTasks(workflowTaskQuery);
for(int i = 0; i < pendingTasks.size() ; i++ ){
WorkflowTask currPendingTask = pendingTasks.get(i);
//Get WorkflowDefinition name for each task in this list.
String currWfDefName = currPendingTask.path.instance.definition.name;
logger.debug("\n ******currWfDefName****** : "+currWfDefName);
//Checking if the task is for xxxx Approval WF only.
if(currWfDefName.equalsIgnoreCase("jbpm$KPDocsReview")){
//Get all properties for each currPendingTask.
Map<QName, Serializable> wfTaskPropertyMap = currPendingTask.properties;
Iterator wfItr = wfTaskPropertyMap.entrySet().iterator();
while(wfItr.hasNext()){
Map.Entry entry = (Entry) wfItr.next();
//Checking for pooledActors property of Alfresco WorkFlow model as it contains apoprver group.
//{http://www.alfresco.org/model/bpm/1.0}pooledActors
if(entry.getKey().toString().endsWith("pooledActors")){
ArrayList approverGrp = (ArrayList) entry.getValue();
if(approverGrp.size() > 0){
//Get NodeRef for Approver group.
NodeRef appGrpNodeRef = (NodeRef) approverGrp.get(0);
logger.debug("appGrpNodeRef value : "+appGrpNodeRef);
//Get all properties of an Approver group.
Map<QName, Serializable> appGrpPropertyMap = getNodeService().getProperties(appGrpNodeRef);
Iterator appGrpItr = appGrpPropertyMap.entrySet().iterator();
String appGrpAuthName = null;
while(appGrpItr.hasNext()){
Map.Entry appGrpEntry = (Entry) appGrpItr.next();
//Checking for authorityName property for each Approver group.
if(appGrpEntry.getKey().toString().endsWith("authorityName")){
appGrpAuthName = (String) appGrpEntry.getValue();
logger.debug("appGrpAuthName : "+appGrpAuthName);
}
}
//Checking for children for Approver group.
if((getNodeService().getChildAssocs(appGrpNodeRef)) != null && (getNodeService().getChildAssocs(appGrpNodeRef)).size() > 0){
//Get children for Approver group which are approvers.
ArrayList<ChildAssociationRef> children = (ArrayList) getNodeService().getChildAssocs(appGrpNodeRef);
logger.debug("No. of children : "+children.size());
if(children.size() > 0){
for(ChildAssociationRef childRef : children){
//Get NodeRef for a child.
NodeRef childNodeRef = childRef.getChildRef();
//Get all properties of a child in the group i.e. childNodeRef.
Map<QName, Serializable> childPropertyMap = getNodeService().getProperties(childNodeRef);
Iterator childGrpItr = childPropertyMap.entrySet().iterator();
while(childGrpItr.hasNext()){
Map.Entry appGrpEntry = (Entry) childGrpItr.next();
//Chekcing for owner property for a child approver.
//{http://www.alfresco.org/model/content/1.0}owner
if(appGrpEntry.getKey().toString().endsWith("owner")){
String approverName = (String) appGrpEntry.getValue();
logger.debug("approverName : "+approverName);
//Setting approver name in final list.
if(approverList.contains(approverName)){
//logger.debug("approverName "+approverName +" already added.");
}else{
approverList.add(approverName);
//logger.debug("New approverName added : "+approverName);
}
}
}
}
}
}else{
logger.debug("appGrpAuthName : "+appGrpAuthName +" does not have any child members");
}
}
}
}
}
}
for(String apprName : approverList){
logger.debug("Final approver list with pending approvals : "+apprName);
}
//Creating a json object & sending as reposnse.
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("approverList", approverList);
//Create a string from json object.
String jsonString = jsonObject.toString();
//Sending response back.
response.getWriter().write(jsonString);
} catch (JSONException e) {
logger.error("Error while setting approverList in jsonObject : "+e.getMessage());
e.printStackTrace();
}
}
Tags
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.