Salesforce Marketing Cloud is the world’s most influential digital marketing platform, allowing you to plan, personalize, and optimize 1:1 customer journeys. It enables you to communicate with customers through various ways, including Journey Management, Email, …
Salesforce record id hack first 3 digit This post is going to be interesting. As we all know that each record in salesforce is identified by record id which is unique for every organisation. Salesforce …
custom label in apex code salesforce example We can use System.Label.labelName to access custom label in apex code. Custom labels are custom text values that can be accessed from Apex classes or Visualforce pages. The …
wire Service LWC Lightning Web Components(LWC) @wire Service LWC Lightning web components(LWC) use a reactive wire service, which is built on Lightning Data Service. Components use @wire in their JavaScript class to read data from …
Workflow Rules in Salesforce What is Salesforce Workflow Rules? Workflow lets you automate standard internal procedures and processes to save time across your org. A workflow rule is the main container for a set of workflow instructions. …
Lightning Web Components-Why, What & Where to start from?
Why Lightning Web Components(LWC)?
AURA framework which was used for current Lightning Components was based on standards of 2014 but are outdated now and it was time for change because for the following reasons:
Rendering could be optimized.
Standard UI elements were scarce.
Lacked modern constructs.
Was not fit for modular apps.
Web standards were updated.
AURA Framework became skill and had its own learning curve.
Additionally, Lightning Web Components(LWC) can coexist and interoperate with Aura components.
What Lightning Web Components(LWC)?
LWC is a new programming model levering the recent web standards. Rather than being a totally custom and development wise rigid framework, It’s quite flexible. It’s mostly the common Web Standards and a Thin Layer of Specialized services to make it a perfect fit for Modern Rich UI Implementations in Salesforce. This thin layer of specialized services contain Base Lightning Components, Lightning Data Service and User Interface API which work behind the curtain for LWC.
A thin layer of specialized services on top of a standard web stack results in:
Ease of development for large scale modular apps.
Ease of Leveraging the latest web functionalities and constructs.
A common model and transferable skills. (Any web developer working on modern JS frameworks could easily ramp-up LWC).
Similar to an AURA component, the main contents of a LWC are also html, javascript. There are optional content like css. But then in addition to these for LWC, an xml configuration file is also included which defines the metadata values for the component. So, a LWC component would look like:
Now, lets cover a brief overview of these files one by one:
HTML
Has a root tag <template> which contains your component’s HTML.
When renders, the <template> tag is replaced with <namespace-component-name>.
Javascript
Import functionality declared in a module eg-lwc(the core module), use the import statement.
To allow other code to use functionality in a module, use the export statement.
LightningElement is custom wrapper of the standard HTML element and we extend it in the component and export.
Configuration
XML file that defines the metadata configuration values for the component eg-
Components Label
Availability
Configuration Attributes
Builder Attributes
CSS
To style a component.
The style sheet is applied automatically.
So, the files that we have discussed how would the component build with these look?
Component UI
Summary
This is the best time to learn and start early with Lightning Web Components, which offer the latest web standards, delivers unprecedented performance and productivity and interoperate seamlessly with existing code.
Example of Lightning Web Components(LWC)
Here is list of some of Lightning Web Component example for developers:
Lightning web components(LWC) use a reactive wire service, which is built on Lightning Data Service. Components use @wire in their JavaScript class to read data from one of the wire adapters in the lightning/ui*Apimodules and also to call the apex controller server-side methods using wire services. The wire service provisions an immutable stream of data to the component. Each value in the stream is a newer version of the value that precedes it.
We call the wire service reactive in part because it supports reactive variables, which are prefixed with $. If a reactive variable changes, the wire service provisions new data. We say “provisions” instead of “requests” or “fetches” because if the data exists in the client cache, a network request may not be involved. The wire service delegates control flow to the Lightning Web Components engine. Delegating control is great for read operations, but it isn’t great for create, update, and delete operations. As a developer, you want complete control over operations that change data. That’s why you perform create, update, and delete operations with a JavaScript API instead of with the wire service.
Wire Service Syntax
Import a wire adapter using named import syntax.
import { wire} from 'lwc';
Decorate a property or function with @wire and specify the wire adapter.
Here is full code syntax and its detail for using wire
import { wire} from 'lwc';
@wire(adapterId, adapterConfig)
propertyOrFunction;
adapterId (Identifier)—The identifier of the wire adapter.
adapterModule (String)—The identifier of the module that contains the wire adapter function, in the format namespace/moduleName. Look at the format! To import a module in JavaScript, use lightning/ui*Api instead of lightning-ui-*-api.
adapterConfig (Object)—A configuration object specific to the wire adapter. Configuration object property values can be either strings or references to objects and fields imported from @salesforce/schema. Properties in the adapterConfig object can’t be undefined. If a property is undefined, the wire service doesn’t provision data. Don’t update a wire adapter configuration object property in renderedCallback() as it can result in an infinite loop.
propertyOrFunction—A private property or function that receives the stream of data from the wire service. If a property is decorated with @wire, the results are returned to the property’s data property or error property. If a function is decorated with @wire, the results are returned in an object with a data property and an error property.
Import References to Salesforce Objects and Fields
When you use a wire adapter in a lightning/ui*Api module, we strongly recommend importing references to objects and fields. Salesforce verifies that the objects and fields exist, prevents objects and fields from being deleted, and cascades any renamed objects and fields into your component’s source code. It also ensures that dependent objects and fields are included in change sets and packages. Importing references to objects and fields ensures that your code works, even when object and field names change.
If a component isn’t aware of which object it’s using, use strings instead of imported references. Use getObjectInfo to return the object’s fields. All wire adapters in the lightning/ui*Api modules respect object CRUD rules, field-level security, and sharing. If a user doesn’t have access to a field, it isn’t included in the response.
To import a reference to an object, use this syntax.
import objectName from '@salesforce/schema/object';
import objectName from '@salesforce/schema/namespace__object';
import POSITION_OBJECT from '@salesforce/schema/Position__c';
import ACCOUNT_OBJECT from '@salesforce/schema/Account';
To import a reference to a field, use this syntax.
import FIELD_NAME from '@salesforce/schema/object.field';
import POSITION_LEVEL_FIELD from '@salesforce/schema/Position__c.Level__c';
import ACCOUNT_NAME_FIELD from '@salesforce/schema/Account.Name';
To import a reference to a field via a relationship, use this syntax. You can use relationship fields to traverse to parent objects and fields. You can specify up to three relationship fields, which results in four objects and the field being referenced. For example, Opportunity.Account.CreatedBy.LastModifiedById returns 4 levels of spanning fields.
import SPANNING_FIELD_NAME from '@salesforce/schema/object.relationship.field';
import POSITION_HIRINGMANAGER_NAME_FIELD__c from '@salesforce/schema/Position__c.HiringManager__r.Name__c';
import ACCOUNT_OWNER_NAME_FIELD from '@salesforce/schema/Account.Owner.Name';
This code imports the Account.Name field and uses it in a wire adapter’s configuration object.
import { LightningElement, api, wire } from 'lwc';
import { getRecord } from 'lightning/uiRecordApi';
import ACCOUNT_NAME_FIELD from '@salesforce/schema/Account.Name';
export default class Record extends LightningElement {
@api recordId;
@wire(getRecord, { recordId: '$recordId', fields: [ACCOUNT_NAME_FIELD] })
record;
}
This code is almost identical, but it uses a string to identify the Account.Name field. This code doesn’t get the benefits that you get from importing a reference to the field.
import { LightningElement, api, wire } from 'lwc';
import { getRecord } from 'lightning/uiRecordApi';
export default class Record extends LightningElement {
@api recordId;
@wire(getRecord, { recordId: '$recordId', fields: ['Account.Name'] })
record;
}
Mark a Configuration Object Property as Dynamic and Reactive
n the wire adapter’s configuration object, prefix a value with $ to reference a property of the component instance. The $ prefix tells the wire service to treat it as a property of the class and evaluate it as this.propertyName. The property is reactive. If the property’s value changes, new data is provisioned and the component rerenders.
In this example, $recordId is dynamic and reactive.
import { LightningElement, api, wire } from 'lwc';
import { getRecord } from 'lightning/uiRecordApi';
const FIELDS = [
'Contact.Name',
'Contact.Title',
'Contact.Phone',
'Contact.Email',
];
export default class WireGetRecordDynamicContact extends LightningElement {
@api recordId;
@wire(getRecord, { recordId: '$recordId', fields: FIELDS })
contact;
get name() {
return this.contact.data.fields.Name.value;
}
get title() {
return this.contact.data.fields.Title.value;
}
get phone() {
return this.contact.data.fields.Phone.value;
}
get email() {
return this.contact.data.fields.Email.value;
}
}
Decorate a Property with @wire
Wiring a property is useful when you want to consume the data or error as-is.
If the property decorated with @wire is used as an attribute in the template and its value changes, the wire service provisions the data and triggers the component to rerender. The property is private, but reactive.
This code applies @wire to the record property.
import { LightningElement, api, wire } from 'lwc';
import { getRecord } from 'lightning/uiRecordApi';
import ACCOUNT_NAME_FIELD from '@salesforce/schema/Account.Name';
export default class Record extends LightningElement {
@api recordId;
@wire(getRecord, { recordId: '$recordId', fields: [ACCOUNT_NAME_FIELD] })
record;
}
Decorate a Function with @wire
Wiring a function is useful to perform logic whenever new data is provided or when an error occurs. The wire service provisions the function an object with error and data properties, just like a wired property.
The function is invoked whenever a value is available, which can be before or after the component is connected or rendered.
wire Service LWC Example by decorating a Function with @wire
Now we can add this lwc component on the account detail page.
Go to Home page
Click Setup (Gear Icon) and select Edit Page.
Under Custom Components, find your wireFunctionLWC component and drag it on Account detail page.
Click Save and activate.
We will have the following output.
Call Apex Methods using wire
Lightning web components can import methods from Apex classes into the JavaScript classes. Once after importing the apex class method you can able call the apex methods as functions into the component by calling either via the wire service or imperatively. The Apex Method should be marked with @AuraEnabled. Before you use an Apex method, make sure that there isn’t an easier way to get the data. See whether a base Lightning component, like lightning-record-form, lightning-record-view-form, or lightning-record-edit-form works for your use case. If they don’t give you enough flexibility, use a wire adapter like getListUi or getRecordUi. And if you can’t use a wire adapter, write an Apex method.
Apex wire Import Syntax
We need to import the @salesforce/apex scoped module into JavaScript controller class.
import apexMethodName from '@salesforce/apex/Namespace.Classname.apexMethodReference';
Here is list of important point of importing apex method:
apexMethodName : An imported symbol that identifies the Apex method.
apexMethodReference : The name of the Apex method to import.
Classname : The name of the Apex class.
Namespace—The namespace of the Salesforce organization. Specify a namespace unless the organization uses the default namespace (c), in which case don’t specify it.
A lightning-card is used to apply a stylized container around a grouping of information. The information could be a single item or a group of items such as a related list.
Use the variant or class attributes to customize the styling.
A lightning-card contains a title, body, and footer. To style the card body, use the Lightning Design System helper classes.
When applying Lightning Design System classes or icons, check that they are available in the Lightning Design System release tied to your org. The latest Lightning Design System resources become available only when the new release is available in your org.
lightning-card LWC Example
We will create LWC component using lightning-card. We will get the following output
lightningCardLWC.js
<template>
<lightning-card
variant="narrow"
icon-name="standard:opportunity">
<h1 slot="title">Hello title</h1>
<p class="slds-p-horizontal_small">This is body. You can have your content here</p>
<div slot="actions">
<lightning-button label="New" slot="actions"></lightning-button>
</div>
<div slot="footer">
<p>Contact Us SFDCPoint</p>
</div>
</lightning-card>
</template>
lightningCardLWC.js
import { LightningElement } from 'lwc';
export default class LightningCardLWC extends LightningElement {}
Under Custom Components, find your lightningCardLWC component and drag it on page.
Click Save and activate.
Usage Considerations
Icons are not available in Lightning Out, but they are available in Lightning Components for Visualforce and other experiences.
title is available as an attribute or a slot. Pass in the title as a slot if you want to pass in additional markup, such as making the title bold. Or use the title attribute if your title does not need extra formatting. Setting the title attribute overwrites the title slot.
There is one more practical example of using lightning-card, please refer to Lightning Spinner in LWC
Visual Studio Code is the go-to code editor for Salesforce developers. It’s free, open-source, and available for Windows, Linux, and macOS. This editor has easy-to-install extensions for syntax highlighting, code completion, and more. Visual Studio Code can be used with many programming languages. Here in this post, we will see some keyboard shortcuts for visual studio code which might help in increasing productivity for developers.
Here is list of VS Code Keyboard Shortcuts:
To Show Command Palette: Ctrl+Shift+P, F1
To Open or Go to File: Ctrl+P
New visual code window or instance: Ctrl+Shift+N
To Close window or instance: Ctrl+Shift+W
To open User Settings: Ctrl+,
To open Keyboard Shortcuts: Ctrl+K Ctrl+S
Cut line (empty selection): Ctrl+X
Copy line (empty selection): Ctrl+C
Move line up/down: Alt+ ↑ / ↓
Copy line up/down: Shift+Alt + ↓ / ↑
Delete Line: Ctrl+Shift+K
Insert line below: Ctrl+Enter
Insert line above: Ctrl+Shift+Enter
Add line comment: Ctrl+K Ctrl+C
Remove line comment: Ctrl+K Ctrl+U
Toggle line comment: Ctrl+/
Toggle block comment: Shift+Alt+A
Go to Line…: Ctrl+G
Find: Ctrl+F
Find next/previous: F3 / Shift+F3
Select all occurrences of Find match: Alt+Enter
Here is VS Code Keyboard Shortcuts for Windows, Mac and linux
Command Action
Windows keyboard Shortcut
Mac keyboard Shortcut
Linux keyboard Shortcut
To Show Command Palette
Ctrl+Shift+P, F1
⇧⌘P, F1
Ctrl+Shift+P, F1
To Open or Go to File
Ctrl+P
⌘P
Ctrl+P
New visual code window or instance
Ctrl+Shift+N
⇧⌘N
Ctrl+Shift+N
To Close window or instance
Ctrl+Shift+W
⌘W
Ctrl+Shift+W
To open User Settings
Ctrl+,
⌘,
Ctrl+,
To open Keyboard Shortcuts
Ctrl+K Ctrl+S
⌘K ⌘S
Ctrl+K Ctrl+S
Cut line (empty selection)
Ctrl+X
⌘X
Ctrl+X
Copy line (empty selection)
Ctrl+C
⌘C
Ctrl+C
Move line up/down
Alt+ ↑ / ↓
⌥↓ / ⌥↑
Alt+ ↑ / ↓
Copy line up/down
Shift+Alt + ↓ / ↑
⇧⌥↓ / ⇧⌥↑
Shift+Alt + ↓ / ↑
Delete line
Ctrl+Shift+K
⇧⌘K
Ctrl+Shift+K
Insert line below
Ctrl+Enter
⌘Enter
Ctrl+Enter
Insert line above
Ctrl+Shift+Enter
⇧⌘Enter
Ctrl+Shift+Enter
Add line comment
Ctrl+K Ctrl+C
⌘K ⌘C
Ctrl+K Ctrl+C
Remove line comment
Ctrl+K Ctrl+U
⌘K ⌘U
Ctrl+K Ctrl+U
Toggle line comment
Ctrl+/
⌘/
Ctrl+/
Toggle block comment
Shift+Alt+A
⇧⌥A
Shift+Alt+A
Go to Line...
Ctrl+G
⌃G
Ctrl+G
Find
Ctrl+F
⌘F
Ctrl+F
Replace
Ctrl+H
⌥⌘F
Ctrl+H
Find next/previous
F3 / Shift+F3
⌘G / ⇧⌘G
F3 / Shift+F3
Select all occurrences of Find match
Alt+Enter
⌥Enter
Alt+Enter
Add selection to next Find match
Ctrl+D
⌘D
Ctrl+D
Move last selection to next Find match
Ctrl+K Ctrl+D
⌘K ⌘D
Ctrl+K Ctrl+D
Select current line
Ctrl+I
⌘I
Ctrl+I
Select all occurrences of current selection
Ctrl+Shift+L
⇧⌘L
Ctrl+Shift+L
Close editor
Ctrl+F4, Ctrl+W
⌘W
Ctrl+W
Close folder
Ctrl+K F
⌘K F
Ctrl+K F
New File
Ctrl+N
⌘N
Ctrl+N
Open File...
Ctrl+O
⌘O
Ctrl+O
Save
Ctrl+S
⌘S
Ctrl+S
Save As...
Ctrl+Shift+S
⇧⌘S
Ctrl+Shift+S
Save All
Ctrl+K S
⌥⌘S
Ctrl+K S
Close / Close All
Ctrl+F4 / Ctrl+K Ctrl+W
⌘W / ⌘K ⌘W
Ctrl+W / Ctrl+K Ctrl+W
Toggle full screen
F11
⌃⌘F
F11
Show Search
Ctrl+Shift+F
⇧⌘F
Ctrl+Shift+F
Show Extensions
Ctrl+Shift+X
⇧⌘X
Ctrl+Shift+X
Replace in files
Ctrl+Shift+H
⇧⌘H
Ctrl+Shift+H
Show Output panel
Ctrl+Shift+U
⇧⌘U
Ctrl+K Ctrl+H
VS Code shortcuts
vs code comment shortcut
In vscode many time we have to comment/uncomment the line of code or block of code from time to time. We can select a block of code and use the key sequence Ctrl+K+C, it will comment out the section of code. Ctrl+K+U will uncomment the code. It will be a line comment. For Block Comment, we can select lines of code and use Shift+Alt+A. It will toggle comments on and off. You can mac shortcut for same in above table.
VS Code Navigate Forward/Backward Ctrl+–/Ctrl+Shift+–
When we have multiple files open at the same time, we might need a way to quickly move back and forth between two or three different locations in your code. If we have moved from one location to another we can use the keyboard sequence Ctrl+– to move to the previous location and then you can return using Ctrl+Shift+–.
VS Code Open Command Palette
Ctrl+Shift+P : The command palette is very useful in VS Code. We can simply use Ctrl+Shift+P in windows and ⇧⌘P(Command + Shift+ P) for mac to open command Palette.
VS Code Go To Line
To go to a line in the file, you use ctrl + g, then type a line number. Alternatively, you can also open the go-to file menu with command + p first. Then type :. Then type your line number. In mac shortcut is ⌃G
VS Code Search in all Files
Searching in all files is very useful and used very frequently by developers. Search all Windows Shortcut is Ctrl+Shift+F. Search all Mac shortcut is ⇧⌘F(Command+Shift+F).
Salesforce testing is an important requirement to keep the performance of applications as expected. However, they need to undergo a robust testing strategy comprising unit testing, performance testing, UAT testing, and functional testing, among others.
Quality remains the fundamental element in the success of any organization, let alone a digital one. With digital technology playing a discerning role in improving the quality of our lives, ensuring the quality of such technology is of primary importance. This calls for software application testing and fixing the bugs early in the development (and testing) cycle. The enterprises of today are increasingly using CRM or ERP solutions to manage operations and other processes seamlessly. Salesforce is one such CRM software suite, which along with SAP, Oracle, and Microsoft, is witnessing a steady growth in its adoption. The reasons for the popularity of Salesforce can be attributed to its ease of customization, implementation, flexibility, and scalability. Further, Salesforce is leveraged by the industry in managing leads, contacts, clients, and opportunities. However, not everything is hunky-dory when it comes to implementing the software. For starters, everyone’s concurrence is necessary and the objectives of business need to be clearly defined. Thereafter comes Salesforce testing.
Why test Salesforce?
Since codes can play a critical role in integrating various business processes and functions within an organization, they need to be tested for Salesforce. Salesforce testingwould ensure the underlying codes are performing, reliable, and qualitatively superior. The test validates the customizations and configurations done to the software to develop a quality product. The product in the form of software ought to support the client’s business processes. There are two types of testing in a Salesforce testing framework – manual and automated.
In manual Salesforce testing, the application is tested manually with focus on regression, system, integration, and functional testing. However, Salesforce automation testingis about validating the software using a test tool like Selenium.
How to develop a robust Salesforce testing
A business needs to work on automating salesforce application testing to get the best results. However, the steps to validate the applications developed on Salesforce are as follows:
Business objective: The various CRM features of Salesforce should be aligned with the business objectives. The main purpose of developing and implementing a tool on Salesforce should be understood by the testers. To cite an example, by knowing the purpose of automating the sales process, one can formulate a robust testing strategy.
Test case scenarios: While creating a Salesforce testing framework make a list of the possible test case scenarios and exceptions. The list should also contain the expected outcomes for each test case scenario and action. Based on the same, the test data need to be collated for each scenario.
Test drive: The Salesforce platform comes with a program called ‘pre-release trial,’ which allows the testing of any application before entering the production area. Since this is not linked to the production area there would not be any danger of manipulating the real-time data. This gives an ideal opportunity to check various applications if they meet the expected outcomes.
Functional testing: To ensure maximum test coverage and enhance the quality of the code, testers should go for rigorous Salesforce functional testing. This will help them validate various functions from the users’ perspective.
Test management:While conducting tests, the testers should ensure the application, function, or feature is in alignment with the operations or business objectives. Therefore, the test results should be checked against the reference data to ensure quality.
UAT testing: With Salesforce automated testing, care should be taken to conduct User Acceptance Testing (UAT). This way glitches or vulnerabilities inherent in the software can be identified and fixed before the software is released into the market.
Maintaining test records: This is the most crucial aspect of Salesforce testing as it offers stakeholders a dashboard to understand any underlying issues with the software. Whether it is Salesforce automation testing or manual testing, test records help administrators to identify, understand, and mitigate risks. The records document various failure scenarios and help in further escalation to responsible persons to fix the issues.
Conclusion about Salesforce Testing
Implementing a successful test strategy for Salesforce can help businesses to identify the bottlenecks or glitches and streamline their operations. Since a lot is at stake, the applications developed on the platform should be thoroughly tested for various parameters. It is only after following a successful Salesforce testingthat organizations can remain competitive.
lightning-file-upload component provides an easy and integrated way for users to upload multiple files. The file uploader includes drag-and-drop functionality and filtering by file types.
File uploads are always associated to a record, so the record-id attribute is required. Uploaded files are available in Files Home under the Owned by Me filter and on the record’s Attachments related list that’s on the record detail page. Although all file formats that are supported by Salesforce are allowed, you can restrict the file formats using the accept attribute.
lightning-file-upload component inherits styling from file selector in the Lightning Design System.
Now we can add this lwc component on the account detail page.
Go to one of account detail record
Click Setup (Gear Icon) and select Edit Page.
Under Custom Components, find your fileUploadLWC component and drag it on Account page.
Click Save and activate.
We will get the following output where the user will be able to upload multiple files on the account record.
Once the user will click on Done, user will see a success message.
File Upload Limits
By default, you can upload up to 10 files simultaneously unless your Salesforce admin has changed that limit. The org limit for the number of files simultaneously uploaded is a maximum of 25 files and a minimum of 1 file. The maximum file size you can upload is 2 GB. In Communities, the file size limits and types allowed follow the settings determined by community file moderation. By default, guest users can’t upload files. You can enable the org preference. Allow site guest users to upload files.
Usage Considerations
This component is not supported in Lightning Out or standalone apps, and displays as a disabled input. Additionally, if the Don’t allow HTML uploads as attachments or document records security setting is enabled for your organization, the file uploader cannot be used to upload files with the following file extensions: .htm, .html, .htt, .htx, .mhtm, .mhtml, .shtm, .shtml, .acgi, .svg.
For more details please refer to official link. This example is copied from this official link with small tweaks.
The Lightning Web Components programming model has three decorators that add functionality to property or function. Decorators dynamically alter the functionality of a property or function. The ability to create decorators is part of ECMAScript, but these three decorators are unique to Lightning Web Components.
@api: To expose a public property, decorate it with @api. Public properties define the API for a component. An owner component that uses the component in its markup can access the component’s public properties. Public properties are reactive. If the value of reactive property changes, the component’s template rerenders any content that references the property.
@track: To track a private property’s value and rerender a component when it changes, decorate the property with @track. Tracked properties are also called private reactive properties.
@wire: To read Salesforce data, Lightning web components use a reactive wire service. When the wire service provisions data, the component rerenders. Components use @wire in their JavaScript class to specify a wire adaptor or an Apex method.
Here are three decorators in LWC in more details
@api
Public properties are reactive. If the value of public property changes, the component rerenders. To expose a public property, decorate a field with @api. Public properties define the API for a component.
To expose a public method, decorate it with @api. Public methods are part of a component’s API. To communicate down the containment hierarchy, owner and parent components can call JavaScript methods on child components.
Import @api decorator from lwc
import { LightningElement, api } from 'lwc';
@api Example
todoItem.js
// todoItem.js
import { LightningElement, api } from 'lwc';
export default class TodoItem extends LightningElement {
@api itemName = 'New Item';
}
Fields are reactive. If a field’s value changes, and the field is used in a template or in a getter of a property that’s used in a template, the component rerenders and displays the new value.
There is one use case for @track. When a field contains an object or an array, there’s a limit to the depth of changes that are tracked. To tell the framework to observe changes to the properties of an object or to the elements of an array, decorate the field with @track
Import @api decorator from lwc
To read Salesforce data, Lightning web components use a reactive wire service. When the wire service provisions data, the component rerenders. Components use @wire in their JavaScript class to specify a wire adapter or an Apex method.
We need to import the @salesforce/apex scoped module into JavaScript controller class.
import apexMethodName from '@salesforce/apex/Namespace.Classname.apexMethodReference';
Here is list of important point of importing apex method:
apexMethodName : An imported symbol that identifies the Apex method.
apexMethodReference : The name of the Apex method to import.
Classname : The name of the Apex class.
Namespace—The namespace of the Salesforce organization. Specify a namespace unless the organization uses the default namespace (c), in which case don’t specify it.
Call Apex Methods In Lightning web components Example
Apex class AccountHelper
public with sharing class AccountHelper {
@AuraEnabled(cacheable=true)
public static List<Account> getAccountList() {
return [SELECT Id, Name, Type, Rating, Phone
FROM Account];
}
}
We can call the apex class in Lightning web component using these different ways:
Wire a property
Wire a function
Call a method imperatively
Wire a property in lightning Web Component
We can invoke apex method from a component via the wire service. We can @wire a property or a function. Here is the syntax
import apexMethod from '@salesforce/apex/Namespace.Classname.apexMethod';
@wire(apexMethod, { apexMethodParams })
propertyOrFunction;
Lets see example of Wire an Apex Method to a Property
accountListLWC.js
import { LightningElement, wire } from 'lwc';
import getAccountList from '@salesforce/apex/AccountHelper.getAccountList';
export default class AccountListLWC extends LightningElement {
@wire(getAccountList) accounts;
}
System mode means running apex code by ignoring user’s permissions. User mode means running apex code by respecting user’s permissions and sharing of records. Let’s understand it in more detail.
System Mode
System mode means running apex code by ignoring user’s permissions. For example, if logged in user does not have permission to one object but they will able to access that object.
In system mode, Apex code has access to all objects and fields permissions, field-level security, sharing rules aren’t applied for the current user. This is to ensure that code won’t fail to run because of hidden fields or objects for a user.
In Salesforce, all apex code run in system mode. It ignores user’s permissions. Only exception is anonymous blocks like developer console and standard controllers. Even runAs() method doesn’t enforce user permissions or field-level permissions, it only enforces record sharing.
User Mode
User mode means running apex code by respecting user’s permissions and sharing of records. For example, if logged in user does not access to objector a record, then they will not be able to access that object..
In User mode, Profile level permissions, field-level security, and sharing rules are applied for the current user.
In Salesforce, only standard controllers and anonymous blocks like developer console run in user mode.
Here is list of all operations in salesforce and their execution mode:
Apex Trigger: System Mode
Anonymous Apex: User Mode
Apex Webservices (SOAP API and REST API) – System
Chatter in Apex – User Mode
Email Service – User Mode
All types of Jobs – System Mode
Test method with System.runAs() – User Mode
Test method without System.runAs() – System Mode
Validation Rule: System Mode
Auto-Response Rule – System Mode
Assignment Rule: System Mode
Workflow Rule: System Mode
Escalation Rule: System Mode
All Types of calculation behind the formula, Rollup Summary – System Mode
Process Builder: System Mode
Visual Workflow or flow – User Mode
if flow is called from Process Builder – System Mode
if flow is called from Workflow – System
if flow is called from Apex – (depends on with or without sharing of apex class)
if flow is called from Custom Button – System
if flow is embed in Visualforce – Depends on VF Page context
if flow is called from REST API – System
Approval Process – System
Publisher Action – System
InvocableMethod
if this is called from flow – User
if this is called from Process Builder (does it depends on with or without sharing is specified on that Class) – System
if this is called from REST API – (depends on with or without sharing of the class)
Custom Button – System
Visualforce Page (StandardController) – User Mode
Visualforce Page (StandardController with extension) – System Mode
Visualforce Page (Custom Controller)
depends on with or without sharing of the controller
Get Record Id in Lightning Component using force:hasRecordId
Getting current record id in lightning component or lightning aura component is very easy. We need to add force:hasRecordId interface to a Lightning component to enable the component to be assigned the ID of the current record.
The current record ID is useful if the component is used on a Lightning record page, as an object-specific custom action or action override in Lightning Experience or the Salesforce app, and so on. This interface has no effect except when used within Lightning Experience, the Salesforce mobile app, and template-based communities. If you are looking for how to get current record id in LWC(Lightning Web component), please refer to Get Record Id in Lightning Web Component. If you are looking for how to get current record id in visualforce page please refer to get current record id salesforce
The recordId attribute is set only when you place or invoke the component in an explicit record context. For example, when you place the component directly on a record page layout, or invoke it as an object-specific action from a record page or object home. In all other cases, such as when you invoke the component as a global action, or create the component programmatically inside another component, recordId isn’t set, and your component shouldn’t depend on it.
Lets create a simple lightning component CurrentrecordIdExample.cmp
<aura:component implements="flexipage:availableForRecordHome,force:hasRecordId" access="global" >
Account Id is {!v.recordId}
</aura:component>
In this example, we are creating a simple lightning component and displaying record id of record and adding it on account record page.
Now we can add this lightning component on account detail page.
Go to Account tab.
Open any record.
Click Setup (Gear Icon) and select Edit Page.
Under Custom Components, find your CurrentrecordIdExample component and drag it on record page.
Click Save and activate.
We will get the following output
We can also use this component as quick action. For that we need to implement force:lightningQuickAction interface instead of flexipage:availableForRecordHome interface.
On March 16, 2020, our CEO Marc Benioff shared an update regarding our response to COVID-19 and reiterated our commitment to continue to deliver the highest levels of performance, availability, and security. That commitment includes making any necessary adjustments to create stability and consistency for our customers.
Salesforce Summer ’20 Release Date Schedule Calendar
The Sandbox Preview window for Summer ‘20 begins on May 29, 2020. Get early access and take advantage of exciting new features, functionality, and customizations
For more details on the release calendar, please visit salesforce website.
We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it. AcceptRead More
Privacy & Cookies Policy
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
Recent Comments