I have a Custom Object called `Opportunity_carset`.the related list of `Opportunity Carset` Object is `Service`.

The `Opportunity Carse` Object has two fields.

1. Model
2. Version

- The Service object has some Picklist Field called `CodeLabel`

- Model and Version values from "Opportunity Carset" are sent as parameter to webservice class to retrieve the "service" Object Custom Picklist values.

**My scenario:**

Whenever am creating the "Service" record by clicking "New Service" from realted list of "Opportunity carset" Object,the Custom Picklist values should be displayed in Service Object.

Here,

I have created  a apex class which take the Model and Version values and will give the custom Picklist values.

**Apex code**

    public class Rfleet_DZC2GOptionDetails_CLS {
    public String strJSON {get;set;}
    public String strGeturl {get;set;}
    public String strGetcountrycode {get;set;}
    public String strGetCurrency {get;set;}
    public String strModelCode {get;set;}
    public String strVersionCode {get;set;}
    public String strVersionDocUrl {get;set;}
    public String strMarketingModelURL {get;set;}
    public String strPriceListURL {get;set;}
    public String strReferenceValue {get;set;}
    public string  strOptionCode;
    public string  strOptionLabel;
    public String strConcatOptionCodeLabel; 
    public List<service__c> lstServiceRecord= new List<service__c>();  //to insert records in service object
    public List<String> lstModelcalOut = new List<String>(); //to get list of model code
    public List<String> lstDoCcalOut = new List<String>(); //to get list of docurls
    public List<String> lstFinalContactOptionCodeLabel = new List<String>();  //List of Option codes with Label
    public Map<String,String> mVersion     = new map<String,String>();  //Contains model code+doc url
    public Map<String,String> mVersionVal  = new map<String,String>();  //contains specific version doc url
    public Map<String, String> mapOptionCodeLabel = new Map<String,String>(); //Option code and label from Marketing URL
    public Map<String, Double>  mapOptionCodePrice = new Map<String, Double>(); //Option code and Price from Price URL
    Rfleet_JSON2ApexC2G_CLS obj = null;
    
    //Constructor used to get the modelcode and version code  
    
    public Rfleet_DZC2GOptionDetails_CLS() {
        Rfleet_CountryInfo__c cs = Rfleet_CountryInfo__c.getInstance('Algeria');
        strGeturl         =    cs.Rfleet_C2GURL__c;
    }
    public Rfleet_DZC2GOptionDetails_CLS(String strOppid) {
        system.debug('strOppid >>>>'+ strOppid);
        Rfleet_CountryInfo__c cs = Rfleet_CountryInfo__c.getInstance('Algeria');
        strGeturl         =    cs.Rfleet_C2GURL__c;
    }
    
    public Rfleet_DZC2GOptionDetails_CLS(String strModelName, String strVersionName) {
    
        Rfleet_CountryInfo__c cs = Rfleet_CountryInfo__c.getInstance('Algeria');
        strGeturl         =    cs.Rfleet_C2GURL__c;
        strGetcountrycode =    cs.Rfleet_CountryCode__c;
        strGetCurrency    =    cs.Rfleet_Currency__c;
        Opportunity_car_set__c opp=[SELECT Model__r.ProductCode,Version__r.Rfleet_C2G_version_code__c FROM Opportunity_car_set__c where Model__r.name =: strModelName and Version__r.name =:    strVersionName];    
        strModelCode    = opp.Model__r.ProductCode;
        strVersionCode  = opp.Version__r.Rfleet_C2G_version_code__c;
        system.debug('strModelCode >>>>'+ strModelCode);
        system.debug('strVersionCode >>>>'+ strVersionCode);
    
    }
    //Common method to Parse the JSON
    public String init(String strVersionURL) {
        
        system.debug('## Inside init :: strVersionURL is..::'+ strVersionURL);
        try {
            Http http = new Http();
            HttpRequest httpReq = new HttpRequest();
            httpReq.setEndpoint(strVersionURL);
            httpReq.setHeader('Accept','application/JSON');
            httpReq.setMethod('GET');
            HttpResponse response = http.send(httpReq);
            strJSON= response.getBody();
    
        } catch (Exception ex) {
            system.debug('<<Method: init Exception ::'+ ex);
        } 
        return  strJSON;     
    }
    
    //Used for Getting ModelCode and Doc URL in Map
    public Map<String, String> getJSONFromREST() {
        
        system.debug('## Inside  getJSONFromREST ##');
        strJSON = init(strGeturl); 
        
        JSONParser parser = JSON.createParser(strJSON);
        while(parser.nextToken() !=null) {
            if (parser.getCurrentToken() == JSONToken.FIELD_NAME) {
                String fieldName = parser.getText();
                if(fieldName == 'modelSpecCode') { 
                    parser.nextToken();
                    lstModelcalOut.add(parser.getText());
                } 
                if(fieldName == 'doc') {
                    parser.nextToken();
                    lstDoCcalOut.add(parser.getText());
                } 
            }
        }
        for(integer i=0;i<lstModelcalOut.size();i++) {
            mVersion.put(lstModelcalOut.get(i),lstDoCcalOut.get(i));
        }
        system.debug('mVersion===>'+mVersion);
        
        return mVersion;       
    }
    //Used to return the OptionCode and Label after getting the Price and Marketing URL for the Version
    
    public Map<String, String> fetchModelSpecCodeandPricListURL( String strModelCode, String strVersionCode) {
       
       system.debug('## Inside fetchModelSpecCodeandPricListURL method ##');
        mVersionVal=getJSONFromREST();
        
        system.debug('## mVersionVal is..::'+ mVersionVal);
        system.debug('## strModelCode is..::'+ strModelCode);
        
        
        if(mVersionVal.containsKey(strModelCode.trim())) {
            system.debug('## Inside if condition ##' + strModelCode);
            strVersionDocUrl= mVersionVal.get(strModelCode.trim());
        }
        
        system.debug('## strVersionDocUrl is..::'+ strVersionDocUrl);
        strJSON = init(strVersionDocUrl); 
        
        system.debug('## fetchModelSpecCodeandPricListURL :: strJSON..::' +strJSON );
        
        JSONParser parser = JSON.createParser(strJSON);
        while (parser.nextToken() != null) {
                if (parser.getCurrentToken() == JSONToken.FIELD_NAME) {
                    String fieldName = parser.getText();
                    if(fieldName == 'pricesList') {
                        parser.nextToken();
                        strPriceListURL=parser.getText();
                        system.debug('strPriceListURL>>>>'+strPriceListURL);
                    }
                    if (fieldName == 'marketingModelPresentation') {
                        parser.nextToken();
                        strMarketingModelURL = parser.getText();
                        system.debug('## strMarketingModelURL  :: >>>>'+strMarketingModelURL);
                    }
                }    
        }
        if (strMarketingModelURL !=null && strMarketingModelURL.length()>0) {
            mapOptionCodeLabel = getOptionCodelabel(strMarketingModelURL);  
        }
        
        return  mapOptionCodeLabel;       
    }
    
    
    //Used to get the OptionCode and Label from MarketModel URL
    public Map<String, String> getOptionCodelabel(String strMarketingModelURL) {
        strJSON = init(strMarketingModelURL); 
        JSONParser parser = JSON.createParser(strJSON);
        while (parser.nextToken() != null) {
            if (parser.getCurrentToken() == JSONToken.FIELD_NAME){
                String fieldName = parser.getText();
                if(fieldName == 'map') {
                    while(parser.nextToken() != null) {                    
                        if(parser.getCurrentToken() == JSONToken.FIELD_NAME) {
                            String mapName = parser.getText();
                            if(mapName == 'presentationItem'){
                                Integer i=0;
                                while(parser.nextToken() != null){
                                    if(parser.getCurrentToken() == JSONToken.FIELD_NAME){
                                        String Oppname = parser.getText();
                                        if(Oppname == 'null' || Oppname == 'fr'){
                                            parser.nextToken();
                                            strOptionLabel=parser.getText();
                                            i=i+1;
                                        }  
                                        if(Oppname == 'key'){
                                            parser.nextToken();
                                            strOptionCode=parser.getText();
                                            i=i+1;
                                        } 
                                        if(i==2) break;                                   
                                    }
                                }
                                if(strOptionCode!=null || strOptionCode!='')
                                    mapOptionCodeLabel.put(strOptionCode,strOptionLabel);
                                    system.debug('mapOptionCodeLabel>>>>'+mapOptionCodeLabel);
                            }
                        }
                    }      
                }
            }          
        }   
        system.debug('mapOptionCodeLabel===>'+mapOptionCodeLabel);
        return mapOptionCodeLabel;
    } 
    
    
    //Used to Get the final OptionCode and Label
    public List<string> getPriceListbasedOnReference(String strModelCode, String strVersionCode) {
    
            system.debug('## Inside getPriceListbasedOnReference :: strModelCode::'+ strModelCode +'\t strVersionCode >>::'+strVersionCode);
            mapOptionCodeLabel = fetchModelSpecCodeandPricListURL(strModelCode, strVersionCode);
            
            // Parsing the strPriceListURL to retrieve PriceType - reference ="PVCHT" and and its map values
            String strJSON = init(strPriceListURL);
            
            obj = Rfleet_JSON2ApexC2G_CLS.parse(strJSON);
            // To iterate the PriceList values
            String str = obj.requestedURI;
            List<Rfleet_JSON2ApexC2G_CLS.PriceList> listPriceList  = obj.PriceList;  
            // codition to check when the PriceList is returning empty 
            if (listPriceList !=null && listPriceList.size()>0) {
            
                for(Rfleet_JSON2ApexC2G_CLS.PriceList priceList : listPriceList) {
                
                    String strPriceTypeReference = (String)priceList.priceType.reference;
                    List<Rfleet_JSON2ApexC2G_CLS.VersionPriceList>  listVersionPriceList;
                    if(strPriceTypeReference =='PVCHT') {
                        listVersionPriceList = new List<Rfleet_JSON2ApexC2G_CLS.VersionPriceList>();
                        listVersionPriceList = priceList.versionPriceList;
                        for(integer i=0; i< listVersionPriceList.size(); i++) {
                            String strversionIdSpecCode = listVersionPriceList.get(i).versionIdSpecCode;
                            double strversionPrice = listVersionPriceList.get(i).price; 
                            if (strversionIdSpecCode==strVersionCode) {
                                Rfleet_JSON2ApexC2G_CLS.OptionsPrices optionPrice = (Rfleet_JSON2ApexC2G_CLS.OptionsPrices )listVersionPriceList.get(i).OptionsPrices ;
                                Rfleet_JSON2ApexC2G_CLS.MapRepresentation mapRepresentaion = (Rfleet_JSON2ApexC2G_CLS.MapRepresentation)optionPrice.MapRepresentation  ;
                                Rfleet_JSON2ApexC2G_CLS.Map_Z mapValues= (Rfleet_JSON2ApexC2G_CLS.Map_Z)mapRepresentaion.Map_Z ;
                                mapOptionCodePrice = mapValues.mapZ; 
                            }    
                        }
                    } 
                }  
             
            Set<String> setOptionID = mapOptionCodeLabel.keySet();
            for(String strIds:setOptionID){ 
                if(mapOptionCodePrice.containsKey(strIds)) {      
                    String OptionCode=strIds;
                    String OptionLabel=mapOptionCodeLabel.get(OptionCode);
                    strConcatOptionCodeLabel= OptionCode+'-'+ OptionLabel;
                    lstFinalContactOptionCodeLabel.add(strConcatOptionCodeLabel);
                }
            }
           }// end of if loop for PriceList is not empty  
         return   lstFinalContactOptionCodeLabel;//return the Picklist values
    } 
    
    }

This class will return the Picklist Options.Using MetaDataApi I can update the picklist field values in"Service" object.But this all to be happen while creating a record from Relatedlist.Give me some Idea!!!