Copy To Clipboard | Lightning Component | Copy sObject Record Link

The blog post discusses the 'Copy To Clipboard' functionality in the lightning component, used in Salesforce, using javascript. This feature allows users to copy the record link from standard or custom objects in a single click, eliminating the need to copy it from the browser URL. This improves efficiency when sharing record links via email or documenting them.

8

In this blog post, I am going to share the ‘Copy To Clipboard’ functionality in the lightning component using javascript. While working with the records in Salesforce sometimes user needs the record link to share in an email or need to use in the documentation or somewhere else.

This component will copy the record link in the clipboard in just a single click, the user does not need to copy the record link from browser URL. The component can be used for every standard and custom object, the user just needs to add the component on the object detail page and needs to click on the link button icon, the record link will be copied in the clipboard.

Find the full component code below.

copyToClipboardCmp

<aura:component controller="copyToClipboardCntrl" implements="flexipage:availableForRecordHome,force:hasRecordId" access="global" >
<aura:attribute name="recordId" type="string" />
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
<aura:attribute name="wrapperObj" type="Object"/>
<div class="slds">
<div class="slds-grid">
<div class="slds-col slds-size--12-of-12">
<div class="slds-page-header" style="border-radius: 0px; border-right: 0px;border-left: 0px;border-top: 0px;
box-shadow: 0 0px 0px 0 rgba(0, 0, 0, 0.1);">
<lightning:icon iconName="utility:copy_to_clipboard" alternativeText="Copy To Clipboard" size="small" />
&nbsp;COPY TO CLIPBOARD
</div>
</div>
</div>
<table class="slds-table slds-table--bordered">
<thead>
<tr>
<th>NAME</th>
<th>LINK</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<lightning:icon iconName="{!v.wrapperObj.iconName}" alternativeText="{!v.wrapperObj.iconName}" size="small" />
&nbsp;{!v.wrapperObj.sObjectName}</td>
<td>
<lightning:buttonIcon title="{!v.wrapperObj.recUrlLink}" aura:id="link" value="{!index}" iconName="utility:link" alternativeText="Link" onclick="{!c.copyLink}"/>
</td>
</tr>
</tbody>
</table>
</div>
</aura:component>

copyToClipboardCmpController

({
doInit : function(component, event, helper) {
//get the object details from apex
helper.getsObjectName(component,event,helper);
},
copyLink:function(component,event,helper){
//dynamically creating html component
var hiddenInputEle = document.createElement("input");
//get the title of clicked element (record link)
let val = event.getSource().get("v.title");
//set value attribute as actual record link
hiddenInputEle.setAttribute("value", val);
//append the element in the document body
document.body.appendChild(hiddenInputEle);
// select the content
hiddenInputEle.select();
// Execute the copy command
document.execCommand("copy");
document.body.removeChild(hiddenInputEle);
//Show toast message after link copied in the clipboard
var toastEvent = $A.get("e.force:showToast");
toastEvent.setParams({
mode: 'sticky',
title: 'Success!',
message: 'Link has been copied to clipboard.',
type: 'success'
});
toastEvent.fire();
}
})

copyToClipboardCmpHelper

({
getsObjectName : function(component, event, helper) {
let action = component.get("c.fetchsObjectDetails");
action.setParams({
"recId" : component.get("v.recordId")
});
action.setCallback(this,function(response){
let state = response.getState();
if(state == 'SUCCESS'){
let result = response.getReturnValue();
console.log('Result returned: '+result);
component.set("v.wrapperObj",result);
}else{
console.log('Something went wrong!');
}
});
$A.enqueueAction(action);
}
})

copyToClipboardCntrl

/* Name:copyToClipboardCntrl
* Description: This Apex class retrieve the sObject details such as Name, record link from database.
* Created Date: 01/05/2019
* LastModified Date:01/05/2019
* Created By: Arun Kumar
* Version: 1.0
*/
public class copyToClipboardCntrl {
@AuraEnabled
public static wrapperCls fetchsObjectDetails(Id recId){
string sObjectTypeName = recId.getSObjectType().getDescribe().getName();
SObject record = Database.query('Select Id, Name From ' + sObjectTypeName + ' Where Id = :recId');
system.debug('Record = '+record);
String iconName;
String recordURL;
string sObjectName = sObjectTypeName;
List<Schema.DescribeTabSetResult> tabDescList = Schema.describeTabs();
List<Schema.DescribeTabResult> tabDescResult = new List<Schema.DescribeTabResult>();
List<Schema.DescribeIconResult> iconDescResult = new List<Schema.DescribeIconResult>();
for(Schema.DescribeTabSetResult tdl : tabDescList) { tabDescResult.addAll(tdl.getTabs()); }
for(Schema.DescribeTabResult tdr : tabDescResult) {
if( sObjectName == tdr.getSobjectName() ) {
if( tdr.isCustom() == true ) {
iconDescResult.addAll(tdr.getIcons());
} else {
iconName = 'standard:'+sObjectName.toLowerCase();
}
}
}
for (Schema.DescribeIconResult idr : iconDescResult) {
if (idr.getContentType() == 'image/svg+xml'){
iconName = 'custom:' + idr.getUrl().substringBetween('custom/','.svg').substringBefore('_');
break;
}
}
system.debug('Tab Icon Name'+ iconName);
String urlInstance = String.valueof(System.URL.getSalesforceBaseURL().gethost());
String s2 = urlInstance.removeEndIgnoreCase('.my.salesforce.com');
String finalURL = 'https://'+s2+&#39;.lightning.force.com/lightning/r/'+sObjectTypeName+'/'+recId+'/view';
String fieldValue = (String) record.get('Name');
system.debug('Record: ' +fieldValue);
wrapperCls wObject = new wrapperCls(fieldValue,finalURL,iconName);
return wObject;
}
public class wrapperCls{
@AuraEnabled
public String sObjectName;
@AuraEnabled
public String recUrlLink;
@AuraEnabled
public String iconName;
public wrapperCls(string sObjectName,String recUrlLink,String iconName){
this.sObjectName = sObjectName;
this.recUrlLink = recUrlLink;
this.iconName = iconName;
}
}
}

Happy Coding…! 

Arun Kumar
Arun Kumar

Arun Kumar is a Salesforce Certified Platform Developer I with over 7+ years of experience working on the Salesforce platform. He specializes in developing custom applications, integrations, and reports to help customers streamline their business processes. Arun is passionate about helping businesses leverage the power of Salesforce to achieve their goals.

Articles: 162

Leave a Reply

Discover more from SFDC Lessons

Subscribe now to keep reading and get access to the full archive.

Continue reading

Discover more from SFDC Lessons

Subscribe now to keep reading and get access to the full archive.

Continue reading