Sunday 25 September 2016

testclass for approval

@isTest
public class BatchSendEmailAlerts8Test{
    public static testMethod void method1(){
        List<Apply_Job__c> applyLst = new List<Apply_Job__c>();
   
        Apply_Job__c apply = new Apply_Job__c();
        apply.Status__c = 'Pending Approval';
        apply.Qualification__c='B.pham';
        apply.Next_Alert_Schduled_Date__c = system.today();
        insert apply;
        applyLst.add(apply);
       
        Apply_Job__c apply1 = new Apply_Job__c();
        apply1.Status__c = 'Pending Approval';
         apply1.Qualification__c='B.pham';
        apply1.Next_Alert_Schduled_Date__c= system.today();
        insert apply1;
        applyLst.add(apply1);
       
        Apply_Job__c apply2 = new Apply_Job__c();
        apply2.Status__c = 'Pending Approval';
         apply2.Qualification__c='B.pham';
        apply2.Next_Alert_Schduled_Date__c= system.today();
        insert apply2;
        applyLst.add(apply2);
       
     try {  

    for(Apply_Job__c a: applyLst) {

     // Create an approval for the account and submit
     Approval.ProcessSubmitRequest AccountRequest = new Approval.ProcessSubmitRequest();
     AccountRequest.setObjectId(a.ID);
     Approval.ProcessResult AccountRequestResult = Approval.Process(AccountRequest);
     ProcessInstanceWorkitem pworkItem = new ProcessInstanceWorkitem();
    pworkItem.ActorId = userinfo.getuserId();
    pworkItem.OriginalActorId = userinfo.getuserId();
    pworkItem.ProcessInstanceId = AccountRequestResult.ID;
     insert pworkItem;
     System.assert(AccountRequestResult.isSuccess());  
     
    } // loop thru accounts submitting them for approval
   
   } catch (DMLException e) {
    system.debug('>>>> NO APPROVAL PROCESS FOR ACCOUNTS!');
   }
 
       
        BatchSendEmailAlerts8 batch = new BatchSendEmailAlerts8();
        Test.StartTest();
        Database.executeBatch(batch);
        Test.StopTest();
       

   
    }


}



++++++++++++++++++++++++++++++
ProcessInstance proc = new ProcessInstance();
proc.LastActorId = userinfo.getuserid();
proc.TargetObjectId = apply.id;//applyjob record id
insert proc;

ProcessInstanceWorkitem pworkItem = new ProcessInstanceWorkitem();
pworkItem.ActorId = userinfo.getuserId();
pworkItem.OriginalActorId = userinfo.getuserId();
pworkItem.ProcessInstanceId = proc.id;
insert pworkItem;



@isTest
public class BatchSendEmailAlerts8Test{
    public static testMethod void method1(){
        List<Apply_Job__c> applyLst = new List<Apply_Job__c>();
set<Id> applyIds = new set<Id>();
   
        Apply_Job__c apply = new Apply_Job__c();
        apply.Status__c = 'Pending Approval';
        apply.Qualification__c='B.pham';
        apply.Next_Alert_Schduled_Date__c = system.today();
        insert apply;
        applyLst.add(apply);
       
        Apply_Job__c apply1 = new Apply_Job__c();
        apply1.Status__c = 'Pending Approval';
         apply1.Qualification__c='B.pham';
        apply1.Next_Alert_Schduled_Date__c= system.today();
        insert apply1;
        applyLst.add(apply1);
       
        Apply_Job__c apply2 = new Apply_Job__c();
        apply2.Status__c = 'Pending Approval';
        apply2.Qualification__c='B.pham';
        apply2.Next_Alert_Schduled_Date__c= system.today();
        insert apply2;
        applyLst.add(apply2);

for(Apply_Job__c apps:applyLst)
{
applyIds.add(apps.id);
}

    ProcessInstance proc = new ProcessInstance();
proc.LastActorId = userinfo.getuserid();
proc.TargetObjectId = apply.id;//applyjob record id
insert proc;
system.debug('processInstance record inerted----'+proc.id);

ProcessInstanceWorkitem pworkItem = new ProcessInstanceWorkitem();
pworkItem.ActorId = userinfo.getuserId();
pworkItem.OriginalActorId = userinfo.getuserId();
pworkItem.ProcessInstanceId = proc.id;
insert pworkItem;
system.debug('processInstancework item record inerted----'+pworkItem.id);

List<ProcessInstanceWorkitem> pworkLst = [select id,ActorId,ProcessInstanceId,actor.email,ProcessInstance.TargetObjectId from ProcessInstanceWorkitem where ProcessInstance.TargetObjectId in: applyIds];
system.debug('pworkLst is ---------'+pworkLst.size());

BatchSendEmailAlerts8 batch = new BatchSendEmailAlerts8();
Test.StartTest();
Database.EexecuteBatch(batch);
Test.StopTest();
}
}


       
http://salesforce.stackexchange.com/questions/17981/processinstanceworkitems-not-created-when-running-an-approval-process-unit-test

