public without sharing class RetrieveApprovalRecordsController { //Wrapper class to store the column values of data table public class SubmittedRecordsWrapper{ @AuraEnabled public Id workItemId; @AuraEnabled public String recordId; @AuraEnabled public String relatedTo; @AuraEnabled public String recordName; @AuraEnabled public String nameUrl; @AuraEnabled public String submittedBy; @AuraEnabled public String submittercomment; @AuraEnabled public Date submittedDate; @AuraEnabled public String comments; } @AuraEnabled (cacheable=true) public static integer gettotalcount() { Integer icount = 0; //Add By Li Jun 20231026 Start //kk修改 // List piwList = new List([SELECT ID,ProcessInstanceId FROM ProcessInstanceWorkitem WHERE (OriginalActorId = : UserInfo.getUserId() and ActorId = null) OR ActorId = : UserInfo.getUserId()]); List piwList = new List([SELECT ID,ProcessInstanceId FROM ProcessInstanceWorkitem WHERE ActorId = : UserInfo.getUserId()]); Set piSet = new Set(); for(ProcessInstanceWorkitem piwi:piwList){ piSet.add(piwi.ProcessInstanceId); } //Add By Li Jun 20231026 Start for(ProcessInstance ps : [SELECT Id,TargetObjectId,TargetObject.Name,CreatedDate FROM ProcessInstance WHERE id in: piSet]){ icount++; } return icount; } @AuraEnabled public static List getSubmittedRecords(Integer queryLimit, Integer queryOffset){ system.debug('queryLimit'+queryLimit); system.debug('queryOffset'+queryOffset); List lstSubmissionWrapper = new List(); //Process instance stores the info of records submitted for approval, // Process instance work item are the records an approver sees while approving/rejecting, Process instance step stores approved/rejected record including approva;/rejection comments //Add By Li Jun 20231026 Start //DB202311350543 李文涛 修改 // List piwList = new List([SELECT ID,ProcessInstanceId FROM ProcessInstanceWorkitem WHERE (OriginalActorId = : UserInfo.getUserId() and ActorId = null) OR ActorId = : UserInfo.getUserId()]); List piwList = new List([SELECT ID,ProcessInstanceId FROM ProcessInstanceWorkitem WHERE ActorId = : UserInfo.getUserId()]); Set piSet = new Set(); for(ProcessInstanceWorkitem piwi:piwList){ piSet.add(piwi.ProcessInstanceId); } //Add By Li Jun 20231026 Start for(ProcessInstance ps : [SELECT Id,TargetObjectId,TargetObject.Name,CreatedDate, //DB202311350543 李文涛修改 // (SELECT ID FROM WorkItems WHERE (OriginalActorId = : UserInfo.getUserId() and ActorId = null) OR ActorId = : UserInfo.getUserId()), (SELECT ID FROM WorkItems WHERE ActorId = : UserInfo.getUserId()), (SELECT OriginalActor.Name,Comments FROM Steps WHERE StepStatus = 'Started') FROM ProcessInstance WHERE id in:piSet ORDER BY CreatedDate DESC LIMIT :queryLimit OFFSET :queryOffset]){ if(!ps.WorkItems.isEmpty()){ SubmittedRecordsWrapper objSubmittedRecordsWrapper = getSubmitRecord(ps); if(!ps.steps.isEmpty()){ objSubmittedRecordsWrapper.submittedBy = ps.steps[0].OriginalActor.Name; if(ps.steps[0].Comments == '' || ps.steps[0].Comments == null) objSubmittedRecordsWrapper.submittercomment = 'No comments from submitter'; else objSubmittedRecordsWrapper.submittercomment = ps.steps[0].Comments; lstSubmissionWrapper.add(objSubmittedRecordsWrapper); } } } system.debug(JSON.serialize(lstSubmissionWrapper)); return lstSubmissionWrapper; } public static SubmittedRecordsWrapper getSubmitRecord(ProcessInstance ps){ SubmittedRecordsWrapper objSubmittedRecordsWrapper = new SubmittedRecordsWrapper(); if(ps!=null && ps.WorkItems!=null && ps.WorkItems.size() > 0){ objSubmittedRecordsWrapper.workItemId = ps.WorkItems[0].Id; } objSubmittedRecordsWrapper.recordId = ps!=null && ps.TargetObjectId!=null?ps.TargetObjectId:null; objSubmittedRecordsWrapper.recordName = ps!=null && ps.TargetObject!=null ?ps.TargetObject.Name:''; if(ps!=null && ps.TargetObjectId!=null){ objSubmittedRecordsWrapper.nameUrl = '/lightning/r/'+ ps.TargetObjectId+'/view'; } objSubmittedRecordsWrapper.comments = ''; objSubmittedRecordsWrapper.relatedTo =getObjectName(ps.TargetObjectId); objSubmittedRecordsWrapper.submittedDate = ps!=null && ps.CreatedDate!=null? Date.newInstance(ps.CreatedDate.year(),ps.CreatedDate.month(),ps.CreatedDate.day()):Date.today(); return objSubmittedRecordsWrapper; } public static String getObjectName(String recordId){ //To get the label of the object name using Schema methods String keyPrefix = recordId.subString(0,3); String objectName = ''; Map sobjectTypeMap = Schema.getGlobalDescribe(); for(String obj : sobjectTypeMap.keySet()){ Schema.DescribeSObjectResult sobjectResult = sobjectTypeMap.get(obj).getDescribe(); String getKeyPrefix = sobjectResult.getKeyPrefix(); if(keyPrefix.equals(getKeyPrefix)){ objectName = sobjectResult.getLabel(); break; } } return objectName; } @AuraEnabled public static String processRecords(String processType,String strwraprecs){ // system.debug('processType'+processType); // system.debug('wraprecs'+strwraprecs); // List wraprecs = (List)System.JSON.deserialize(strwraprecs, List.class); // Map mapSubmittedRecordsWrapper = new map(); // List lstWorkItemIds = new List(); // for(SubmittedRecordsWrapper iwrap: wraprecs) // { // mapSubmittedRecordsWrapper.put(iwrap.workItemId,iwrap); // lstWorkItemIds.add(iwrap.workItemId); // } // //Approve,reject the record programmatically // String message = ''; // Integer recordsProcessed = 0; // String comments = processType == 'Approve' ? 'Approved' : 'Rejected'; // List lstWorkItemRequest = new List();//ProcessWorkitemRequest class has methods to programmatically process submitted records // for(String workItemId : lstWorkItemIds){ // Approval.ProcessWorkitemRequest objWorkItemRequest = new Approval.ProcessWorkitemRequest(); // if(mapSubmittedRecordsWrapper.containsKey(workItemId)) // objWorkItemRequest.setComments(mapSubmittedRecordsWrapper.get(workItemId).comments); // else // objWorkItemRequest.setComments(comments); // objWorkItemRequest.setAction(processType);//approve or reject // objWorkItemRequest.setWorkitemId(workItemId); // lstWorkItemRequest.add(objWorkItemRequest); // } // Approval.ProcessResult[] lstProcessResult = Approval.process(lstWorkItemRequest,FALSE);//process method is used for approving/rejecting records depending on setAction attribute // for(Approval.ProcessResult processResult : lstProcessResult){ // if(processResult.isSuccess()){ // recordsProcessed++; // } // else{ // for(Database.Error error : processResult.getErrors()){ // message += error.getMessage(); // } // } // } // if(recordsProcessed == lstWorkItemIds.size()){ // message = 'All records are '+comments+' successfully'; // } // return message; return 'success'; } }