Loading
Palvelu
Tapausten virstanpylväiden automaattinen täyttäminen Apex

Tapausten virstanpylväiden automaattinen täyttäminen Apex

Luo Apex-käynnistin, joka merkitsee tietyt ehdot täyttävien tapausten virstanpylväät automaattisesti valmiiksi. Määritä käynnistimessäsi, mitkä tapahtumien ja niihin liittyvien tapausten ehtojen tulee täyttyä, jotta virstanpylväs merkitään valmiiksi. Voit laatia samankaltaisen käynnistimen merkitsemään työtilausten virstanpylväät automaattisesti valmiiksi.

Vaaditut versiot

Näytä tuetut versiot.
Tarvittavat käyttöoikeudet
Apex-käynnistimien ja -luokkien määrittäminen: Apex-laadintaoikeus
Vihje
Vihje Lightning Experiencessa tukiedustajat voivat napsauttaa Virstanpylväät-komponentin Määritä valmiiksi -linkkiä merkitäkseen virstanpylvään valmiiksi. Se ei ole täysin automaattista, mutta se on helppoa. Lisätietoja on kohdassa Virstanpylväiden seuraajan määrittäminen.

Seuraavat käynnistimet merkitsevät tietyntyyppiset virstanpylväät valmiiksi, kun niiden tapaus täyttää tietyt ehdot. Tarjoamme myös virstanpylväille tarkoitetun Apex-apuluokan ja siihen liittyviä yksikkötestejä. Määritä virstanpylvään apuluokka ennen käynnistimien käyttämistä.

Virstanpylväiden Apex-apuluokka
Apex-luokat pienentävät käynnistimiäsi ja tekevät Apex-koodin uudelleenkäyttämisestä ja ylläpitämisestä helpompaa. Tämän Apex-luokan määrittäminen organisaatiollesi:
  1. Kirjoita Määritykset-valikon Pikahaku-kenttään Apex-luokat ja napsauta Apex-luokat.
  2. Napsauta Uusi.
  3. Kopioi luokan teksti ja liitä se tekstikenttään.
  4. Napsauta Tallenna.
