खोज…


टिप्पणियों

परिचय

कस्टम ऑब्जेक्ट्स, जिनके आधार पर रिकॉर्ड हैं, के विपरीत, कस्टम सेटिंग्स आपको अपने ऑर्गन में कस्टम डेटा सेट का उपयोग करने देती हैं, या कस्टम मानदंडों के आधार पर विशेष उपयोगकर्ताओं या प्रोफाइल को अलग करती हैं। इसका मतलब है, उदाहरण के लिए, कि व्यवस्थापक एकल उपयोगकर्ता या प्रोफाइल के लिए वर्कफ़्लो / सत्यापन नियमों को निष्क्रिय करने के लिए पदानुक्रम कस्टम सेटिंग्स को संपादित कर सकते हैं, बिना उन्हें पूरे ऑर्गन के लिए बंद करने के लिए (ऊपर पदानुक्रम कस्टम सेटिंग्स को अक्षम करने / सत्यापन नियमों का उपयोग करने के लिए ऊपर उदाहरण देखें) )।

सत्यापन नियमों को आमतौर पर अस्थायी रूप से अक्षम करने की आवश्यकता होती है जब:

  • कोड पुराने रिकॉर्ड्स को अपडेट कर रहा है, जो पिछली बार एक सत्यापन नियम सक्रिय होने से पहले संपादित किए गए थे और इसलिए नए नियम के मानदंडों को पूरा नहीं करते हैं।
  • कोड एक सत्यापन नियम के मानदंडों के लिए आवश्यक मानों के बिना नए रिकॉर्ड सम्मिलित कर रहा है।

वर्कफ़्लो नियमों को आमतौर पर अस्थायी रूप से अक्षम करने की आवश्यकता होती है जब:

  • वे एक ईमेल अलर्ट या फ़ील्ड अपडेट को ट्रिगर करेंगे जो रिकॉर्ड में आपके द्वारा किए जा रहे परिवर्तनों को अधिलेखित या बाधित करेगा।

कस्टम सेटिंग ग्रांट का उपयोग कोड पर कुछ घोषणात्मक नियंत्रण को स्वीकार करता है इसलिए कई उपयोग मामलों में से एक यह है कि जब उपयोग किया जाता है, तो वे ट्रिगर को अक्षम करने के लिए कोड को तैनात करने के लिए अनावश्यक बना सकते हैं (ऊपर दिए गए पदानुक्रम कस्टम सेटिंग्स का उपयोग करते हुए शीर्ष पर उदाहरण अक्षम करने के लिए देखें) )।

डेवलपर्स के लिए एक महत्वपूर्ण लाभ यह है कि कस्टम सेटिंग का डेटा एप्लिकेशन कैश में उजागर होता है, जो डेटाबेस में बार-बार पूछे जाने वाले प्रश्नों की लागत के बिना कुशल पहुंच सक्षम करता है। यह डेटा फ़ार्मूला फ़ील्ड, सत्यापन नियम, प्रवाह, एपेक्स और SOAP API द्वारा उपयोग किया जा सकता है - Salesforce प्रलेखन देखें

कस्टम सेटिंग्स के लिए सीमाएँ और विचार यहाँ प्रलेखित हैं

सूची कस्टम सेटिंग्स

सूची कस्टम सेटिंग्स भी बनाना संभव है, सामान्य उपयोग के मामलों में दो-अक्षर राज्य संक्षिप्तिकरण, अंतर्राष्ट्रीय डायलिंग उपसर्ग, और उत्पादों के लिए कैटलॉग नंबर शामिल हैं। हालाँकि Salesforce अब सूची कस्टम सेटिंग्स के बजाय उपयोग कस्टम मेटाडेटा प्रकारों को बढ़ावा दे रहा है।

जब आप एक नया कस्टम सेटिंग बनाने के लिए जाते हैं, तो निम्न संदेश प्रदर्शित होगा

टिप: ऐप कॉन्फ़िगरेशन के लिए कस्टम मेटाडेटा प्रकार का उपयोग करें
यदि आप सूची कस्टम सेटिंग्स का उपयोग करने के बारे में सोच रहे हैं, तो इसके बजाय कस्टम मेटाडेटा प्रकारों का उपयोग करने पर विचार करें। सूची कस्टम सेटिंग्स के विपरीत, आप संकुल या मेटाडेटा एपीआई टूल का उपयोग करके कस्टम मेटाडेटा प्रकार के रिकॉर्ड को माइग्रेट कर सकते हैं।

