breadcrumbDescription
Eksempelkode til at opdatere ikke-på-synkronisering-kontakttypetilknytning
Hvis du sletter, tilføjer eller redigerer en registreringstypetilknytning med en kontakttype, gælder ændringerne kun for de nye kontrakter. Hvis du vil opdatere de ikke-på-synkronisering-kontrakter, kan systemadministratoren køre en tilpasset kode.
Systemadministrator kan bruge denne eksempelkode til at redigere kontrakttilknytningen for eksisterende kontrakter. Åbn Developer Console, gå til DebugOpen Execute Anonymous Window, indsæt eksempelkoden og klik på Execute. Hvis du ønsker flere oplysninger om brug af Apex-klasse, kan du se Apex Developer Guide.
Anvendelsessituation: Kontrakttype Sundhed svarer til registreringstyperne Inpatient Care og Optpatient Care. Der er 1.000 kontraktregistreringer, der har denne tilknytning. Du ændrer tilknytningen for registreringstypen Inpatient Care til kontrakttypen Omsætning, og ud af de eksisterende 1.000 registreringer er der 500 Inpatient Care-registreringstyper, der peger på Contract Type Health. Kontraktrækkerne vil fortsat vise kontrakttypen som Tilstand og registreringstypen som Patientbehandling, da applikationen Salesforce Contracts ikke automatisk opdaterer de kontraktregistreringer, der har registreringstypen Patientbehandling med kontrakttypen Indtjening. Det er kun systemadministratoren, der kan anvende ændringerne ved brug af en eksempelkode. Men når der oprettes en ny kontrakt med registreringstypen Patientbehandling, vil kontrakttypen være Omsætning.
Eksempelkoden henter en liste over kontrakttyper. Du kan overføre ethvert antal kontrakttyper og justere tilknytningen. Du kan redigere forespørgslen for at foretage ændringer og hente kontrakter med specifikke statusser, f.eks. Kladde, Kontrakt udløbet, Annulleret osv.
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());
}
}
}
}
}
}
}
}