public class MilestoneUtils {
    public static void completeMilestone(List<Id> caseIds, 
            String milestoneName, DateTime complDate) {  
    List<CaseMilestone> cmsToUpdate = [select Id, completionDate
            from CaseMilestone cm
            where caseId in :caseIds and cm.MilestoneType.Name=:milestoneName 
            and completionDate = null limit 1];
    if (cmsToUpdate.isEmpty() == false){
        for (CaseMilestone cm : cmsToUpdate){
            cm.completionDate = complDate;
            }
        update cmsToUpdate;
        }
    }
}
Apex-luokan yksikkötesti
Voit määrittää Apex-yksikkötestejä Developer Console -konsolista tarkastaaksesi koodisi ongelmien varalta.
/**
* This class contains unit tests for validating the behavior of Apex classes
* and triggers.
*
* Unit tests are class methods that verify whether a particular piece
* of code is working properly. Unit test methods take no arguments,
* commit no data to the database, and are flagged with the testMethod
* keyword in the method definition.
*
* All test methods in an organization are executed whenever Apex code is deployed
* to a production organization to confirm correctness, ensure code
* coverage, and prevent regressions. All Apex classes are
* required to have at least 75% code coverage in order to be deployed
* to a production organization. In addition, all triggers must have some code coverage.
*
* The @isTest class annotation indicates this class only contains test
* methods. Classes defined with the @isTest annotation do not count against
* the organization size limit for all Apex scripts.
*
* See the Apex Language Reference for more information about Testing and Code Coverage.
*/
@isTest
private class MilestoneTest {

static testMethod void TestCompleteMilestoneCase(){

List<Account> acts = new List<Account>();
Account myAcc = new Account(Name='TestAct', phone='1001231234');
acts.add(myAcc);

Account busAcc = new Account(Name = 'TestForMS', phone='4567890999');
acts.add(busAcc);
insert acts;
Contact cont = new Contact(FirstName = 'Test', LastName = 'LastName', phone='4567890999', accountid = busAcc.id);
insert(cont);

Id contactId = cont.Id;

Entitlement entl = new Entitlement(Name='TestEntitlement', AccountId=busAcc.Id);
insert entl;

String entlId;
if (entl != null)
entlId = entl.Id; 

List<Case> cases = new List<Case>{};
if (entlId != null){
Case c = new Case(Subject = 'Test Case with Entitlement ', 
EntitlementId = entlId, ContactId = contactId);
cases.add(c);
}
if (cases.isEmpty()==false){
insert cases;
List<Id> caseIds = new List<Id>();
for (Case cL : cases){
caseIds.add(cL.Id);
}
milestoneUtils.completeMilestone(caseIds, 'First Response', System.now());
}
}

static testMethod void testCompleteMilestoneViaCase(){

List<Account> acts = new List<Account>();
Account myAcc = new Account(Name='TestAct', phone='1001231234');
acts.add(myAcc);

Account busAcc = new Account(Name = 'TestForMS', phone='4567890999');
acts.add(busAcc);
insert acts;
Contact cont = new Contact(FirstName = 'Test', LastName = 'LastName', phone='4567890999', accountid = busAcc.id);
insert(cont);

Id contactId = cont.Id;

Entitlement entl = new Entitlement(Name='TestEntitlement', AccountId=busAcc.Id);
insert entl;

String entlId;
if (entl != null)
entlId = entl.Id; 

List<Case> cases = new List<Case>{};
for(Integer i = 0; i < 1; i++){
Case c = new Case(Subject = 'Test Case ' + i);
cases.add(c);
if (entlId != null){
c = new Case(Subject = 'Test Case with Entitlement ' + i, 
EntitlementId = entlId);
cases.add(c);
}
}
}
}
Esimerkkikäynnistin 1
Voit luoda virstanpylvään nimeltään Ratkaisuaika, joka vaatii, että tapaukset suljetaan tietyn ajan kuluessa. Tämä on hyvä tapa varmistaa, että palvelutasosopimuksissa kuvattuja tapausten ratkaisuehtoja noudatetaan. Tämä tapausten esimerkkikäynnistin merkitsee Ratkaisuaika-virstanpylvään valmiiksi, kun tapaus suljetaan. Tällä tavalla tukiedustajan ei tarvitse merkitä manuaalisesti suoritettua virstanpylvästä tapauksen sulkemisen jälkeen.
Huomautus
Huomautus Tämä käynnistin viittaa virstanpylväiden testiluokkaan, joten muista määrittää testiluokka ensin.

Tämän käynnistimen määrittäminen organisaatiollesi:

  1. Kirjoita Määritykset-valikon Pikahaku-kenttään Tapausten käynnistimet ja napsauta Tapausten käynnistimet.
  2. Napsauta Uusi.
  3. Kopioi käynnistimen teksti ja liitä se tekstikenttään.
  4. Napsauta Tallenna.
trigger CompleteResolutionTimeMilestone on Case (after update) {
    if (UserInfo.getUserType() == 'Standard'){
        DateTime completionDate = System.now(); 
            List<Id> updateCases = new List<Id>();
            for (Case c : Trigger.new){
                    if (((c.isClosed == true)||(c.Status == 'Closed'))&&((c.SlaStartDate 
                        <= completionDate)&&(c.SlaExitDate == null)))
        updateCases.add(c.Id);
        }
    if (updateCases.isEmpty() == false)
        milestoneUtils.completeMilestone(updateCases, 'Resolution Time', completionDate);
    }
}
Esimerkkikäynnistin 2
Voit luoda virstanpylvään nimeltään Ensimmäinen vastaus, joka vaatii tukiedustajia ottamaan yhteyttä tapauksen yhteyshenkilöön X minuutin tai tunnin kuluessa tapauksen luomisesta. Tämä on hyvä tapa varmistaa, että tukitiimisi ottaa yhteyttä tapausten yhteyshenkilöihin mahdollisimman pian. Tämä sähköpostien esimerkkikäynnistin merkitsee Ensimmäinen vastaus -virstanpylvään valmiiksi, kun tapauksen yhteyshenkilölle lähetetään sähköpostia. Tällä tavalla tukiedustajan ei tarvitse merkitä Ensimmäisen vastauksen virstanpylvästä manuaalisesti Valmis, kun hän lähettää tapauksen yhteyshenkilölle sähköpostin.
Huomautus
Huomautus Tämä käynnistin viittaa virstanpylväiden testiluokkaan, joten muista määrittää testiluokka ensin.