कस्टम मेटाडेटा प्रकारों में अतिरिक्त लाभ बनाम सूची कस्टम सेटिंग्स हैं जैसा कि इस उत्तर में वर्णित है। और CMDs के प्रमुख डेवलपर के अनुसार "स्टेरॉयड पर कस्टम सेटिंग्स की तुलना में कस्टम मेटाडेटा प्रकारों के लिए बहुत अधिक योजना बनाई गई है।"

कस्टम सेटिंग्स बनाना और प्रबंधित करना

सृष्टि

एक कस्टम सेटिंग बनाने के लिए, यहां जाएं:

क्लासिक
सेटअप> विकसित> कस्टम सेटिंग्स> नया

आकाशीय बिजली
सेटअप> कस्टम कोड> कस्टम सेटिंग्स> नया

अपनी सेटिंग बनाएं (पदानुक्रम और सूची कस्टम सेटिंग्स के बीच अंतर के लिए इस दस्तावेज़ में बाद में रिमार्क्स देखें)। जब तक आप प्रबंधित पैकेज में अपनी सेटिंग को लागू करने की योजना नहीं बनाते हैं, तब तक आप दृश्यता पिकलिस्ट को अनदेखा कर सकते हैं।

अपने सेटिंग फ़ील्ड बनाने के लिए न्यू बटन पर क्लिक करें और कस्टम फ़ील्ड बनाने के लिए सामान्य प्रक्रिया का पालन करें।

प्रबंध

एक बार जब आप अपना क्षेत्र बना लेते हैं, तो आप प्रबंधित बटन पर क्लिक करके सेटिंग को कॉन्फ़िगर करना शुरू कर सकते हैं।

यदि आप एक नया दृश्य बनाते हैं और किसी भी फ़ील्ड को शामिल करते हैं, तो एक नज़र में, अपने आप को सेटिंग का एक व्यापक अवलोकन प्रदान करने के लिए सेटिंग को प्रबंधित करना आसान है। सेटअप स्वामी वह उपयोगकर्ता या प्रोफ़ाइल है जिसके लिए सेटिंग लागू होती है।

Org स्तर पर सेटिंग को प्रबंधित करने के लिए, डिफ़ॉल्ट संगठन स्तर मान शीर्ष लेख के ऊपर नया बटन क्लिक करें (नीचे लाल बॉक्स में)।

उपयोगकर्ता या प्रोफ़ाइल स्तर पर सेटिंग का प्रबंधन करने के लिए, नीचे नीले बॉक्स में नया बटन पर क्लिक करें।

कस्टम सेटिंग संपादित करें

वर्कफ़्लो / सत्यापन नियमों को अक्षम करने के लिए पदानुक्रम कस्टम सेटिंग्स का उपयोग करना

अपने अनुसार सेटिंग

अपने अनुसार सेटिंग

कस्टम सेटिंग फ़ील्ड

कस्टम सेटिंग फ़ील्ड

कस्टम सेटिंग फ़ील्ड मान

जब क्षेत्र की जाँच की जाती है तो सत्यापन नियम अक्षम हो जाएगा, चल रहे उपयोगकर्ता के लिए या इस उदाहरण में, उनका प्रोफ़ाइल -

कस्टम सेटिंग फील्ड एडिट - प्रोफाइल

नियम को पूरे Salesforce संगठन के लिए भी अक्षम किया जा सकता है -

कस्टम सेटिंग फील्ड एडिट - ऑर्ग

मान्यता के नियम

AND(
  /* the below is the reference to the Val_Rule_Cntrlr__c custom setting's checkbox field All_Opportunity_Disabled__c
  */
  $Setup.Val_Rule_Cntrlr__c.All_Opportunity_Disabled__c = FALSE,

  /* the below is the remainder of the validation rule's formula
  */
  CloseDate < TODAY()
)

उपरोक्त नियम में, मानदंड के दोनों टुकड़ों को TRUE मूल्यांकन करना चाहिए ताकि नियम को ट्रिगर किया जा सके।

चूँकि All_Opportunity_Disabled__c चेकबॉक्स TRUE मूल्यांकन करेगा जब चालू उपयोगकर्ता का प्रोफ़ाइल सिस्टम प्रशासक होगा, तो नियम FALSE मूल्यांकन करेगा।

