Rahul Agrawal [https://community.jboss.org/people/rahulamt] created the discussion
"Re: NodeInstanceLog and Human Tasks relationship"
To view the discussion, visit: https://community.jboss.org/message/799833#799833
--------------------------------------------------------------
I tried to implement it in the following way.
It works fine.
List<NodeInstanceLog> nodeInstancesList = dbLog.findNodeInstances(processInstanceId);
                   List<HistoryRecord> objLstHistoryList = new ArrayList<HistoryRecord>();
                   Map<String, NodeInstanceLog> nodeInstances = new HashMap<String, NodeInstanceLog>();
                   for (NodeInstanceLog nodeInstance : nodeInstancesList) {
                             if (nodeInstance.getType() == NodeInstanceLog.TYPE_ENTER) {
                                       nodeInstances.put(nodeInstance.getNodeInstanceId(),
                                                           nodeInstance);
                             } else {
                                       NodeInstanceLog enterLog = nodeInstances.get(nodeInstance.getNodeInstanceId());
                                       HistoryRecord objHistoryRecord = null;
                                       objHistoryRecord = new HistoryRecord();
                                       objHistoryRecord.setId(enterLog.getId());
                                       objHistoryRecord.setStrNodeName(enterLog.getNodeName());
                                       objHistoryRecord.setStrActedTime(nodeInstance.getDate().toString());
                                       objHistoryRecord.setStrComment("Approved");
                                       long lOrgDiff = nodeInstance.getDate().getTime() - enterLog.getDate().getTime() ;
                                       long lDiff = 0;
                                       lDiff = lOrgDiff / (60*60*1000);
                                       if(lDiff == 0)
                                       {
                                                 lDiff = lOrgDiff / (60*1000);
                                                 if (lDiff ==0 )
                                                 {
                                                           lDiff = lOrgDiff / 1000;
                                                           if(lDiff == 0)
                                                           {
                                                                     objHistoryRecord.setStrDuration (lOrgDiff + " milisec.");
                                                           }
                                                           else
                                                                     objHistoryRecord.setStrDuration (lDiff + " sec.");
                                                 }
                                                 else
                                                 {
                                                           objHistoryRecord.setStrDuration (lDiff + " min.");
                                                 }
                                       } else if(lDiff >= 24)
                                       {
                                                 lDiff = lOrgDiff / (24*60*60*1000);
                                                 objHistoryRecord.setStrDuration ( lDiff + " days.");
                                       }
                                       else
                                       {
                                                 objHistoryRecord.setStrDuration (lDiff + " hrs.");        Â
                                       }
                                       //Use the enterLog and nodeInstance object to get the duration field
                                       objLstHistoryList.add(objHistoryRecord);
                                       nodeInstances.remove(nodeInstance.getNodeInstanceId());
                             }
                   }
                   EntityManagerFactory emf = getEntityManagerFactory(processName);
                   EntityManager em = emf.createEntityManager();
                   Query resultQuery = em.createQuery("SELECT t.taskData.actualOwner FROM NodeInstanceLog n ,org.jbpm.task.Task t left join t.names as i "+
                                       "WHERE n.id = :nodeinstanceid AND " +
                                       " n.nodeName = i.text AND " +
                                       "n.processInstanceId = t.taskData.processInstanceId AND " +
                                       "t.taskData.status = 'Completed'");
                   java.util.Iterator<HistoryRecord> lstIterator = objLstHistoryList.iterator();
                   while(lstIterator.hasNext())
                   {
                             try{
                                       HistoryRecord hstryObj = lstIterator.next();
                                       User user = (User)resultQuery.setParameter("nodeinstanceid", hstryObj.getId()).getSingleResult();
                                       hstryObj.setStrActedBy(user.getId());
                             }
                             catch (Exception e) {
                                                 // TODO: handle exception
                             }
                   }
                   return objLstHistoryList;
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/799833#799833]
Start a new discussion in jBPM at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034]