Tämän käynnistimen määrittäminen organisaatiollesi:

  1. Kirjoita Määritykset-valikon Pikahaku-kenttään Sähköpostiviestien käynnistimet ja napsauta Sähköpostiviestien käynnistimet.
  2. Napsauta Uusi.
  3. Kopioi käynnistimen teksti ja liitä se tekstikenttään.
  4. Napsauta Tallenna.
trigger CompleteFirstResponseEmail on EmailMessage (after insert) {
    if (UserInfo.getUserType() == 'Standard'){
        DateTime completionDate = System.now();
        Map<Id, String> emIds = new Map<Id, String>();
        for (EmailMessage em : Trigger.new){
            if(em.Incoming == false)
                emIds.put(em.ParentId, em.ToAddress);
        }
        if (emIds.isEmpty() == false){
            Set <Id> emCaseIds = new Set<Id>();
            emCaseIds = emIds.keySet();
                List<Case> caseList = [Select c.Id, c.ContactId, c.Contact.Email,
                    c.OwnerId, c.Status,
                    c.EntitlementId,
                    c.SlaStartDate, c.SlaExitDate
                    From Case c where c.Id IN :emCaseIds];
            if (caseList.isEmpty()==false){
                    List<Id> updateCases = new List<Id>();
                    for (Case caseObj:caseList) {
                        if ((emIds.get(caseObj.Id)==caseObj.Contact.Email)&&
                            (caseObj.Status == 'In Progress')&&
                            (caseObj.EntitlementId != null)&&
                            (caseObj.SlaStartDate <= completionDate)&&
                            (caseObj.SlaStartDate != null)&&
                            (caseObj.SlaExitDate == null))
                                updateCases.add(caseObj.Id);
                    }
                    if(updateCases.isEmpty() == false)
                        milestoneUtils.completeMilestone(updateCases, 
                                'First Response', completionDate);
            }
        }
    }        
}
Esimerkkikäynnistin 3
Edellinen käynnistin koski sähköpostiviestejä, kun taas tämä tapausten kommenttien käynnistin merkitsee Ensimmäinen vastaus -virstanpylvään valmiiksi, kun tapaukseen tehdään julkinen kommentti. Voit käyttää sitä, jos tukiehtosi hyväksyvät tapauksen julkisen kommentin ensimmäisenä vastauksena.
Huomautus
Huomautus Tämä käynnistin viittaa virstanpylväiden testiluokkaan, joten muista määrittää testiluokka ensin.

Tämän käynnistimen määrittäminen organisaatiollesi:

  1. Kirjoita Määritykset-valikon Pikahaku-kenttään Tapauksen huomautuksen käynnistimet ja napsauta Tapauksen huomautuksen käynnistimet.
  2. Napsauta Uusi.
  3. Kopioi käynnistimen teksti ja liitä se tekstikenttään.
  4. Napsauta Tallenna.
trigger CompleteFirstResponseCaseComment on CaseComment (after insert) {
    if (UserInfo.getUserType() == 'Standard'){
        DateTime completionDate = System.now();
        List<Id> caseIds = new List<Id>();
        for (CaseComment cc : Trigger.new){
                if(cc.IsPublished == true)
                caseIds.add(cc.ParentId);
        }
        if (caseIds.isEmpty() == false){
            List<Case> caseList = [Select c.Id, c.ContactId, c.Contact.Email,
                    c.OwnerId, c.Status,
                    c.EntitlementId, c.SlaStartDate,
                    c.SlaExitDate
                    From Case c
                    Where c.Id IN :caseIds];
        if (caseList.isEmpty() == false){
            List<Id> updateCases = new List<Id>();
            for (Case caseObj:caseList) {
                if ((caseObj.Status == 'In Progress')&&
                        (caseObj.EntitlementId != null)&&
                        (caseObj.SlaStartDate <= completionDate)&&
                        (caseObj.SlaStartDate != null)&&
                        (caseObj.SlaExitDate == null))
                    updateCases.add(caseObj.Id);
                }
                if(updateCases.isEmpty() == false)
                    milestoneUtils.completeMilestone(updateCases, 
                    'First Response', completionDate);
            }
        }
    }
}
 
Ladataan
Salesforce Help | Article