cancel
Showing results for 
Search instead for 
Did you mean: 

How to get approver for a content?

dynamolalit
Champ on-the-rise
Champ on-the-rise
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.
2 REPLIES 2

dynamolalit
Champ on-the-rise
Champ on-the-rise
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.


Any idea from anybody here??????

dynamolalit
Champ on-the-rise
Champ on-the-rise
Hi All,

I have implemented a web script to get list of all approvers who are having any pending approvals for a particular workflow definition inside repository.It works on basis of groups which are having approvers in it.

It checks for all in progress tasks for a particular workflow & get {http://www.alfresco.org/model/bpm/1.0}pooledActors for each of such task & then get noderef for each such approver group & finally get all children in each of such group which are none but users who are approvers for this group & get each approver's user name & send it back as json object.


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();
      }   
   }