function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Egor PalatovEgor Palatov 

Master-detail value from picklist

Hi, i have  a master-detail relation ship between Car__c(master) and Car_detail__c(detail).

There is a parser for csv file and i need a  picklist to choose to every record it's car__c(relationsheep) field. I tried to create variable "a" that contains the "car id", but it doesnt helped
controller:
public class ParseCSVController {
    
public Blob csvFileBody{get;set;}
public string csvAsString{get;set;}
public String[] csvFileLines{get;set;}
public List<Car_detail__c> DetailList{get;set;}
public String CarName {get; set;}
Id a;
public ParseCSVController(){
	csvFileLines = new String[]{};
	DetailList = New List<Car_detail__c>();
}
 public List<SelectOption> getCar(){ 
	List<SelectOption> options = new List<SelectOption>(); 
	List<Car__c> carList = new List<Car__c>();
	carList = [Select Id, Name FROM Car__c];    
	options.add(new SelectOption('--None--','--None--'));    
	for (Car__c cars : carList) 
{ 
	options.add(new SelectOption(cars.Id,cars.Name));
    a = cars.Id;
}          
	return options; 
}
public void importCSVFile(){
       try{
           csvAsString = csvFileBody.toString();
           csvFileLines = csvAsString.split('\n');
           for(Integer i=1;i<csvFileLines.size();i++){
               Car_detail__c detailObj = new Car_detail__c();
               string[] csvRecordData = csvFileLines[i].split(',');
               detailObj.name = csvRecordData[0] ;             
               detailObj.Type__c = csvRecordData[1];
               detailObj.Length__c = Decimal.valueOf(csvRecordData[2]);
               detailObj.Width__c = Decimal.valueOf(csvRecordData[3]);   
               detailObj.Depth__c = Decimal.valueOf(csvRecordData[4]);
               detailObj.Material__c = csvRecordData[5]; 
               detailObj.Price__c = Decimal.valueOf(csvRecordData[6]); 
               detailObj.Model__c = csvRecordData[7]; 
               detailObj.Year__c = Decimal.valueOf(csvRecordData[8]); 
               detailObj.Quantity__c = Decimal.valueOf(csvRecordData[9]); 
               detailObj.Storage_key__c = Decimal.valueOf(csvRecordData[10]);
               detailObj.Car__c =  a; 
               
               DetailList.add(detailObj);   
           }
        //insert detaillist;
        }
        
        catch (Exception e)
        {
            ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.ERROR,'An error has occured while importin data Please make sure input csv file is correct');
            ApexPages.addMessage(errorMessage);
        }  
  }
}

VF page:
<apex:page controller="ParseCSVController">
    <apex:form >
        <apex:pagemessages />
        <apex:pageBlock >
            <apex:pageBlockSection columns="4"> 
                  <apex:inputFile value="{!csvFileBody}"  filename="{!csvAsString}"/>
                  <apex:commandButton value="Import Detail" action="{!importCSVFile}"/>
                  <apex:commandButton value="Save" action="{!Save}"/>
            </apex:pageBlockSection>
        </apex:pageBlock>
        <apex:pageBlock >
           <apex:pageblocktable value="{!DetailList}" var="detail">
           <apex:variable value="{!0}" var="cnt"/>
              <apex:inlineEditSupport event="ondblClick"/>
              <apex:column value="{!detail.Name}"  headerValue="Наименование детали" />
              <apex:column value="{!detail.Type__c}" headerValue="Тип" />
              <apex:column value="{!detail.Length__c}" headerValue="Длинна" />
              <apex:column value="{!detail.Width__c}" headerValue="Ширина" />
              <apex:column value="{!detail.Depth__c}" headerValue="Глубина" />
              <apex:column value="{!detail.Material__c}" headerValue="Материал" />
              <apex:column value="{!detail.Price__c}" headerValue="Цена" />
              <apex:column value="{!detail.Model__c}" headerValue="Модель" />
              <apex:column value="{!detail.Year__c}" headerValue="Год выпуска" />
              <apex:column value="{!detail.Quantity__c}" headerValue="Количество" />
              <apex:column value="{!detail.Storage_key__c}" headerValue="Код на складе" />
              <apex:column headerValue="Марка автомобиля"> 
				<apex:selectList value="{!CarName}" id="car" size="1" > 
				<apex:selectOptions value="{!car}" /> 
				</apex:selectList> 
		      </apex:column>
     </apex:pageBlock>
   </apex:form>
</apex:page>


 
Best Answer chosen by Egor Palatov
Waqar Hussain SFWaqar Hussain SF
You can remove that condition, it was addedd by mistaken, see below code
 
