You need to sign in to do that
Don't have an account?
MimiA
Mapping Field From Account to Custom Object
I have managed to create a dynamically mapping fields from my custom object to map and pass the field name. I have one problem. I map the address field to Account Billing field. I want to add Phone to be map as Phone__c from my custom object field. The code is as follows:
/*
Account_TriggerHandler
*/
public static void createNewCustomObjectReplicateFromAccount(List<Account> newA){
List<Account> lstRequiredRecordTypefromAccount = new List<Account>();
Id Required_REC_ID = Schema.SObjectType.Account.getRecordTypeInfosByName().get('TypeName').getRecordTypeId();
List<String> fieldName = customObjService.getFieldName();
Map<String,String> addressField = customObjService.getMapField();
for(Account a : newA){
if(a.RecordTypeId == Required_REC_ID) lstRequiredRecordTypefromAccount.add(a);
}
List<customObj__c> customObj2Insert = new List<customObj__c>();
for(Account a : lstRequiredRecordTypefromAccount){
customObj__c ss = new customObj__c(Account__c=a.Id);
//Capture current date
ss.custom_Date__c = Date.today();
for(String f : fieldName){
String ssField = (f.startsWith('Billing'))?addressField.get(f):f;
//Only update the Account field when there is a value on customObj__c
if(a.get(f) != null){
ss.put(ssField,a.get(f));
}
}
customObj2Insert.add(ss);
}
insert customObj2Insert;
}
}
and from service:
public with sharing class customObjService {
public static final Set<String> FIELD_NOT_MAPPED_TO_ACCOUNT = new Set<String>{'field1__c','field2__c','field3__c','Account__c','Id'};
public static Map<String,String> addressField = getMapField();
public static List<String> fieldName = getFieldName();
public static List<String> getFieldName(){
List<String> tmp = new List<String>();
Map<String,String> mapField = getMapField();
System.debug('>>>mapField: ' + mapField);
Map<String, Schema.SObjectField> customObjMap = Schema.getGlobalDescribe().get('customObj__c'.toLowerCase()).getDescribe().Fields.getMap();
//Get all field name from customObj__c sObject
if (customObjMap != null){
for (Schema.SObjectField ft : customObjMap.values()){
String f = ft.getDescribe().getName();
Integer len = f.length() - 3;
if(f.indexOf('__c') == len && !customObjService.FIELD_NOT_MAPPED_TO_ACCOUNT.contains(f)){
tmp.add((f.startsWith('Address'))?mapField.get(f):f);
system.debug('tmp >>>' + tmp);
}
}
}
//system.debug('tmp >>>' + tmp);
return tmp;
}
public static Map<String,String> getMapField(){
Map<String,String> tmp = new Map<String,String>();
//From Custom Object to Account
tmp.put('Address_Street__c','BillingStreet');
tmp.put('Address_City__c','BillingCity');
tmp.put('Address_Country__c','BillingCountry');
tmp.put('Address_State_Province__c','BillingState');
tmp.put('Address_Zip_Postal_Code__c','BillingPostalCode');
//From Account to Custom Object
tmp.put('BillingStreet','Address_Street__c');
tmp.put('BillingCity','Address_City__c');
tmp.put('BillingCountry','Address_Country__c');
tmp.put('BillingState','Address_State_Province__c');
tmp.put('BillingPostalCode','Address_Zip_Postal_Code__c');
return tmp;
}
}
Please let me know how to include standard fields like Phone.
Thanks for your help
/*
Account_TriggerHandler
*/
public static void createNewCustomObjectReplicateFromAccount(List<Account> newA){
List<Account> lstRequiredRecordTypefromAccount = new List<Account>();
Id Required_REC_ID = Schema.SObjectType.Account.getRecordTypeInfosByName().get('TypeName').getRecordTypeId();
List<String> fieldName = customObjService.getFieldName();
Map<String,String> addressField = customObjService.getMapField();
for(Account a : newA){
if(a.RecordTypeId == Required_REC_ID) lstRequiredRecordTypefromAccount.add(a);
}
List<customObj__c> customObj2Insert = new List<customObj__c>();
for(Account a : lstRequiredRecordTypefromAccount){
customObj__c ss = new customObj__c(Account__c=a.Id);
//Capture current date
ss.custom_Date__c = Date.today();
for(String f : fieldName){
String ssField = (f.startsWith('Billing'))?addressField.get(f):f;
//Only update the Account field when there is a value on customObj__c
if(a.get(f) != null){
ss.put(ssField,a.get(f));
}
}
customObj2Insert.add(ss);
}
insert customObj2Insert;
}
}
and from service:
public with sharing class customObjService {
public static final Set<String> FIELD_NOT_MAPPED_TO_ACCOUNT = new Set<String>{'field1__c','field2__c','field3__c','Account__c','Id'};
public static Map<String,String> addressField = getMapField();
public static List<String> fieldName = getFieldName();
public static List<String> getFieldName(){
List<String> tmp = new List<String>();
Map<String,String> mapField = getMapField();
System.debug('>>>mapField: ' + mapField);
Map<String, Schema.SObjectField> customObjMap = Schema.getGlobalDescribe().get('customObj__c'.toLowerCase()).getDescribe().Fields.getMap();
//Get all field name from customObj__c sObject
if (customObjMap != null){
for (Schema.SObjectField ft : customObjMap.values()){
String f = ft.getDescribe().getName();
Integer len = f.length() - 3;
if(f.indexOf('__c') == len && !customObjService.FIELD_NOT_MAPPED_TO_ACCOUNT.contains(f)){
tmp.add((f.startsWith('Address'))?mapField.get(f):f);
system.debug('tmp >>>' + tmp);
}
}
}
//system.debug('tmp >>>' + tmp);
return tmp;
}
public static Map<String,String> getMapField(){
Map<String,String> tmp = new Map<String,String>();
//From Custom Object to Account
tmp.put('Address_Street__c','BillingStreet');
tmp.put('Address_City__c','BillingCity');
tmp.put('Address_Country__c','BillingCountry');
tmp.put('Address_State_Province__c','BillingState');
tmp.put('Address_Zip_Postal_Code__c','BillingPostalCode');
//From Account to Custom Object
tmp.put('BillingStreet','Address_Street__c');
tmp.put('BillingCity','Address_City__c');
tmp.put('BillingCountry','Address_Country__c');
tmp.put('BillingState','Address_State_Province__c');
tmp.put('BillingPostalCode','Address_Zip_Postal_Code__c');
return tmp;
}
}
Please let me know how to include standard fields like Phone.
Thanks for your help