Loading
Tapaamisten hallinta Salesforce Schedulerin avulla
SisƤllysluettelo
Valitse suodattimet

          Ei tuloksia
          Ei tuloksia
          TƤssƤ on joitain hakuvinkkejƤ

          Tarkista avainsanojesi oikeinkirjoitus.
          KƤytƤ yleisempiƤ hakutermejƤ.
          Laajenna hakua valitsemalla vƤhemmƤn suodattimia.

          Hae koko Salesforce-ohjeesta
          Tyƶaikojen rajoittaminen valikoiden

          Tyƶaikojen rajoittaminen valikoiden

          Jos otat kƤyttƶƶn KƤytƤ palvelualueen toiminta-aikoja ja tyƶvuorojen ajoituskƤytƤntƶƤ -asetuksen, Salesforce Scheduler mƤƤrittƤƤ tyƶvuorojen ja palvelualueen toiminta-aikojen vƤlisen suhteen kaikkien palveluresurssien saatavuuden. Jos kuitenkin haluat rajoittaa tyƶajat vain muutamalle palveluresurssille, kƤytƤ kƤynnistimiƤ.

          Vaaditut versiot

          KƤytettƤvissƤ: Lightning Experience.
          KƤytettƤvissƤ: Enterprise Edition- ja Unlimited Edition -versioissa

          Luo ensin mukautettu totuusarvokenttƤ, OvertimeEnabled, mƤƤrittƤƤksesi resurssit, jotka voivat tyƶskennellƤ palvelualueen toiminta-aikojen ulkopuolella. Muuta seuraavaksi ajoituskƤytƤntƶjƤ siten, ettƤ vain palvelualueiden jƤsenten tyƶvuoroja kƤytetƤƤn palveluresurssien saatavuuden mƤƤrittƤmiseen tapaamisille. Luo sitten Tyƶvuoro-objektille Apex-kƤynnistin, joka suoritetaan ennen kuin Tyƶvuoro luodaan ja pƤivitetƤƤn. KƤynnistin vahvistaa tyƶvuorojen ajoitusten ja varmistaa, ettƤ tyƶvuorojen ajoitus on palvelualueen toiminta-aikojen sisƤllƤ resursseille, joiden OvertimeEnabled-kentƤn arvo on false.

          1. Siirry Palveluresurssi-objektin hallinta-asetusten KentƤt ja suhteet -osioon.
          2. Napsauta Uusi.
          3. Valitse Valintaruutu ja napsauta Seuraava.
          4. SyƶtƤ KentƤn otsikko -kenttƤƤn OvertimeEnabled ja napsauta Seuraava.
          5. MƤƤritƤ kenttƤtason suojaus ja myƶnnƤ kƤyttƶoikeudet tarvittaviin profiileihin ja napsauta sitten Seuraava.
          6. Tallenna muutoksesi.
          7. Kirjoita MƤƤritykset-valikon Pikahaku-kenttƤƤn AjoituskƤytƤnnƶt ja valitse AjoituskƤytƤnnƶt.
          8. Valitse Use service territory member’s shift scheduling policy ja poista Use service territory’s operating hours with shifts scheduling policy -vaihtoehdon valinta.
          9. Siirry tyƶvuoron objektin hallinta-asetusten KƤynnistimet-osioon.
          10. Napsauta Uusi.
          11. Korvaa oletusarvoinen koodi tƤllƤ koodilla.
            trigger ShiftValidation on Shift (before insert, before update) {
                List<Shift> shifts = Trigger.new;
            
                Set<String> sr = new Set<String>();
                for(Shift shift: shifts) {
                    sr.add(shift.ServiceResourceId);
                }
                
                List<ServiceResource> extendedSr = [SELECT Id FROM ServiceResource WHERE  OvertimeEnabled__c = False AND Id IN :sr];
                
                Set<String> srIds = new Set<String>();
                for(ServiceResource sr1: extendedSr) {
                    srIds.add(sr1.Id);
                }
                
                Set<Shift> confirmedShifts = new Set<Shift>();
                Set<String> territoryIds = new Set<String>();
                //We will only run this validation for Shifts with Status Category = "Confirmed" AND Service Resource can work extended hours
                for(Shift shift: shifts) {
                    if(shift.StatusCategory == 'Confirmed' && srIds.contains(shift.ServiceResourceId)) {
                        confirmedShifts.add(shift);
                        territoryIds.add(shift.ServiceTerritoryId);
                    }
                }
            
                if(confirmedShifts.size() > 0) {
                    //Get all Service Territory IDs along with their OperatingHourId
                    ServiceTerritory[] territoryIdsWithOperatingHours = [SELECT Id, OperatingHoursId FROM ServiceTerritory WHERE Id IN :territoryIds];
            
                    Set<String> operatingHourIds = new Set<String>();
                    for(ServiceTerritory st: territoryIdsWithOperatingHours) {
                        //Service Territory may not have Operating Hour defined
                        if(st.OperatingHoursId != null) {
                            operatingHourIds.add(st.OperatingHoursId);
                        }
                    }
            
                    //Get Timeslot information for all Operating Hours got in previous step. We disregard all STM level concurrent timeslots (Shifts with MaxAppointments set to 1)
                    TimeSlot[] timeSlots = [SELECT Id, DayOfWeek, StartTime, EndTime, OperatingHoursId FROM TimeSlot WHERE MaxAppointments = 1 AND OperatingHoursId IN :operatingHourIds];
            
                    //Complex data structure to store Working hours for all Service territories. We will store empty inner map in case Service Territory does not have Operating Hour defined
                    Map<String, Map<String, TimeSlot>> serviceTerritoryWithTimeSlotsPerDay = new Map<String, Map<String, TimeSlot>>();
            
                    for(ServiceTerritory territory: territoryIdsWithOperatingHours) {
                        Map<String, TimeSlot> timeSlotsPerDay = new Map<String, TimeSlot>();
            
                        for(TimeSlot timeSlot: timeSlots) {
                            if(timeslot.OperatingHoursId == territory.OperatingHoursId) {
                                timeSlotsPerDay.put(TimeSlot.DayOfWeek.substring(0,3), TimeSlot);
                            }
                        }
                        serviceTerritoryWithTimeSlotsPerDay.put(territory.Id, timeSlotsPerDay);
                    }
            
                    //Main validation logic for all confirmed shifts
                    for(Shift s: confirmedShifts) {
                        String dayOfShiftStart = ((Datetime) s.StartTime).format('E').substring(0,3);
                        String dayOfShiftEnd = ((Datetime) s.EndTime).format('E').substring(0,3);
            
                        Map<String, TimeSlot> slots = serviceTerritoryWithTimeSlotsPerDay.get(s.ServiceTerritoryId);
            
                        if(dayOfShiftStart != dayOfShiftEnd) {
                            s.addError('Shift should be within Service Territory\'s Operating hours ');
                        } else if(slots.get(dayOfShiftStart) == null || slots.get(dayOfShiftEnd) == null) {
                            s.addError('Operating Hours for Service Territory not set up correctly');
                        }else if(s.StartTime.time() < slots.get(dayOfShiftStart).StartTime || s.EndTime.time() > slots.get(dayOfShiftEnd).EndTime) {
                            s.addError('Shift should be within Service Territory\'s Operating hours ');
                        }
                    }
                }
            }
            
          12. Tallenna muutoksesi.
           
          Ladataan
          Salesforce Help | Article