public class ParseCSVController {
    
public Blob csvFileBody{get;set;}
public string csvAsString{get;set;}
public String[] csvFileLines{get;set;}
public List<Car_detail__c> DetailList{get;set;}
public String CarName {get; set;}
public string SelectedCarId {get; set;}
public map<String,Id> CarsMap {get; set;}

Id a;
public ParseCSVController(){
	csvFileLines = new String[]{};
	DetailList = New List<Car_detail__c>();
}

 public List<SelectOption> getCar(){ 
	List<SelectOption> options = new List<SelectOption>(); 
	List<Car__c> carList = new List<Car__c>();
	carList = [Select Id, Name FROM Car__c];    
	options.add(new SelectOption('--None--','--None--'));    
	for (Car__c cars : carList) 
{ 
	options.add(new SelectOption(cars.Id,cars.Name));
    a = cars.Id;
	CarsMap.put(cars.Name, cars.Id);
}          
	return options; 
}
public PageReference importCSVFile(){
       
	   try{
           csvAsString = csvFileBody.toString();
           csvFileLines = csvAsString.split('\n');
           for(Integer i=1;i<csvFileLines.size();i++){
               Car_detail__c detailObj = new Car_detail__c();
               string[] csvRecordData = csvFileLines[i].split(',');
               detailObj.name = csvRecordData[0] ;             
               detailObj.Type__c = csvRecordData[1];
               detailObj.Length__c = Decimal.valueOf(csvRecordData[2]);
               detailObj.Width__c = Decimal.valueOf(csvRecordData[3]);   
               detailObj.Depth__c = Decimal.valueOf(csvRecordData[4]);
               detailObj.Material__c = csvRecordData[5]; 
               detailObj.Price__c = Decimal.valueOf(csvRecordData[6]); 
               detailObj.Model__c = csvRecordData[7]; 
               detailObj.Year__c = Decimal.valueOf(csvRecordData[8]); 
               detailObj.Quantity__c = Decimal.valueOf(csvRecordData[9]); 
               detailObj.Storage_key__c = Decimal.valueOf(csvRecordData[10]);
               detailObj.Car__c =  CarsMap.get(csvRecordData[0]); 
               
               DetailList.add(detailObj);   
           }
        //insert detaillist;
        }
        
        catch (Exception e)
        {
            ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.ERROR,'An error has occured while importin data Please make sure input csv file is correct');
            ApexPages.addMessage(errorMessage);
        }  
		return null;
  }
}

 

All Answers

Waqar Hussain SFWaqar Hussain SF
Hi Egor,
use below code and let me know If it helps.
 
public class ParseCSVController {
    
public Blob csvFileBody{get;set;}
public string csvAsString{get;set;}
public String[] csvFileLines{get;set;}
public List<Car_detail__c> DetailList{get;set;}
public String CarName {get; set;}
public string SelectedCarId {get; set;}
public map<String,Id> CarsMap {get; set;}

Id a;
public ParseCSVController(){
	csvFileLines = new String[]{};
	DetailList = New List<Car_detail__c>();
}

 public List<SelectOption> getCar(){ 
	List<SelectOption> options = new List<SelectOption>(); 
	List<Car__c> carList = new List<Car__c>();
	carList = [Select Id, Name FROM Car__c];    
	options.add(new SelectOption('--None--','--None--'));    
	for (Car__c cars : carList) 
{ 
	options.add(new SelectOption(cars.Id,cars.Name));
    a = cars.Id;
	CarsMap.put(cars.Name, cars.Id);
}          
	return options; 
}
public PageReference importCSVFile(){
       if(){
		ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.ERROR,'Please select a car.');
            ApexPages.addMessage(errorMessage);
	   }
	   try{
           csvAsString = csvFileBody.toString();
           csvFileLines = csvAsString.split('\n');
           for(Integer i=1;i<csvFileLines.size();i++){
               Car_detail__c detailObj = new Car_detail__c();
               string[] csvRecordData = csvFileLines[i].split(',');
               detailObj.name = csvRecordData[0] ;             
               detailObj.Type__c = csvRecordData[1];
               detailObj.Length__c = Decimal.valueOf(csvRecordData[2]);
               detailObj.Width__c = Decimal.valueOf(csvRecordData[3]);   
               detailObj.Depth__c = Decimal.valueOf(csvRecordData[4]);
               detailObj.Material__c = csvRecordData[5]; 
               detailObj.Price__c = Decimal.valueOf(csvRecordData[6]); 
               detailObj.Model__c = csvRecordData[7]; 
               detailObj.Year__c = Decimal.valueOf(csvRecordData[8]); 
               detailObj.Quantity__c = Decimal.valueOf(csvRecordData[9]); 
               detailObj.Storage_key__c = Decimal.valueOf(csvRecordData[10]);
               detailObj.Car__c =  CarsMap.get(csvRecordData[0]); 
               
               DetailList.add(detailObj);   
           }
        //insert detaillist;
        }
        
