Loading
Esimerkki koodista, jolla voidaan päivittää Synkronoinnin lopettamaton sopimustyypin kartoitus

Esimerkki koodista, jolla voidaan päivittää Synkronoinnin lopettamaton sopimustyypin kartoitus

Jos poistat, lisäät tai muokkaat tietuetyypin kartoitusta yhteyshenkilötyypillä, muutokset koskevat vain uusia sopimuksia. Järjestelmän pääkäyttäjä voi suorittaa mukautetun koodin päivittääkseen synkronoimattomat sopimukset.

Järjestelmän pääkäyttäjä voi käyttää tätä esimerkkikoodia muokatakseen olemassa olevien sopimusten kartoitusta. Avaa Developer Console, avaa Debug Open Execute Anonymous Window, liitä esimerkkikoodi ja napsauta Execute. Lisätietoja Apex-luokan käytöstä on Apex Developer Guide -oppaassa.

Käyttötapa: Sopimustyyppi Health vastaa tietuetyyppejä Inpatient Care ja Outpatient Care. Tässä kartoituksessa on 1 000 sopimustietuetta. Muuta tietuetyypin Inpatient Care kartoitus sopimustyypiksi Revenue ja olemassa olevista 1000 tietueesta on 500 Inpatient Care -tietuetyyppiä, jotka osoittavat Sopimustyypin kuntoon. Sopimusten riveillä näytetään edelleen sopimustyypiksi Health ja tietuetyypiksi Inpatient Care, koska Salesforce Contracts -sovellus ei päivitä automaattisesti sopimustietueita, joiden tietuetyyppi on Inpatient Care ja joiden sopimustyyppi on Revenue. Vain järjestelmän pääkäyttäjä voi ottaa muutokset käyttöön käyttämällä esimerkkikoodia. Kun kuitenkin luodaan uusi sopimus, jonka tietuetyyppi on Inpatient Care, sopimuksen tyyppi on Revenue.

Huomautus
Huomautus Sopimusobjektin Sopimustyyppi-kenttä on oletusarvoisesti Vain luku -muotoinen kaikille ei-pääkäyttäjäprofiileille. Käyttäjät voivat päivittää sopimusobjektin Poissa-yhteensopivuuden sopimustyypin profiilitasolla kenttätason suojauksen perusteella manuaalisesti tai käyttämällä Apex.

Esimerkkikoodi noutaa sopimustyyppien luettelon. Voit välittää minkä tahansa sopimustyypin ja säätää kartoitusta. Voit muokata kyselyä tehdäksesi muutoksia ja noutaaksesi sopimuksia, joiden tila on tietty, kuten Luonnos, Sopimus vanhentunut, Peruutettu jne.

public class SyncContractTypes {
   
	// use-case1 : sync contracts when existing RecordType that's associated with contracts is newly mapped to a existing ContractType
	// use-case2 : sync contracts when existing RecordType that's associated with contracts is removed from ContractType object - ContractType, SubType mapping
	// use-case3 : sync contracts when existing RecordType that's associated with contracts is removed from ContractType object - ContractType, SubType mapping  and mapped to existing ContractType, SubType
   
	public static void syncOutOfSyncContractTypes(List<String> contractTypes) {
       
    	Map<String,String> contractTypeSubtypeMap = new Map<String,String>();
    	Map<String,String> subtypeContractTypeMap = new Map<String,String>();
       
    	if(contractTypes != null && !contractTypes.isEmpty()) {
       	// Here we are querying all the contractTypes to support a use-case2
       	// where a SubType is removed from a contractType and mapped to another existing contractType
       	// If customers don't want to update when existing subType is mapped to another existing contractType they can
       	// restrict this by adding a where condition, WHERE MasterLabel IN :contractTypes
        	List<ContractType> contractTypeList = [SELECT MasterLabel,SubTypes FROM ContractType];
           
        	if(contractTypeList!= null && !contractTypeList.isEmpty()) {
            	for( ContractType c : contractTypeList) {
                	contractTypeSubtypeMap.put(c.MasterLabel, c.SubTypes);
                	if(c.subTypes != null) {
                    	for(String s : c.subTypes.split(',')) {
                        	subtypeContractTypeMap.put(s, c.MasterLabel);
                    	}
                	}
            	}
        	}
           
        	for(String ct : contractTypes) {
           
            	String contractType = (contractTypeSubtypeMap.containsKey(ct)) ? ct : '';
               
            	List<String> subTypesList = (contractTypeSubtypeMap.get(ct) != null) ? contractTypeSubtypeMap.get(ct).split(',') : new List<String>();
               
            	// we are applying basic filters here, please modify them accordingly to your use case
            	List<Contract> contracts = [
                	SELECT Id, ContractType, Name, RecordType.Name
                	FROM Contract
                	WHERE (ContractType =: contractType OR RecordType.Name IN :subTypesList)
                        	AND IsAssociatedWithCLM = true
                        	AND (NOT (ContractType =: contractType AND RecordType.Name IN : subTypesList))];
               
            	List<Contract> contractsToUpdate = new List<Contract>();
            	// check if any of the contracts are out of sync and update them
            	for(Contract c : contracts) {
                	String RecordTypeName = c.RecordType.Name;
                	if(subTypesList.contains(RecordTypeName) && c.ContractType != contractType) {
                    	c.ContractType = contractType;
                    	contractsToUpdate.add(c);
                	} else if(!subTypesList.contains(RecordTypeName) ){
                    	// check to see if any other ContractTypes has this RecordType as SubType
                    	c.ContractType = (subtypeContractTypeMap.get(RecordTypeName) != null) ? subtypeContractTypeMap.get(RecordTypeName) : '';
                    	contractsToUpdate.add(c);
                	}
                   
            	}           
            	if(contractsToUpdate != null && !contractsToUpdate.isEmpty()) {
                   
                	Database.SaveResult[] saveResult = Database.Update(contractsToUpdate, false);
                	for (Database.SaveResult sr : saveResult) {
                    	if (sr.isSuccess()) {
                        	// Operation was successful, so get the ID of the record that was processed
                        	System.debug('Successfully updated contract. Contract ID: ' + sr.getId());
                    	}
               	     else {
                        	// Operation failed, so get all errors               
                        	for(Database.Error err : sr.getErrors()) {
                            	System.debug('The following error has occurred.');    	            
                            	System.debug(err.getStatusCode() + ': ' + err.getMessage());
                            	System.debug('Contract fields that affected this error: ' + err.getFields());
                        	}
                   	}
                	}
            	}
        	}
  	}
	}
}
 
Ladataan
Salesforce Help | Article