वर्कफ़्लो नियम

वर्कफ़्लो नियमों को निष्क्रिय करने के लिए समान दृष्टिकोण लागू किया जा सकता है।

शीर्ष कोड को अक्षम करने के लिए पदानुक्रम कस्टम सेटिंग्स का उपयोग करना

व्याख्या

इस उदाहरण में क्लोज डेट ऑफ़ द ऑपर्च्युनिटी को बदलने के लिए एक साधारण ट्रिगर बनाया गया है, जिसे भविष्य में 10 दिनों के लिए डाला या अपडेट किया जाएगा।

एपेक्स कंट्रोलर कस्टम सेटिंग का चेकबॉक्स फ़ील्ड यूजर / प्रोफाइल / ओआरजी स्तर पर कोड को अक्षम करने में सक्षम बनाता है।

एपेक्स क्लास

trigger CloseDateUpdate on Opportunity (before insert, before update) {
    
    Id userId;
    Apx_Cntrlr__c userApexController;
    Boolean userSetting;
    
    userId = userinfo.getUserId();
    userApexController = Apx_Cntrlr__c.getInstance(userId);
    userSetting = userApexController.Close_Date_Update_Disabled__c;

    if (userSetting == false) {
        for(Opportunity opp : Trigger.new) {
            opp.CloseDate = date.today().addDays(10);
        }
    }
    
}

अध्याय परीक्षा

@isTest
public class CloseDateUpdateTest {
    
    @testSetup
    static void dataSetup() {
        
        Profile p = [SELECT Id FROM Profile WHERE Name = 'System Administrator' LIMIT 1];
        
        User u = new User(LastName = 'Test',Alias = 't1',Email = '[email protected]',Username = '[email protected]',ProfileId = p.Id,TimeZoneSidKey = 'America/Denver',LocaleSidKey = 'en_US',EmailEncodingKey = 'UTF-8',LanguageLocaleKey = 'en_US');
        insert u;
    }
    
    static testMethod void testCloseDateUpdateEnabled() {
        
        User u = [SELECT Id FROM User WHERE Username = '[email protected]'];
        // set the custom setting field to FALSE so that the trigger is not deactivated
        Apx_Cntrlr__c apexController = new Apx_Cntrlr__c(SetupOwnerId = u.Id,Close_Date_Update_Disabled__c = false);
        upsert apexController;
        
        Opportunity[] opportunities1 = new Opportunity[]{};
        
        test.startTest();
        system.runAs(u){
                
                for(integer i = 0; i < 200; i++) {
                    opportunities1.add(new Opportunity(
                        Name          = 'Test Opp ' + i,
                        OwnerId       = u.Id,
                        StageName     = 'Prospecting',
                        CloseDate     = date.today().addDays(1),
                        Amount        = 100));
                }
            insert opportunities1;
        }
        test.stopTest();
        
        List<Opportunity> opportunities2 = [SELECT CloseDate FROM Opportunity];
        
        for(Opportunity o : opportunities2){
            system.assertEquals(date.today().addDays(10), o.closeDate, 'CloseDateUpdate trigger should have changed the Opportunity close date as it was not disabled by the apexController custom setting');
        }
    }
    
    static testMethod void testCloseDateUpdateDisabled() {
        
        User u = [SELECT Id FROM User WHERE Username = '[email protected]'];
        // set the custom setting field to TRUE to deactivate the trigger
        Apx_Cntrlr__c apexController = new Apx_Cntrlr__c(SetupOwnerId = u.Id,Close_Date_Update_Disabled__c = true);
        upsert apexController;
        
        Opportunity[] opportunities1 = new Opportunity[]{};
            
        test.startTest();
        system.runAs(u){
            
            for(integer i = 0; i < 200; i++) {
                opportunities1.add(new Opportunity(
                    Name          = 'Test Opp ' + i,
                    OwnerId       = u.Id,
                    StageName     = 'Prospecting',
                    CloseDate     = date.today().addDays(1),
                    Amount        = 100));
            }
            insert opportunities1;
        }
        test.stopTest();
        
        List<Opportunity> opportunities2 = [SELECT CloseDate FROM Opportunity];
        
        for(Opportunity o : opportunities2){
            system.assertEquals(date.today().addDays(1), o.closeDate, 'CloseDateUpdate trigger should not have changed the Opportunity close date as it was disabled by the apexController custom setting');
        }
    }
        
}