        catch (Exception e)
        {
            ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.ERROR,'An error has occured while importin data Please make sure input csv file is correct');
            ApexPages.addMessage(errorMessage);
        }  
		return null;
  }
}
 
<apex:page controller="ParseCSVController">
    <apex:form >
        <apex:pagemessages />
        <apex:pageBlock >
            <apex:pageBlockSection columns="4"> 
                  <apex:inputFile value="{!csvFileBody}"  filename="{!csvAsString}"/>
                  <apex:commandButton value="Import Detail" action="{!importCSVFile}"/>
                  <apex:commandButton value="Save" action="{!Save}"/>
            </apex:pageBlockSection>
        </apex:pageBlock>
        <apex:pageBlock >
           <apex:pageblocktable value="{!DetailList}" var="detail">
           <apex:variable value="{!0}" var="cnt"/>
              <apex:inlineEditSupport event="ondblClick"/>
              <apex:column value="{!detail.Name}"  headerValue="Наименование детали" />
              <apex:column value="{!detail.Type__c}" headerValue="Тип" />
              <apex:column value="{!detail.Length__c}" headerValue="Длинна" />
              <apex:column value="{!detail.Width__c}" headerValue="Ширина" />
              <apex:column value="{!detail.Depth__c}" headerValue="Глубина" />
              <apex:column value="{!detail.Material__c}" headerValue="Материал" />
              <apex:column value="{!detail.Price__c}" headerValue="Цена" />
              <apex:column value="{!detail.Model__c}" headerValue="Модель" />
              <apex:column value="{!detail.Year__c}" headerValue="Год выпуска" />
              <apex:column value="{!detail.Quantity__c}" headerValue="Количество" />
              <apex:column value="{!detail.Storage_key__c}" headerValue="Код на складе" />
              <apex:column headerValue="Марка автомобиля" value="{detail.Car__c}"> 
				</apex:selectList> 
		      </apex:column>
     </apex:pageBlock>
   </apex:form>
</apex:page>


 
Egor PalatovEgor Palatov
Hi,thanks for the answer

There problem in line 31 (empty "if"), and without that if my csv file cant be import(i guess it becosue we first need to upload file, and than set Car__c)
Waqar Hussain SFWaqar Hussain SF
You can remove that condition, it was addedd by mistaken, see below code
 
public class ParseCSVController {
    
public Blob csvFileBody{get;set;}
public string csvAsString{get;set;}
public String[] csvFileLines{get;set;}
public List<Car_detail__c> DetailList{get;set;}
public String CarName {get; set;}
public string SelectedCarId {get; set;}
public map<String,Id> CarsMap {get; set;}

Id a;
public ParseCSVController(){
	csvFileLines = new String[]{};
	DetailList = New List<Car_detail__c>();
}

 public List<SelectOption> getCar(){ 
	List<SelectOption> options = new List<SelectOption>(); 
	List<Car__c> carList = new List<Car__c>();
	carList = [Select Id, Name FROM Car__c];    
	options.add(new SelectOption('--None--','--None--'));    
	for (Car__c cars : carList) 
{ 
	options.add(new SelectOption(cars.Id,cars.Name));
    a = cars.Id;
	CarsMap.put(cars.Name, cars.Id);
}          
	return options; 
}
public PageReference importCSVFile(){
       
	   try{
           csvAsString = csvFileBody.toString();
           csvFileLines = csvAsString.split('\n');
           for(Integer i=1;i<csvFileLines.size();i++){
               Car_detail__c detailObj = new Car_detail__c();
               string[] csvRecordData = csvFileLines[i].split(',');
               detailObj.name = csvRecordData[0] ;             
               detailObj.Type__c = csvRecordData[1];
               detailObj.Length__c = Decimal.valueOf(csvRecordData[2]);
               detailObj.Width__c = Decimal.valueOf(csvRecordData[3]);   
               detailObj.Depth__c = Decimal.valueOf(csvRecordData[4]);
               detailObj.Material__c = csvRecordData[5]; 
               detailObj.Price__c = Decimal.valueOf(csvRecordData[6]); 
               detailObj.Model__c = csvRecordData[7]; 
               detailObj.Year__c = Decimal.valueOf(csvRecordData[8]); 
               detailObj.Quantity__c = Decimal.valueOf(csvRecordData[9]); 
               detailObj.Storage_key__c = Decimal.valueOf(csvRecordData[10]);
               detailObj.Car__c =  CarsMap.get(csvRecordData[0]); 
               
               DetailList.add(detailObj);   
           }
        //insert detaillist;
        }
        
        catch (Exception e)
        {
            ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.ERROR,'An error has occured while importin data Please make sure input csv file is correct');
            ApexPages.addMessage(errorMessage);
        }  
		return null;
  }
}

 
This was selected as the best answer