I have a Custom Object called Opportunity_carset
.the related list of Opportunity Carset
Object is Service
.
The Opportunity Carse
Object has two fields.
- Model
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!!!