Uncategorized

  • Lightning- data table component displays tabular data where each column can be displayed based on the data type. lightning: data table is not supported on mobile devices. Supported features : ❖  Displaying and formatting of columns with appropriate data types ❖  Infinite scrolling of rows ❖  Inline editing for some data types ❖  Header-level actions ❖  Row-level actions ❖  […]

    Read More

  • User Permission : User Permission specify what action user can perform and what feature user can access.Permission set controls the access of users.User permission and access setting are specified in permission set and profiles. What is Difference between Profile and Permission Set : The Key Difference between Profile and permission set is that Profile is […]

    Read More

  • Determine Record Type on the basis of Picklist Value

    For security reasons, the Lightning Component framework places restrictions on making API calls from JavaScript code. Using a named credential for specific API calls allows to carefully and selectively bypass this security restriction.

    Business Case:

    Client wants to auto-populate record type on standard case creation page on the basis of selected picklist value by using lightning component.

    Solution:

    As we can’t make API calls directly from Lightning Components so we ended up with learning it’s quite a complex process. We had to create three independent things to get this done:

    • A connected App
    • An Auth. Provider
    • A Named Credential

    Step 1: Create Connected App like this:


    Note: Enter TEMP:VALUE for the Callback URL, we’ll change after auth. Provider creation.

    Step 2: Create Auth. Provider as per given below:

     Copy-paste the consumer key and customer secret from the connected tab that we created above. For the Default Scopes type “refresh_token full”. And click save. You get to this screen:

    Copy the callback URL and paste this value in connected app Callback URL.

    Step 3: Create Named Credentials:

    Enter the URL for the ORG but make sure it’s ***. my.salesforce.com then replace .my.salesforce.com as per given below.

    Step 4: Method to get Recordtype by picklist value.

    Suppose picklist name is Category below method received parameter as category label and return record typeid.

    public static String getRecordTypeIdForCategory(String categoryLabel) {

    // results will contain HTML encoded characters, like &

    categoryLabel = categoryLabel.escapeHtml4();

    String recordTypeId = null;

    Boolean foundMatch = false;

    List<Id> recordTypeIds = new List<Id>();

    //query all recordtypes of case object.

    for(RecordType r : [SELECT Id, DeveloperName FROM RecordType where sObjectType=’Case’ AND IsActive = True]){

                            recordTypeIds.add(r.Id);

    }

    String host = System.Url.getSalesforceBaseURL().toExternalForm();

    Map<String, List<String>> mapCategoriesByRecordType = new Map<String, List<String>>();

    // create a map of Categories assigned to RecordTypes

    for(String rId: recordTypeIds) {

                Http http = new Http();

                HttpRequest request = new HttpRequest();

                Http h = new Http();

                String url = ‘callout:CallMeBack/services/data/v42.0/ui-api/object-info/Case/picklist-values/’ + rId + ‘/Category__c’;

                request.setEndpoint(url);

                request.setMethod(‘GET’);

                request.setHeader(‘Authorization’, ‘Bearer ‘+ UserInfo.getSessionId());

                HttpResponse response;

                response = http.send(request);

                if(response.getStatus() == ‘OK’)

                {

                            Map<String, Object> meta = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());

                            List<String> categoriesList = new List<String>();

                            if(meta.containsKey(‘values’)){

                                        for(Object o: (List<Object> )meta.get(‘values’)){

                                                    Map<String, object > temp = (Map<String, object>)o;

                                                    categoriesList.add((String)temp.get(‘label’));

                                        }

                            }

                            mapCategoriesByRecordType.put(rid, categoriesList);

                }

    }

    for (Id key : mapCategoriesByRecordType.keySet()) {

                if(foundMatch == false) {

                            List<String> typeCategories = mapCategoriesByRecordType.get(key);

                            if(containsIgnoreCase(typeCategories, categoryLabel)) {

                                        foundMatch = true;

                                        recordTypeId = key;

                            }

                }

    }

    return recordTypeId;

    }

    Output: 

    After selecting category in below component this will redirect to standard case creation page with auto-populating record type.