Skip to main content
I'm adding the picklist values from a vf page and want the entered value in the "selected values" for all the recordtypes. Here is the code:

public static void updateRecordType( String sessionId, Map < String,List < MetadataService.PicklistValue > > picklistValuesMap){

        System.debug('Adding picklist value in record type');

        Map < String,List < String > > sobjectTypeMap = new Map < String, List < String > > (); 

        if(picklistValuesMap != null && !picklistValuesMap.isEmpty()){

            // getting sobject

            Set < String > objSet = new Set < String > ();

            for(String objName : picklistValuesMap.keySet()){

                

                String sobjectName = objName.split('\\.')[0];

                objSet.add(sobjectName);

                //String fieldName =   objName.split('.').size() > 1 ? objName.split('.')[1]:null;

                system.debug(sobjectName);

            }

            

            // Gettting available Record type

            List < RecordType > recordTypesList = [select id,name,developerName,NamespacePrefix,isActive,sobjectType from RecordType where sobjectType IN: objSet limit 10]; // this limit is because of line ⌗43. it gives exception for more than 10

            

            if(!recordTypesList.isEmpty()||Test.isRunningTest()){

                List < String > recTypeNameLst = new List < String > ();

                for(RecordType recType:recordTypesList){

                    String RecordTypeName = recType.NamespacePrefix != null ? recType.NamespacePrefix+'__'+recType.developerName:recType.developerName;

                    recTypeNameLst.add(recType.sobjectType+'.'+RecordTypeName);        

                }

                System.debug('recTypeNameLst::::'+recTypeNameLst);

                // List of record type to update in bulk

                List < MetadataService.RecordType > metaDataRecordTypeLst = new List < MetadataService.RecordType > ();

               service = new MetadataService.MetadataPort();

                service.SessionHeader = new MetadataService.SessionHeader_element();

                service.SessionHeader.sessionId =sessionId;// UserInfo.getSessionId();

                

                service.timeout_x = 120000;

                List < MetadataService.Metadata > metaDataList = new List < MetadataService.Metadata > ();

                System.debug('before first call');

                if(!Test.isRunningTest())

                     metaDataList = service.readMetadata('RecordType', recTypeNameLst).getRecords();

                else{

                    MetadataService.RecordType testRtype= new MetadataService.RecordType();

                    testRtype.fullName = 'Account.Type';

                    MetadataService.RecordTypePicklistValue dd = new MetadataService.RecordTypePicklistValue();

                    dd.picklist ='type';

                    testRtype.picklistValues = new List < MetadataService.RecordTypePicklistValue > {dd};

                    metaDataList.add(testRtype);

                    

                }

                 System.debug('after first call');

                List < MetadataService.RecordType > recordtypeList = (List < MetadataService.RecordType >) metaDataList;

                 System.debug('==>>metaDataList '+metaDataList);

                if(metaDataList != null){

                    for(Integer i=0;i <recordtypeList.size(); ){

                        //MetadataService.RecordType recType = ( MetadataService.RecordType )metaObj;

                        System.debug('recordtypeList[i].fullName?????????????????????'+recordtypeList[i].fullName);

                        if(recordtypeList[i].fullName!= null){

                            String dummyObjName = recordtypeList[i].fullName != null ? recordtypeList[i].fullName.split('\\.')[0]:null;

                            MetadataService.RecordTypePicklistValue[] v = recordtypeList[i].picklistValues;

                            for(MetadataService.RecordTypePicklistValue vl:v){

                                String dummypickValue=vl.picklist;

                                String dummyFullName = dummyObjName+'.'+dummypickValue;

                                

                                if(picklistValuesMap.containsKey(dummyFullName)){

                                    List < MetadataService.PicklistValue > pvlst = picklistValuesMap.get(dummyFullName);

                                    vl.values = pvlst;

                                    

                                }

                            

                            }

                            i++;    

                        }else{ recordtypeList.remove(i);}

                        //recordtypeList.add(recordtypeList[i]);

                    }

                    // Updating list in batch of 10 records

                    System.debug('updating record type');

                    

                    List < MetadataService.RecordType > dummyRecordTypelist = new List < MetadataService.RecordType > ();

                    integer maxSize = 10;

                    for(MetadataService.RecordType dummyValue:recordtypeList){

                        dummyRecordTypelist.add(dummyValue);

                        System.debug('dummyRecordTypelist:::::::::'+dummyRecordTypelist);

                        if(dummyRecordTypelist.size() >= maxSize && !Test.isRunningTest()){

                            List<MetadataService.SaveResult> results = service.updateMetadata( dummyRecordTypelist );  

                            for(MetadataService.SaveResult result : results){

                                MetadataServiceExamples.handleSaveResults(result);

                            }

                            dummyRecordTypelist.clear();

                        }

                    }

                    if(!dummyRecordTypelist.isEmpty() && !Test.isRunningTest()){

                        List<MetadataService.SaveResult> results = service.updateMetadata( dummyRecordTypelist );  

                        for(MetadataService.SaveResult result : results){

                            MetadataServiceExamples.handleSaveResults(result);

                        }

                    }

                    System.debug('Record Type updated sucessfully');

                }

            }

        }   

    }

There is another method which calls the above one and that method is called from a batch class. 

The issue is that it runs into the "Exceeded maximum time allotted for callout (120000 ms) at Line :10822" exception and only 3-4 reordtypes are updated only. What can be done so that all the recordtypes are updated?
1 answer
  1. Sep 9, 2016, 8:06 AM
    Hi Rgupta,

    You should be able to loop through, and say in chunks or batches of 10 record types (or whatever number you chose) and issue callouts.  You can make up to 100 callouts in a transaction now that the limit has been increased from 10.

    Please mark this as solved if it helps.

    Best Regards,

    Nagendra.P
0/9000