You need to sign in to do that
Don't have an account?
MimiA
Replicate Account Record
Hello,
I am new for apex classes. I was trying to create a trigger which replicate the account recorded to custom object. All account standard and custom field.
Could someone help me please?
Thanks
I am new for apex classes. I was trying to create a trigger which replicate the account recorded to custom object. All account standard and custom field.
Could someone help me please?
Thanks
you mean copy all fields from Account to some custom object, with the same fields?
You can't clone it as it is different object, but you can do something like:
All Answers
you mean copy all fields from Account to some custom object, with the same fields?
You can't clone it as it is different object, but you can do something like:
// Use .clone to create a new copy: clone(preserveId, isDeepClone, preserveReadonlyTimestamps, preserveAutonumber)
Account b = a.clone(false, true, false, false);
How would I do it generic? Whenever the custom field created that replicate to the custom Object?
Is there a way to do that?
Thanks
/*
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