Как использовать значение из пик листа

Добрый день. У меня selectedDoctorName пустой и я не знаю как его заполнить.

public class AppointmentsTableController {
public List<SelectOption> doctorOption{set;}
public List<Doctor__c> docList {get;set;}
public String selectedDoctorName{get;set;}

public List<SelectOption> getDoctorOption () {
        List<SelectOption> options = new List<SelectOption>();
        docList = [SELECT Name, Working_Hours_Start__c, Working_Hours_End__c  
        		   FROM Doctor__c];
        for(Doctor__c doc : docList) {
            options.add(new SelectOption(doc.Name, doc.Name));
        }
        selectedDoctor = findSelectedDoctor();
        doctorAppointmens = getDoctorAppointments();
        return options;
    }
}

Скажите пожалуйста как сделать так что бы в selectDoctorName появилось имя которе выбрали в Visualforce page. И в этом ли проблема?

<apex:pageBlockSection>
          <apex:pageBlockSectionItem >
              <apex:outputLabel value="Select a Doctor"/> 
                  <apex:selectList value="{!selectedDoctorName}" size="1">
                      <apex:selectOptions value="{!doctorOption}" />
                  </apex:selectList>
          </apex:pageBlockSectionItem>
</apex:pageBlockSection>

Пишет что: List has no rows for assignment to SObject

P.S. Это нужно для того что бы вывести на экран информацию о выбраном докторе.

Тоже выполняешь задание ?)

Ну да)

Я застрял на показе времени при выборе врача )

Над каким заданием работаете ребята ? )

В общем и целом , Visualforce page c кастомным контроллером и различными реализациями на этой самой странице . Буду рад помощи ибо в интернете информации маловато )

Я понял в чем там дело. Там надо настроить тег apex:actionFunction
<apex:actionFunction action="{!getDoctorAppointments}" name="selectAppointments" rerender="doctorAppointmentTable, doctorHoursId"/>
getDoctorAppointment это метод дающий список встреч, selectAppointments это имя
этой функции, а в rerender пишешь id блоков которые надо изменить.

Я тут и застрял со временем , получить значения получилось , добавил onchange при выборе врача , теперь осталось добиться чтобы при выборе показывало именно его время

В любом случае предлагаю сколабиться и вдвоем поработать .

Если что , то время нужно получать через id доктора

1 Вподобання

Да в курсе через param отправляю , но пока не работает )

Не там немного иначе нужно

Как же???а то порой желание выкинуть ноут в окно возникало )

public with sharing class AppointmentTableController {

public Appointment__c appointment {get; set;}  
public Doctor__c bDoctor{get;set;}

public List<Doctor__c> doctors{get;set;}
public List<Doctor__c> workHours{get;set;}
public List<Patient__c> patiens{get;set;}
public List<Appointment__c> appList {get;set;} 

public String selectDoctors{get;set;}
public String selectPatients{get;set;}

Public Integer size{get;set;} 
Public Integer pageSize{get; set;}
Public Integer count{get;set;}



public AppointmentTableController(){
    appointment = new Appointment__c(); 
    doctors = [SELECT Name,Working_Hours_End__c,Working_Hours_Start__c FROM Doctor__c ];
    workHours = [SELECT Working_Hours_End__c,Working_Hours_Start__c FROM Doctor__c where Doctor__c.id =:selectDoctors];
    patiens = [SELECT Id,Name FROM Patient__c];
    bDoctor = doctors[0];
    size = 20;
    pageSize = setCon.getPageSize();

}

public ApexPages.StandardSetController setCon {
    get {
        if(setCon == null) {                
            setCon = new ApexPages.StandardSetController(Database.getQueryLocator(
                  [select id,Doctor__r.Name,Patient__r.Name,Duration_in_minutes__c,Appointment_Date__c	FROM Appointment__c]));
            setCon.setPageSize(size);  
            pageSize = setCon.getResultSize();
        }            
        return setCon;
    }
    set;
}


 public List<Appointment__c> getAppointmentList() {
    return (List<Appointment__c>) setCon.getRecords();
}


public List<SelectOption> getselectDoctor(){
    List<SelectOption> lOptions = new List<SelectOption>();
    for (Doctor__c doc : doctors){
        lOptions.add(new SelectOption(doc.Id, doc.Name ));
         workHours = [SELECT Working_Hours_End__c,Working_Hours_Start__c FROM Doctor__c where id =:selectDoctors];
         if(workHours.size()>0)
         // только время не совсем точное получается , ибо совсем не тот id , но с этим можно поработать
         bDoctor = workHours[0];
         //bDoctor = doctors[0];
         
    }
    return lOptions;
}

   public List<SelectOption> getselectPatient(){
    List<SelectOption> lOptions = new List<SelectOption>();
    for (Patient__c pat : patiens){
        lOptions.add(new SelectOption(pat.Id, pat.Name));
         
    }
    return lOptions;
}

public PageReference  RedirDoctors() {
 PageReference newdoc = new PageReference('/lightning/o/Doctor__c/new?count=1');
 newdoc.setRedirect(true);
 return newdoc ;

}

 public PageReference  RedirPatients() {
 PageReference newpat = new PageReference('/lightning/o/Patient__c/new?count=1');
 newpat.setRedirect(true);
 return newpat ;

}

public PageReference save() {
    
    appointment.Doctor__c = selectDoctors;
    appointment.Patient__c = selectPatients;
                      
    PageReference pageRef = Page.AppointmentTable;
    pageRef.setRedirect(true);
     try {
     insert appointment;

     
    }catch (Exception e){
         ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR, 'This doctor already has an appointment at this time.');
         ApexPages.addMessage(myMsg);  
               
    }
    return pageRef;
}

public PageReference refreshPageSize() {
 setCon.setPageSize(size);
 return null;
}

}

Просто мне уже нет резона с этого задания и поэтому не стал делать

А для кого делаете задание? ) тут тема про докторов и тестовые задания уже не первый раз всплывает.

Тестовое задание в VRP Consulting

Спасибо большое, но я уже с этим разобрался :upside_down_face:

Красиво