В общем и целом , Visualforce page c кастомным контроллером и различными реализациями на этой самой странице . Буду рад помощи ибо в интернете информации маловато )
Я понял в чем там дело. Там надо настроить тег apex:actionFunction <apex:actionFunction action="{!getDoctorAppointments}" name="selectAppointments" rerender="doctorAppointmentTable, doctorHoursId"/>
getDoctorAppointment это метод дающий список встреч, selectAppointments это имя
этой функции, а в rerender пишешь id блоков которые надо изменить.
Я тут и застрял со временем , получить значения получилось , добавил onchange при выборе врача , теперь осталось добиться чтобы при выборе показывало именно его время
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;
}