Thursday 28 March 2019

Lightning Web Components Best practices

We did one live session on Lightning Web Components (LWC) best practices with "René Winkelmeyer" in ApexHours. In that session we talk about how to build rich, efficient, and resilient Lightning Web Components. That webinar covered best practices around
  1. Using public, and private properties for effective component composition.
    1. When we should use @api or @track variable
  2. Event communication for child-to-parent as well as for sibling components (pubsub).
    1. Parent to Child Communication
    2. Child to Parent Communication
    3.  pubsub
  3. When, and when not, to use Apex with Lightning Web Components
    1. UI Record Api in LWC
    2. Lightning Data Service in LWC (Lightning record form)
  4. Aura interoperabilitys Recipes, Patterns and Best Practices
  5. How to debug Lightning Web Components
  6. How to test Lightning Web Component (Lightning Testing Service)
    1. Jest Tests for Lightning Web Components ( LTS )
Here is some best practice :-

1) LWC component Bundle naming convention 

 Check this post to learn about what is camelCase, PascalCase and kebab-case.
  1. Html file : Use camel case to name your component and use kebab-case to reference a component in the markup
  2. JavaScript File : Java Script Class name should be in PascalCase
  3. Bundle Component : use camelCase.  

2) Apex

There are two way to call Apex class in Lightning web component.
  1. Imperatively
  2. Wire 
    1. Wire a property
    2. Wire a function  

Wire Vs Imperatively :

As per Lightning component best practices use @wire over imperative method invocation. @wire fits nicely in the overall Lightning Web Component reactive architecture. Salesforce is building some performance enhancement features that are only available with @wire. But there are a few use cases,, that require you to use imperative Apex.

Wire Property Vs Wire Function :

Prefer wiring to a property. This best practice applies to @wire in general (not just to wiring Apex methods).

3) Lightning Data Service

As per LWC best practice use Lightning Data Service functions to create,Record, and delete a record over invoking Apex methods. Yes there are some use cases where you need to multiple records then we can use Apex methods.

Lightning Data Service is built on top of User Interface API. UI API is a public Salesforce API that Salesforce uses to build Lightning Experience. Like its name suggests, UI API is designed to make it easy to build Salesforce UI. UI API gives you data and metadata in a single response

Give preference to user interface form-type in below order.
  1. lightning-record-form : It is the fastest/most productive way to build a form.
  2. lightning-record-view-form : If you need more control over the layout, want to handle events on individual input fields, or need to execute pre-submission
  3. @wire(getRecord) : If you need even more control over the UI, or if you need to access data without a UI

4) Event in LWC

There are typically 3 approaches for communication between the components using events.
  1. Communication using Method in LWC ( Parent to Child )
  2. Custom Event Communication in Lightning Web Component (Child to Parent )
  3. Publish Subscriber model in Lightning Web Component ( Two components which doesn't have a direct relation )
Here is some recommendation for DOM Event.
  1. No uppercase letters
  2. No Spaces
  3. use underscores to separate words
  4. Don't prefix your event name with string "on".

5) Streaming API, Platform Event, Change Data Capture

The lightning/empApi module provides access to methods for subscribing to a streaming channel and listening to event messages. All streaming channels are supported, including channels for platform events, PushTopic events, generic events, and Change Data Capture events. This component requires API version 44.0 or later. The lightning/empApi module uses a shared CometD connection. Example Code.

6) How to debug LWC

Use Chrome pretty JS setting to see unminified JavaScript and Debug Proxy Values for Data. Here is example.
  • Enable Debug mode
    • It gives unminified Javascript
    • Console warnings
    • Pretty data structure
  • Caution - it reduces performance of Salesforce, make sure its disabled in production

7) Use Storable Action

Use Storable Action, It will reduces call to Server. Syntax - @AuraEnabled(cacheable=true)

Caution: A storable action might result in no call to the server. Never mark as storable an action that updates or deletes data.
For storable actions in the cache, the framework returns the cached response immediately and also refreshes the data if it’s stale. Therefore, storable actions might have their callbacks invoked more than once: first with cached data, then with updated data from the server.

Some more key point
  1. Use Playground to markup Custom Components
  2. Use Local Development 
  3. Refer Lightning Web Component Recipe for best practices


Here is recording of session.

If you missed our first session on Introduction to Lightning Web component then please check our this recording.

Further Learning :

1) Introducing Lightning Web Components Recipes, Patterns and Best Practices

Please check below post on Lightning Web Components:-
  1. Lightning Web Components ( LWC ) in Salesforce with Non-Scratch Org
  2. Design attributes in Lightning Web Components | CSS and SVG Files | Lightning Web Components | targetConfigs
  3. Toast Notification in Lightning Web Components | ShowToastEvent |  (LWC)

Amit Chaudhary

Sunday 10 March 2019

Continuous Integration in Salesforce Using Jenkins and GitHub (CI/CD)

In this post we will talk about how to Setup Continuous Integration in Salesforce using Jenkins and GitHub with ANT. On 9 March 2019 we did one live session in ApexHours on "Integrate GitHub with Jenkins (CI/CD)" with Anjum Attar.

Before taking about "Integrate GitHub with Jenkins (CI/CD)". We are assuming you are already know the ANT Migration tool, VsCode and SFDX .

Integrate GitHub with Jenkins using ANT

Please check below recording to learn about "Integrate GitHub with Jenkins". In our ApexHours Session we covered the below topics :
  1. Before Jenkins ( Problem statement )
  2. What Is Jenkins?
  3. What is Continuous Integration?
  4. Features of Jenkins
  5. Demo : Integrate GitHub with Jenkins
    • Create AWS console Account
    • How to Create Github repository
    • How to Create Jenkin job
    • Connect your Jenkin and Github account
    • How to create Webhooks
    • Continuous Deployment with ANT.
In above recording we used ANT Migration tool for deployment. Check this post to learn about ANT.

Continuous Integration using Jenkins with SFDX | Using JWT Flow.

In our last post we talk about how to setup Continuous Integration in Salesforce Using SalesforceDX with Jenkins (SalesforceDx Jenkins Integration). Please check below Recording / Post to learn about below topic :
  1. How to Install Jenkins
  2. Create Self-Signed SSL Certificate and Private Key using openssl
  3. Create Connected App for JWT - Based Flow. 
  4. Configure the Jenkins environment variable
  5. Configure the Jenkins job
Please check our YouTube Recording for step by step process

Check this post to learn more about Salesforce Dx. Here is recording for SalesforceDx Session in ApexHours.

Related Post with Video :-
1) SalesforceDx
2) VsCode for Salesforce
3) SalesforceDX for Non-Scratch Org
4) ANT Migration tool

Amit Chaudhary
Capture.JPG  @amit_sfdc    @ApexHours
  Salesforce Apex Hours