Tuesday, May 28, 2019

How to check custom metadata type usage in salesforce

From Summer 19 onwards we can view custom metadata type usage in System overview.
Path:
From Setup, enter System Overview in the Quick Find box, and then select System Overview.


Monday, May 27, 2019

How to call Lightning Web components from Visualforce page

This post explains how to call Lightning web components from the visualforce page.

From Summer 19 onwards we can use Lightning web component in the visualforce page,
normally to call lightning components in the visualforce page we used  $A.createComponent and $Lightning.use.
we can use the same concept as well in lightning web components.

Note: To work this functionality, API version should be above or equal to v46


Demo:

lwcInVisualforceDemo.html
<template>
    <lightning-card title="Calling Lightning Web Components From Visualforce Page" icon-name="standard:account">
        <template if:true={accData}>
            <table class="slds-table slds-table_bordered slds-table_cell-buffer slds-table_col-bordered">
                <thead>
                    <tr class="slds-text-title_caps">
                        <th scope="col">
                            <div title="Key">Account Name</div>
                        </th>
                        <th scope="col">
                            <div title="Value">Industry</div>
                        </th>
                    </tr>
                </thead>
                <tbody>
                    <template for:each={accData} for:item="acc">
                        <tr key={acc.key}>
                            <th scope="col">
                                <div>{acc.Name}</div>
                            </th>
                            <th scope="col">
                                <div>{acc.Industry}</div>
                            </th>
                        </tr>
                    </template>
                </tbody>
            </table>
        </template>
    </lightning-card>
</template>

lwcInVisualforceDemo.js
import { LightningElement, track, wire } from 'lwc';
// importing apex class and method to retrive accounts
import retriveAccounts  from '@salesforce/apex/LWCExampleController.fetchAccounts';

export default class LwcInVisualforceDemo extends LightningElement {

    // to track object name from vf page
    @track objName = 'Account';
    @track accData;
    @track error;

    // getting accounts using wire service
    @wire(retriveAccounts, {strObjectName : '$objName'})
    accounts({data, error}) {
        if(data) {
            this.accData = data;
            this.error = undefined;
        }
        else if(error) {
            this.accData = undefined;
            this.error = error;
            window.console.log(error);
        }
    }
}

LWCExampleController.cls
public inherited sharing class LWCExampleController {
    @AuraEnabled(Cacheable = true)
    public static list<Account> fetchAccounts(String strObjectName) {
        if(String.isNotBlank(strObjectName)) {
            return Database.query('SELECT Id, Name, Industry From ' + strObjectName + ' limit 10');
        }
        else {
            return null;
        }
    }
}
Create lightning out dependency Lightning application, and Visualforce page to call lwc component.

CallingLWCFromPage.page
<apex:page>
    <apex:includeLightning />
    <div id="lwcDemo" />
    <script>
    $Lightning.use("c:lwcInVisualforceApp", function() {
        $Lightning.createComponent("c:lwcInVisualforceDemo", {
            //pass parameter values to lwc js controller
            objName : "Account" // optional parameter, I already declared value in lwc js controller.
        },
        "lwcDemo",
            function(component) {
             console.log("Lightning Web Component created Successfully!!");
              // extend the functionality as per your requirement
            }
       );
    });
    </script>
</apex:page>

lwcInVisualforceApp.app
<aura:application  access="GLOBAL" extends="ltng:outApp" >
 <aura:dependency resource="lwcInVisualforceDemo"/>
</aura:application>

Result:

Resource:
https://releasenotes.docs.salesforce.com/en-us/summer19/release-notes/rn_lwc_vf.htm?edition=&impact=

Saturday, May 25, 2019

Components names for ANT tool

Package.xml file for retrieving the Salesforce components in ANT tool

Last updated on 05/May/2020