शीर्ष संहिता में पदानुक्रम कस्टम सेटिंग्स को अपडेट करना

आप सत्यापन या वर्कफ़्लो नियमों को बंद करने के लिए अपने कोड के निष्पादन के दौरान अपने कस्टम सेटिंग को अपडेट करना चाह सकते हैं।

नीचे दिए गए कोड में, मैंने एक समय- सारिणी एपेक्स क्लास बनाई है, जो किसी भी अवसर की क्लोज डेट को अपडेट करेगा, जिसकी क्लोज डेट वर्तमान तारीख से 6 दिन या उससे कम है, जो कि भविष्य में तारीख को 20 दिनों में बदल देगा।

मैं किसी भी सत्यापन नियमों को निष्क्रिय करने के लिए अपने कस्टम सेटिंग Val_Rule_Cntrlr__c का उपयोग करूंगा, जो मुझे मेरे मानदंडों को पूरा करने वाले अवसरों को अपडेट करने से रोकेंगे।

global class Scheduled_OppCloseDateUpdate implements Schedulable {

    global void execute(SchedulableContext SC) {
        updOpportunityCloseDates();
    }

    global void updOpportunityCloseDates() {
        
        Id userId;
        Val_Rule_Cntrlr__c setting;
        Boolean validationRulesAlreadyDisabled;
        List<Opportunity> processedOpps = new List<Opportunity>();
        Date d;
        
        // get running user's Id
        userId = userinfo.getUserId();
        // retrieve Custom Setting status, for running user
        setting = Val_Rule_Cntrlr__c.getInstance(userId);
        
        // if the setting field is false, update it to disable validation rules
        if (setting.All_Opportunity_Disabled__c == false) {
            setting.All_Opportunity_Disabled__c = true;
            upsert setting;
        }
        // if the setting field was already true, there's no need to disable it
        // but it shouldn't be switched to false by this class once the process has been completed
        else {
            validationRulesAlreadyDisabled = true;
        }
        
        // execute code to manage business process
   
        d = system.today().addDays(6);
        
        for(Opportunity o : [SELECT Id, CloseDate
                               FROM Opportunity
                              WHERE CloseDate <= :d
                                // class only updates open Opportunities
                                AND Probability > 0 AND Probability < 100])
        {
            o.CloseDate = System.today().addDays(20);
            processedOpps.add(o);
        }
        
        if (processedOpps.size() > 0) {
            update processedOpps;
        }
        
        // reactivate validation rules
        if (validationRulesAlreadyDisabled == false) {
            setting.All_Opportunity_Disabled__c = false;
            upsert setting;
        }
        
    }
    
}

यह सुनिश्चित करने के लिए कि मेरे सत्यापन नियमों को मेरी कक्षा में अपनी कस्टम सेटिंग में परिवर्तन करके निष्क्रिय किया जा रहा है, मैंने एक चेकबॉक्स फ़ील्ड Trigger_Validation_Rule__c बनाया है (जो उपयोगकर्ताओं को दिखाई नहीं देगा या पेज लेआउट में जोड़ा नहीं जाएगा) और इस मापदंड के साथ सत्यापन नियम:

AND(
  $Setup.Val_Rule_Cntrlr__c.All_Opportunity_Disabled__c = FALSE,
  Trigger_Validation_Rule__c = TRUE,

  /* allow the above criteria to be met while inserting the Opportunities, without triggering the rule, in the @testSetup portion of the test */
  NOT(ISNEW())
)

मैंने अपने अवसर बनाते समय चेकबॉक्स फ़ील्ड को true सेट किया ताकि नियम मानदंड पूरा हो जाए, यदि कस्टम सेटिंग फ़ील्ड को मेरे कोड द्वारा संपादित नहीं किया गया है।

@isTest
private class WE_ScheduledCloseDateUpdateTest {

