GridMate can be deployed on Salesforce Classic. Only RelatedList and ListView grids are supported. To run GridMate on Classic, we use Salesforce Lightning out .
Lightning application setup
To run the Lightning out on Classic, a lightning app VFListViewDataGridApp should be created with the markup below.
Copy <aura:application extends="ltng:outApp" >
<aura:dependency resource="gmpkg:VFListViewDataGridComponent"/>
<aura:dependency resource="markup://force:showToast" type="EVENT"/>
<aura:dependency resource="markup://force:refreshView" type="EVENT"/>
</aura:application>
Visualforce page setup
Create a Visualforce page to wrap GridMate component using the Lightning out technology.
Copy <apex:page controller="VFListViewDataGridController"
showHeader="true"
sidebar="false">
<apex:includeLightning />
<div id="workbench" />
<script>
$Lightning.use("{!lightningApp}", function() {
//prepare attributes
let attributes = JSON.parse('{!attributes}' || '{}');
attributes = Object.assign(attributes, {
"aura:id": "listViewGrid",
"relatedObjectName" : "{!relatedObjectName}",
"listViewName" : "{!listViewName}"
"canFilter": true
});
//create the data grid
$Lightning.createComponent("gmpkg:VFListViewDataGridComponent",
attributes,
"workbench",
function(component) {
$A.eventService.addHandler({
event: 'force:showToast',
handler: function(event) {
let toast = component.find("toast");
toast.showToast(event.getParams());
}
});
});
});
</script>
</apex:page>
We have also to implement the Visualforce controller with its unit test class
Copy /***
* @author Hicham El Mansouri@GridMate
* @date 12/2019
* @description DataGrid controller class for VFListViewDataGrid.
*/
public with sharing class VFListViewDataGridController {
private final String lightningApp;
private final String relatedObjectName;
private final String listViewName;
private final String attributes;
public VFListViewDataGridController() {
lightningApp = ApexPages.currentPage().getParameters().get('c__lightningApp');
relatedObjectName = ApexPages.currentPage().getParameters().get('c__object');
attributes = ApexPages.currentPage().getParameters().get('c__attributes');
listViewName = getLastUsedListView(relatedObjectName);
}
private static String getLastUsedListView(String objName)
{
try{
RecentlyViewed recentItem = [Select Id, Name From RecentlyViewed
Where Type='ListView' Order by LastViewedDate Desc Limit 1];
ListView listView = [Select Id, Name, DeveloperName From ListView
Where SobjectType=:objName And Name=:recentItem.Name Limit 1];
return listView.DeveloperName;
}
catch(Exception ex){
System.debug(ex.getStackTraceString());
return null;
}
}
public String getRelatedObjectName() {
return relatedObjectName;
}
public String getAttributes() {
return attributes;
}
public String getListViewName() {
return listViewName;
}
public String getLightningApp() {
return lightningApp;
}
}
Copy /***
* @author Hicham El Mansouri@GridMate
* @date 12/2019
* @description DataGrid controller class for VFListViewDataGrid.
*/
@isTest
public class VFListViewDataGridControllerTest {
static testMethod void testGetLastUsedListView(){
ApexPages.currentPage().getParameters().put('c__lightningApp', 'c:VFListViewDataGridApp');
ApexPages.currentPage().getParameters().put('c__object', 'Account');
ApexPages.currentPage().getParameters().put('c__attributes', '%7B"canCreate"%3A+true%2C"canClone"%3A+true%7D');
VFListViewDataGridController c = new VFListViewDataGridController();
String lastUsed = c.getListViewName();
if(lastUsed == null){System.assert(lastUsed == null);}
else{ System.assert(lastUsed != null);}
String relatedObjectName = c.getRelatedObjectName();
System.assert(relatedObjectName != null);
String attributes = c.getAttributes();
System.assert(attributes != null);
String lightningApp = c.getLightningApp();
System.assert(lightningApp != null);
}
}
Mass Edit button setup
To trigger the mass edit Visualforce page, we have to configure a link on the targeted object.
Copy {! URLFOR( "/apex/VFListViewDataGridPage?", null,
[
c__lightningApp='c:VFListViewDataGridApp',
c__object='Account',
c__attributes='{"canCreate":true,"canClone":true,"canFilter":true}'
]
)}
Mass Edit can be enabled on any object by duplicating the link below and changing the c__object parameter only.
The link should be added to the list of actions on a ListView.
Remote Site setup
GridMate uses API to fetch the ListView's metadata. Visualforce URL should be added to Remote Site Settings. See below 👇