Thursday 15 September 2016

Schedule with batch


/***create two backend fields on Object(below sampple code is written on Opportunity Object, so create two fields on Opportunity)
Field1---> Date Field ----> Next Alert Schduled Date
Field2---> Picklist Field--> Approval Status with Options "In Progress, Approved, Rejected"
Update both the fields once record is submitted for Approval using "Initial Submission Actions" as below
Field1 = System.today()+3;
Field2 = In Progress;
****/
global class BatchSendEmailAlerts implements  Database.Batchable<SObject> 
{
 Public String status = 'In Progress';
 public List<Opportunity> opptyUpdateList = new List<Opportunity>();
 Public String Query='select Id,Name,StageName,closedate from Opportunity where Approval_status__c ='+status+' and Next_Alert_Schduled_Date__c=today' ;
 global database.querylocator start(Database.BatchableContext BC)
 {
    return Database.getQueryLocator(query);
 }
 global void execute(Database.BatchableContext BC, LIST<SObject> listOppty)
 {
system.debug('~~~~~~~~~~~~opptylist'+listOppty);
List<Messaging.SingleEmailMessage> lstMsgsToSend = new List<Messaging.SingleEmailMessage>();
for(Opportunity opptyRec: listOppty)
{
 List<Messaging.SingleEmailMessage> emails = new List<Messaging.SingleEmailMessage>();
     String subject = ' ';
     Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
     email.setOrgWideEmailAddressId(Label.Orgwide_Email_Address_Id); /*add your org wide email address*/
     email.setSubject(subject);
     String sHtmlBody1='<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><style>p{margin-top:0px; margin-bottom:0px;}</style><body style=" background-color:#CCCCCC; bLabel:body; bEditID:b1st1;"><center><table id="topTable" height="450" width="550" cellpadding="0" cellspacing="0"><tr valign="top"><td style=" vertical-align:top; height:100; text-align:left; background-color:#FFFFFF; bLabel:header; bEditID:r1st1;"><img id="r1sp1" bLabel="headerImage" border="0" bEditID="r1sp1" src="https://c.na11.content.force.com/servlet/servlet.ImageServer?id=01500000000UV9K&amp;oid=00D00000000heDI" alt="Truven Health Analytics" height="95" width="630"><!-- </img> --></td></tr><tr valign="top"><td style=" height:5; background-color:#FFFFFF; bLabel:accent1; bEditID:r2st1;"></td></tr><tr valign="top"><td styleInsert="1" height="300" style=" color:#000000; font-size:12pt; background-color:#FFFFFF; font-family:arial; bLabel:main; bEditID:r3st1;"><table height="400" width="650" cellpadding="5" border="0" cellspacing="5"><tr height="400" valign="top"><td style=" color:#000000; font-size:12pt; background-color:#FFFFFF; font-family:arial; bLabel:main; bEditID:r3st1;" tEditID="c1r1" aEditID="c1r1" locked="0">';
     String sHtmlBody2='<br/><br/>Hello '+fname+'<br/>Write your boday here<br/><br/>Thank you,<br/>SFDC Admin Team<br/><br/><br><img id="r5sp1" bLabel="footerImage" border="0" bEditID="r5sp1" src="https://c.na11.content.force.com/servlet/servlet.ImageServer?id=01500000000UbMx&amp;oid=00D00000000heDI" height="45" width="630">';
     String shtmlbody = sHtmlBody1+sHtmlBody2;  
     email.setHtmlBody(shtmlbody); 
     String[] toaddress= new String[]{'+Email+'};     
     email.setToAddresses(toaddress);/* add Recepient list emails here*/
     emails.add(email);
 OpptyRec.Next_Alert_Schduled_Date__c = system.today()+3;
 opptyUpdateList.add(OpptyRec);
}
try
{
if(opptyUpdateList!=null and opptyUpdateList.size()>0)
{
update opptyUpdateList;
}
if(emails!=null && emails.size()>0)
{
Messaging.sendEmail(emails);
}
}
catch(exception e)
{
//do nothing
}
 }
 
 global void finish(Database.BatchableContext BC)
 {
//do nothing
 }
}

/****
Again go back to Approval Process update "Approval Status" with value as follows
Update with value Approved using "Final Approval Actions"
Update with value Rejected using "Final Rejection Actions"
****/

-- 
+++++++++++++++-

++++++++++++++++-