You need to sign in to do that
Don't have an account?
soumya 1
FATAL_ERROR System.TypeException: Invalid conversion from runtime type Contact to REO_Application__c
In TriggerHandler i am getting 'FATAL_ERROR System.TypeException: Invalid conversion from runtime type Contact to REO_Application__c'
line number 15
REO_Application__c reo = (REO_Application__c)application;
Trigger:
trigger REOApplicationTrigger on REO_Application__c (before insert, before update, after update) {
new REOApplicationTriggerHandler().run();
}
TriggerHandler :
public without sharing class REOApplicationTriggerHandler extends TriggerHandler {
public REOApplicationTriggerHandler() {}
override public void beforeInsert() {
List<REO_Application__c> REOsToCreateContact = new List<REO_Application__c>();
for(REO_Application__c reo : (List<REO_Application__c>)Trigger.new) {
if(reo.Applicant_Contact__c == null) {
REOsToCreateContact.add(reo);
}
}
if(!REOsToCreateContact.isEmpty()) {
Map<SObject, Id> applicationContactIds = Utility.createContact(REOsToCreateContact, Utility.getContactFieldMapping('REO'));
if(applicationContactIds != null) {
for(SObject application : applicationContactIds.keySet()) {
REO_Application__c reo = (REO_Application__c)application;
reo.Applicant_Contact__c = applicationContactIds.get(reo);
}
}
}
}
Utility: getContactFieldMapping
public static Map<String, String> getContactFieldMapping(String objType) {
Map<String, String> fieldMap = new Map<String, String>();
switch on objType {
when 'REO' {
fieldMap.put('Applicant_Last_Name__c', 'LastName');
fieldMap.put('Applicant_Country__c', 'MailingCountry');
fieldMap.put('Applicant_Postal_Code__c', 'MailingPostalCode');
fieldMap.put('Applicant_Street__c', 'MailingStreet');
fieldMap.put('Applicant_Mobile__c', 'MobilePhone');
fieldMap.put('Applicant_NRIC_FIN__c', 'NRIC_FIN__c');
fieldMap.put('Applicant_Phone__c', 'Phone');
fieldMap.put('Date_of_Birth__c', 'Birthdate');
fieldMap.put('Gender__c', 'Gender__c');
fieldmap.put('Applicant_Nationality__c', 'Nationality__c');
fieldMap.put('Work_Permit_Expiry_Date__c', 'Work_Permit_Expiry_Date__c');
fieldMap.put('Work_Permit_Number__c', 'Work_Permit_Number__c');
}
when 'RES' {
fieldMap.put('Applicant_Last_Name__c', 'LastName');
fieldMap.put('Applicant_Country__c', 'MailingCountry');
fieldMap.put('Applicant_Postal_Code__c', 'MailingPostalCode');
fieldMap.put('Applicant_Street__c', 'MailingStreet');
fieldMap.put('Applicant_Mobile__c', 'MobilePhone');
fieldMap.put('Applicant_NRIC_FIN__c', 'NRIC_FIN__c');
fieldMap.put('Applicant_Phone__c', 'Phone');
fieldMap.put('Date_of_Birth__c', 'Birthdate');
fieldMap.put('Gender__c', 'Gender__c');
fieldmap.put('Applicant_Nationality__c', 'Nationality__c');
fieldMap.put('Work_Permit_Expiry_Date__c', 'Work_Permit_Expiry_Date__c');
fieldMap.put('Work_Permit_Number__c', 'Work_Permit_Number__c');
}
when else {
return null;
}
}
return fieldMap;
}
line number 15
REO_Application__c reo = (REO_Application__c)application;
Trigger:
trigger REOApplicationTrigger on REO_Application__c (before insert, before update, after update) {
new REOApplicationTriggerHandler().run();
}
TriggerHandler :
public without sharing class REOApplicationTriggerHandler extends TriggerHandler {
public REOApplicationTriggerHandler() {}
override public void beforeInsert() {
List<REO_Application__c> REOsToCreateContact = new List<REO_Application__c>();
for(REO_Application__c reo : (List<REO_Application__c>)Trigger.new) {
if(reo.Applicant_Contact__c == null) {
REOsToCreateContact.add(reo);
}
}
if(!REOsToCreateContact.isEmpty()) {
Map<SObject, Id> applicationContactIds = Utility.createContact(REOsToCreateContact, Utility.getContactFieldMapping('REO'));
if(applicationContactIds != null) {
for(SObject application : applicationContactIds.keySet()) {
REO_Application__c reo = (REO_Application__c)application;
reo.Applicant_Contact__c = applicationContactIds.get(reo);
}
}
}
}
Utility: getContactFieldMapping
public static Map<String, String> getContactFieldMapping(String objType) {
Map<String, String> fieldMap = new Map<String, String>();
switch on objType {
when 'REO' {
fieldMap.put('Applicant_Last_Name__c', 'LastName');
fieldMap.put('Applicant_Country__c', 'MailingCountry');
fieldMap.put('Applicant_Postal_Code__c', 'MailingPostalCode');
fieldMap.put('Applicant_Street__c', 'MailingStreet');
fieldMap.put('Applicant_Mobile__c', 'MobilePhone');
fieldMap.put('Applicant_NRIC_FIN__c', 'NRIC_FIN__c');
fieldMap.put('Applicant_Phone__c', 'Phone');
fieldMap.put('Date_of_Birth__c', 'Birthdate');
fieldMap.put('Gender__c', 'Gender__c');
fieldmap.put('Applicant_Nationality__c', 'Nationality__c');
fieldMap.put('Work_Permit_Expiry_Date__c', 'Work_Permit_Expiry_Date__c');
fieldMap.put('Work_Permit_Number__c', 'Work_Permit_Number__c');
}
when 'RES' {
fieldMap.put('Applicant_Last_Name__c', 'LastName');
fieldMap.put('Applicant_Country__c', 'MailingCountry');
fieldMap.put('Applicant_Postal_Code__c', 'MailingPostalCode');
fieldMap.put('Applicant_Street__c', 'MailingStreet');
fieldMap.put('Applicant_Mobile__c', 'MobilePhone');
fieldMap.put('Applicant_NRIC_FIN__c', 'NRIC_FIN__c');
fieldMap.put('Applicant_Phone__c', 'Phone');
fieldMap.put('Date_of_Birth__c', 'Birthdate');
fieldMap.put('Gender__c', 'Gender__c');
fieldmap.put('Applicant_Nationality__c', 'Nationality__c');
fieldMap.put('Work_Permit_Expiry_Date__c', 'Work_Permit_Expiry_Date__c');
fieldMap.put('Work_Permit_Number__c', 'Work_Permit_Number__c');
}
when else {
return null;
}
}
return fieldMap;
}
Please mark this as best answer if it helps!
Regards,
Darshit Pathak
Can you give the code of the Utility.createContact method?
Thanks
Shubham Jain
Map<SObject, SObject> applicationContact = new Map<SObject, SObject>();
Map<SObject, Id> applicationContactId = new Map<SObject, Id>();
Set<Id> personAccCreatedIds = new Set<Id>();
Id userConId = [Select ContactId From User Where Id = :UserInfo.getUserId()].ContactId;
if(userConId != null) {
Contact userCon = [Select AccountId, IsPersonAccount From Contact Where Id = :userConId];
RecordType personAccRecType = [Select Id From RecordType Where Name = 'Person Account' And SObjectType = 'Account'];
Set<String> accountFields = Schema.SObjectType.Account.fields.getMap().keySet();
for(SObject obj : objToCopy) {
if(!userCon.IsPersonAccount) {
Contact con = new Contact();
for(String objField : fieldMap.keySet()) {
con.put(fieldMap.get(objField), obj.get(objField));
}
con.AccountId = userCon.AccountId;
applicationContact.put(obj, con);
} else {
Account personAcc = new Account();
personAcc.RecordTypeId = personAccRecType.Id;
for(String objField : fieldMap.keySet()) {
personAcc.put(getPersonAccountAlias(fieldMap.get(objField), accountFields), obj.get(objField));
}
applicationContact.put(obj, personAcc);
}
}
try {
insert applicationContact.values();
for(SObject conOrPersonAcc : applicationContact.values()) {
if(conOrPersonAcc.getSObjectType() == Account.SObjectType) {
personAccCreatedIds.add(conOrPersonAcc.Id);
}
}
I believe this method is returning applicationContactId Map, if not then where is the return of the method?
Where you are assigning values in the map which you are returning?
Thanks
Shubham Jain