package.xml
<?xml encoding="UTF-8" version="1.0"?>
<Package
    xmlns="http://soap.sforce.com/2006/04/metadata">
    <!-- Custom Object Tab, Web Tab and Visualforce tab -->
    <types>
        <members>Employee__c</members>
        <name>CustomTab</name>
    </types>

    <types>
        <members>*</members>
        <name>ApexClass</name>
    </types>

    <types>
        <members>*</members>
        <name>ApexComponent</name>
    </types>

    <types>
        <members>*</members>
        <name>ApexPage</name>
    </types>

    <types>
        <members>*</members>
        <name>ApexTrigger</name>
    </types>
 
 <!-- Sharing Rules -->
 
 <types>
  <members>Account.*</members>
  <name>SharingCriteriaRule</name>
 </types>

 <types>
  <members>Account.*</members>
  <name>SharingOwnerRule</name>
 </types>

    <!-- For retrieving Lightning components -->
    <types>
        <members>*</members>
        <name>AuraDefinitionBundle</name>
    </types>
 
 <!-- For retrieving Lightning web components -->
 <types>
  <members>*</members>
  <name>LightningComponentBundle</name>
 </types>

    <!-- for retrieving Layouts -->
    <types>
        <members>Account-Personal Account Layout</members>
        <members>MyCustomObject__c-My CustomObject Layout</members>
        <name>Layout</name>
    </types>

    <types>
        <members>*</members>
        <name>CustomApplication</name>
    </types>

    <types>
        <members>Activity.Closed__c</members>
        <name>CustomField</name>
    </types>

    <!-- For retrieving Custom Object, Custom Setting, Custom Metadata types-->
    <types>
        <members>*</members>
        <members>Account</members>
        <name>CustomObject</name>
    </types>


    <!-- Custom Tab -->
    <types>
        <members>*</members>
        <name>CustomTab</name>
    </types>

    <!-- Document -->
    <types>
        <members>Images/profilepic.png</members>
        <name>Document</name>
    </types>

    <!-- StandardValueSet, Standard Picklist values -->
    <types>
        <members>CasePriority</members>
        <members>CaseReason</members>
        <members>Industry</members>
        <members>LeadSource</members>
        <name>StandardValueSet</name>
    </types>

    <!-- Remote Site Setting -->
    <types>
        <members>Name1</members>
        <members>Name2</members>
        <name>RemoteSiteSetting</name>
    </types>

    <!-- Sharing Set  -->
    <types>
        <members>Name2</members>
        <members>Name1</members>
        <name>SharingSet</name>
    </types>

    <!-- Data Category Group -->
    <types>
        <members>Name2</members>
        <members>Name1</members>
        <name>DataCategoryGroup</name>
    </types>

    <!-- CustomSite -->
    <types>
        <members>Name2</members>
        <members>Name1</members>
        <name>CustomSite</name>
    </types>

    <!-- Approval Process -->
    <types>
        <members>ObjectName.ApprovalProcessName</members>
        <name>ApprovalProcess</name>
    </types>

    <!-- Entitlement Process -->
    <types>
        <members>EntitlementProcessName_(v)versionnumber</members>
        <name>EntitlementProcess</name>
    </types>
    <!-- For retrieving and deploying Email Templates, folder name is mandatory  -->
    <types>
        <members>unfiled$public/Test_Notification</members>
        <members>EmailTemplates/InquiryPortal</members>
        <name>EmailTemplate</name>
    </types>

    <types>
        <members>*</members>
        <name>HomePageComponent</name>
    </types>

    <types>
        <members>*</members>
        <name>HomePageLayout</name>
    </types>

    <!-- Home Page Custom Link -->
    <types>
        <members>*</members>
        <name>CustomPageWebLink</name>
    </types>


    <types>
        <members>Account.My_Account_Team</members>
        <name>ListView</name>
    </types>

    <types>
        <members>Account-Account Layout</members>
        <name>Layout</name>
    </types>

    <types>
        <members>Analyst</members>
        <name>Profile</name>
    </types>


    <types>
        <!--Report Folder-->
        <members>ExtraReports</members>
        <!--Report-->
        <members>ExtraReports/AnyOccupation</members>
        <!--Report from Unfiled Public Reports-->
        <members>unfiled$public/Test</members>
        <name>Report</name>
    </types>

    <types>
        <!--Dashboard Folder-->
        <members>ExtraDashboards</members>
        <!--Dashboard-->
        <members>ExtraDashboards/AnyOccupation</members>
        <name>Dashboard</name>
    </types>

    <types>
        <members>*</members>
        <name>ReportType</name>
    </types>

    <types>
        <members>*</members>
        <name>StaticResource</name>
    </types>

    <types>
        <members>Contact.SelectTitle</members>
        <name>WebLink</name>
    </types>

    <types>
        <members>*</members>
        <name>PermissionSet</name>
    </types>

    <types>
        <members>*</members>
        <name>QuickAction</name>
    </types>


    <!-- Workflow includes WorkflowFieldUpdate, WorkflowAlert, WorkflowOutboundMessage, WorkflowRule -->
    <types>
        <members>ObjectName.WorkFlowName</members>
        <name>Workflow</name>
    </types>


    <types>
        <members>ObjectName.FieldUpdateName</members>
        <name>WorkflowFieldUpdate</name>
    </types>

    <types>
        <members>ObjectName.FieldUpdateName</members>
        <name>WorkflowAlert</name>
    </types>

    <types>
        <members>ObjectName.FieldUpdateName</members>
        <name>WorkflowOutboundMessage</members>
    </types>

    <types>
        <members>ObjectName.FieldUpdateName</members>
        <name>WorkflowRule</name>
    </types>

    <types>
        <members>ObjectName.FieldUpdateName</members>
        <name>WorkflowTask</name>
    </types>


    <!--  Custom Button/Link -->
    <types>
        <members>Directory_Edition__c.Final_Letter_Renewal</members>
        <name>WebLink</name>
    </types>

    <!--  Standard Tabs and Fields renames -->
    <types>
        <members>*</members>
        <name>CustomObjectTranslation</name>
    </types>

    <!-- Validation Rules  -->
    <types>
        <members>Object Name.Validation Name</members>
        <name>ValidationRule</name>
    </types>

    <!--  Record Types  -->
    <types>
        <members>Object Name.Record Type Name</members>
        <name>RecordType</name>
    </types>

    <!--  Role  -->
    <types>
        <members>*</members>
        <name>Role</name>
    </types>

    <!--  Queue -->
    <types>
        <members>*</members>
        <name>Queue</name>
    </types>


    <!-- Public Group -->
    <types>
        <members>*</members>
        <name>Group</name>
    </types>

    <!-- Custom Labels -->
    <types>
        <members>*</members>
        <name>CustomLabel</name>
    </types>

    <!-- LetterHead -->
    <types>
        <members>*</members>
        <name>Letterhead</name>
    </types>

    <!-- Process Builder and Flow -->
    <types>
        <members>*</members>
        <name>Flow</name>
    </types>

    <types>
        <members>LogACall</members>
        <!--Global Action -->
        <members>Task.TestingAction</members>
        <!--Object Quick Action -->
        <name>QuickAction</name>
    </types>

    <version>48.0</version>
</Package>