    @testSetup
    static void dataSetup() {

        Profile p = [SELECT Id FROM Profile WHERE Name = 'System Administrator' LIMIT 1];
        
        User u = new User(LastName = 'Test',Alias = 't1',Email = '[email protected]',Username = '[email protected]',ProfileId = p.Id,TimeZoneSidKey = 'America/Denver',LocaleSidKey = 'en_US',EmailEncodingKey = 'UTF-8',LanguageLocaleKey = 'en_US');
        insert u;

        Val_Rule_Cntrlr__c valRuleCntrlr = new Val_Rule_Cntrlr__c(SetupOwnerId = u.Id,All_Opportunity_Disabled__c = false);
        upsert valRuleCntrlr;
            
        List<Opportunity> testOpps = new List<Opportunity>();
            
        // create the Opportunities that will be updated by the class
        for(integer i = 0; i < 200; i++) {
            testOpps.add(new Opportunity(
                Name          = 'Test Opp Update' + i,
                OwnerId       = u.Id,
                StageName     = 'Prospecting',
                CloseDate     = date.today().addDays(1),
                Amount        = 100,
                // set checkbox field to true, to trigger validation rules if they've not been deactivated by class
                Trigger_Validation_Rule__c = true));
        }
        // create the Opportunities that won't be updated by the class
        for(integer i = 0; i < 200; i++) {
            testOpps.add(new Opportunity(
                Name          = 'Test Opp Skip' + i,
                OwnerId       = u.Id,
                StageName     = 'Prospecting',
                CloseDate     = date.today().addDays(15),
                Amount        = 100,
                Trigger_Validation_Rule__c = true));
        }           
        insert testOpps;

    }
    
    // code required to test a scheduled class, see https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_scheduler.htm for more details
    public static String CRON_EXP = '0 0 0 15 3 ? 2022';

    static testmethod void testCloseDateUpdates() {

        // execute scheduled class
        
        Test.startTest();
        
        String jobId = System.schedule('ScheduleApexClassTest',
                                       CRON_EXP,
                                       new Scheduled_OppCloseDateUpdate());
        
        CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered, NextFireTime
                            FROM CronTrigger
                           WHERE id = :jobId];
        
        System.assertEquals(CRON_EXP, ct.CronExpression);
        System.assertEquals(0, ct.TimesTriggered);
        System.assertEquals('2022-03-15 00:00:00', String.valueOf(ct.NextFireTime));
        
        Test.stopTest();

        // test results
        
        Integer updateCount = 0;
        Integer skipCount   = 0;

        List <Opportunity> opportunitys = [SELECT Id, Name, CloseDate FROM Opportunity];

        for(Opportunity o : opportunitys) {
            if (o.Name.contains('Update') &&
                updateCount == 0)
            {
                System.assertEquals(date.today().addDays(20), o.CloseDate, 'Opportunity\'s Close Date should have been updated as it was less than 7 days away');
                updateCount = 1;
            }
            if (o.Name.contains('Skip') &&
                skipCount == 0)
            {
                System.assertEquals(date.today().addDays(15), o.CloseDate, 'Opportunity should not have been updated as it\'s Close Date is more than 7 days away');
                skipCount = 1;
            }
        }
        // check that both lists of Opportunities have been tested
        System.assertEquals(2, updateCount + skipCount, 'Count should be 2 once all assertions have been executed');
    
    }
    
    // check that the class does not change the custom setting's field to false, if it was true before class was executed
    static testmethod void testSettingUpdates() {
        
        User u = [SELECT Id FROM User WHERE UserName = '[email protected]'];
        
        // switch the custom setting field to true before the scheduled job executes
        Val_Rule_Cntrlr__c setting;
        setting = Val_Rule_Cntrlr__c.getInstance(u.Id);
        setting.All_Opportunity_Disabled__c = true;
        upsert setting;
        
        System.runAs(u) {
            
            Test.startTest();
            
            String jobId = System.schedule('ScheduleApexClassTest',
                                           CRON_EXP,
                                           new Scheduled_OppCloseDateUpdate());
            
            CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered, NextFireTime
                                FROM CronTrigger
                               WHERE id = :jobId];
            
            System.assertEquals(CRON_EXP, ct.CronExpression);
            System.assertEquals(0, ct.TimesTriggered);
            System.assertEquals('2022-03-15 00:00:00', String.valueOf(ct.NextFireTime));
            
            Test.stopTest();
        }
        setting = Val_Rule_Cntrlr__c.getInstance(u.Id);
        
        // check that the class did not change the All_Opportunity_Disabled__c field to false
        System.assertEquals(true, setting.All_Opportunity_Disabled__c);
    }

}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow