One of the restrictions of future annotations is that you can not pass sObjects or objects as arguments to the annotated method.
public class clsForAllFutureMethods
{
@future
public static void FirstFutureMethod(List<String> lst)
{
}
}
But there is a way we can pass using JSON serialize|deserialize methods.
public class wrapperClass{
public Contact objContact{set; get;}
public String AccountName{set; get;}
public String OpportunityName{set; get;}
public wrapperClass(Contact con, String aName, String oName) {
objContact= con;
aName = AccountName;
oName= OpportunityName;
}
}
---------------------------------------------------------------------------
List<String> lstString= new List<String>();
wrapperClass objWrap1= new wrapperClass(new Contact(LastName='Contact1'), 'Account1', 'Opp 1');
wrapperClass objWrap2= new wrapperClass(new Contact(LastName='Contact2'), 'Account2', 'Opp 2');
//serialize my objects
lstString.add(JSON.serialize(objWrap1));
lstString.add(JSON.serialize(objWrap2));
clsForAllFutureMethods.FirstFutureMethod(lstString);
---------------------------------------------------------------------------
We need to deserialize the JSON string as
public class clsForAllFutureMethods
{
@future
public static void FirstFutureMethod(List<String> lst)
{
List<wrapperClass> lstWrap=new List<wrapperClass>();
for (String objWrap: lst)
{
lstWrap.add((wrapperClass) JSON.deserialize(ser, wrapperClass.class));
}
}
}