Сопоставление и обновление полей из одного пользовательского объекта в другой - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть требование обновить те же поля на 2 объектах. Когда я обновляю определенный набор полей на объекте, AI хочет обновить те же поля на объекте B.

Я сохранил эту информацию в пользовательских метаданныхиспользуя формат json.

Теперь я получил отображение поля на карту mapFieldWiseSchema

, а также у меня есть другая карта, которая хранит только измененное поле Map> fieldChangedMapChanged

Итак, первая картавернет: «Filed1» (в объекте A): «Filed1 (в объекте B)» *

вторая карта вернет: ID: «Field1», «filed2», «field3»

Теперь я запутался, как сопоставить измененную карту и отображаемое поле.

Ниже приведен мой полный код.

Триггер

if (Trigger.isAfter) {

if(!JobApplicationTriggerAction.backupJobAppSynced) {
    Map<Id, List<String>> fieldChangedMap = new  Map<Id, List<String>>();
    if (Trigger.isUpdate) {

        //Get fields which needs to be sync which are updated / changed
        fieldChangedMap = JobAppFieldChange.filedChangeSet(Trigger.newMap, Trigger.oldMap);
        if(fieldChangedMap != null){

            JobApplicationTriggerAction jobapp = new JobApplicationTriggerAction();
            jobapp.UpdateSyncJob(Trigger.newMap,fieldChangedMap,trigger.new);


        }

    }

}

} ​​

public class JobAppFieldChange {

    public static Map<Id, List<String>> filedChangeSet(Map<Id, Test__JobApp__c> NewMap, Map<Id, Test__JobApp__c> OldMap){
        Map<Id, List<String>> fieldChangedMap = new Map<Id, List<String>>();
        Map<String, Schema.SObjectField> fieldMap = Schema.SObjectType.Test__JobApp__c.fields.getMap();
        List<String> fieldToSync = new List<String>{'Id', 'Name', 'Test__order__c','Test__Name__c','Test__status__c','Test__Test__c'};

        for( Id jobAppId : NewMap.keySet()) {
            Test__JobApp__c newjobApp = NewMap.get(jobAppId);
            Test__JobApp__c oldjobApp = OldMap.get(jobAppId);
            List<String> changedFieldSet = new List<String>();

            for (String fieldName : fieldMap.keyset()) {
                try {
                    if(newjobApp.get(fieldName) != oldjobApp.get(fieldName)){
                        if(fieldToSync.contains(fieldName)) {
                            changedFieldSet.add(fieldName);
                        }
                    }
                } catch (Exception e) {
                    System.debug('Error: ' + e);
                }
            }
            fieldChangedMap.put(jobAppId, changedFieldSet);
        }

        return fieldChangedMap;
    }
} 


public Set<id> ids {get;set;}
    private Set<Id> JobappIds;
    Map<Id, List<String>> fieldChangedMap; 
    string qry = '';
    String strJSONBody;

    map<Schema.SObjectField,Schema.SObjectField> mapFieldWiseSchema=new map<Schema.SObjectField,Schema.SObjectField>();
    map<string, Schema.SObjectField> mapObjectWiseFieldWiseSchemaField=new map<string, Schema.SObjectField>();

    public Map<string,string> getAllMappingTable(){

        Map<string, string> MapMappingTable=new map<string,string>();

        list<string> objects=new list<string>();
        objects.add('Test__JobAppBackup__c');
        objects.add('Test__JobApp__c');

        for(string s:objects){
            Map <String, Schema.SObjectType > m = Schema.getGlobalDescribe();
            Schema.SObjectType sT = m.get(s);
            Schema.DescribeSObjectResult r = sT.getDescribe();
            Map<String, Schema.SObjectField> mapData = r.fields.getMap();
            system.debug('Map Value-->' + mapData.values());
            Schema.DescribeFieldResult F;

            for(Schema.SObjectField sField:mapData.values()){
                F= sField.getDescribe();
                string sKey=s + F.getName();
                mapObjectWiseFieldWiseSchemaField.put(sKey,sField);

            }

        }

        system.debug('mapObjectWiseFieldWiseSchemaField' + mapObjectWiseFieldWiseSchemaField);

        qry ='';
        try{
            Test__JobAppMap__mdt syncMetaMdt = [SELECT Test__JsonMap__c FROM Test__JobAppMap__mdt ];
            if(syncMetaMdt != null) {
                strJSONBody = syncMetaMdt.Test__JsonMap__c; 
            }

            if (syncMetaMdt.Test__JsonMap__c != null ){
                MapMappingTable =(Map<String, String>) JSON.deserialize(strJSONBody, Map<String, String>.class);

            }

            for(string sfieldname:MapMappingTable.keySet()){
                string skey1='Test__JobApp__c' + sfieldname;
                string sKey2='Test__JobAppBackup__c' + MapMappingTable.get(sfieldname);
                system.debug('skey1' + sKey1);
                system.debug('skey2' + sKey2);

                if(mapObjectWiseFieldWiseSchemaField.get(skey1)!=null && mapObjectWiseFieldWiseSchemaField.get(skey2)!=null)
                    mapFieldWiseSchema.put(mapObjectWiseFieldWiseSchemaField.get(skey1),mapObjectWiseFieldWiseSchemaField.get(skey2));
               }

            system.debug('mapFieldWiseSchema' + mapFieldWiseSchema);

        }catch(exception ex){
            String msg = ex.getMessage();
            //currentMsg = new ApexPages.Message(ApexPages.severity.ERROR, msg);
        }

        return MapMappingTable;
    }


public PageReference UpdateSyncJob(map<Id, Test__JobApp__c> NewMap,Map<Id, List<String>> fieldChangedMapChanged, List<est__JobApp__c> jobAppList) {

        getAllMappingTable();
        list<sObject> lstsObjects=new list<sObject>();
        list<Test__JobAppBackup__c> listJobBackupToUpdate=new list<Test__JobAppBackup__c>();
        fieldChangedMap = fieldChangedMapChanged;
        List<String> fieldChangeSet ;
        List<String> jobbackupIds = new List<String>();

        for(Thiru_Test__JobApp__c Jobapps : jobAppList){
            }

        if(listJobBackupToUpdate.size()>0)
          {
            Savepoint sp;
            try
            {
                sp = Database.setSavepoint();
                update listJobBackupToUpdate;
                update lstsObjects;

            }
            catch(Exception e)
            {
                String msg = e.getMessage();
                Database.rollback(sp);
                ApexPages.Message currentMsg = new ApexPages.Message(ApexPages.severity.ERROR, msg);
                ApexPages.addMessage(currentMsg);
            } 

        }
        return null;


    }

Я не завершил это. Пожалуйста, помогите мне написать логику для сопоставления filedchangeset и filed mapping.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...