-
ChatterFeed
-
0Best Answers
-
2Likes Received
-
0Likes Given
-
1Questions
-
5Replies
list view print functionality in lightning
I have developed code to over come limitation of print option for list view.
VF Page
Controller class
Lightning component
Component controller JS
Helper classes
You can modify this code any other object you wish to implement.
Create listview button with the VF page.
VF Page
<apex:page sidebar="false" standardStylesheets="false" cache="false" standardController="Account" recordSetVar="accounts" lightningStylesheets="true"> <button id="upload-button" onclick="window.print();" style="margin-left: 50%;" Class="slds-button">Print</button> <apex:includeLightning /> <div id="lightning" ></div> <script> $Lightning.use("c:ListView", function() { $Lightning.createComponent("c:ListViewComponent", { label : "" }, "lightning", function(cmp) { }); }); </script> </apex:page>
Controller class
public with sharing class ListViewController { // Method to get all list view option available for the Account object @AuraEnabled public static List<SelectOption> getListViews(){ SelectOption lstView=new SelectOption ('--None--','--None--'); List<SelectOption> listviews = new List<SelectOption>(); listviews.add(lstView); for(ListView lstObj : [SELECT Id, Name FROM ListView WHERE SobjectType = 'Account' order by name ASC]){ listviews.add(new SelectOption (lstObj.id,lstObj.name)); } return listviews; } // Method to get the Account records based on the selected list view @AuraEnabled public static DynamicTableMapping getFilteredAccounts(String filterId){ list<string> headervalue =new list<string>(); HttpRequest req = new HttpRequest(); String baseUrl = URL.getSalesforceBaseUrl().toExternalForm(); String endPoinURL = baseUrl+'/services/data/v32.0/sobjects/Account/listviews/'+filterId+'/describe'; req.setEndpoint(endPoinURL); req.setMethod('GET'); req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId()); Http http = new Http(); HTTPResponse response = http.send(req); Map<String, Object> tokenResponse = (Map<String, Object>) JSON.deserializeUntyped(response.getBody()); String query = (String) tokenResponse.get('query'); system.debug('query--->'+query); for(string s:query.split(',')){ s=s.trim(); if(s.startsWith('SELECT')){ headervalue.add((s.removeStart('SELECT')).trim()); }else if(!s.startsWith('SYSTEMMODSTAMP') && !s.equalsIgnoreCase('SYSTEMMODSTAMP FROM ACCOUNT ORDER BY NAME ASC NULLS FIRST') && !s.contains('ASC')){ headervalue.add(s.trim()); } } List<ObjectValueMap> AccountList = new List<ObjectValueMap>(); for(Account accountObj : database.query(query)){ Map<String, Schema.SObjectField> objectFields = Account.getSObjectType().getDescribe().fields.getMap(); list<FieldValues> fieldValue=new list<FieldValues>(); for(string s:headervalue){ Schema.DescribeFieldResult dr; if (objectFields.containsKey(s)) dr = objectFields.get(s).getDescribe(); if(null!=dr) fieldValue.add(new FieldValues(string.valueof(null==accountObj.get(dr.getName())?'':accountObj.get(dr.getName())))); else fieldValue.add(new FieldValues(string.valueof(''))); } AccountList.add(new ObjectValueMap(accountObj,fieldValue)); } return new DynamicTableMapping(headervalue,AccountList); } }
Lightning component
<aura:component controller="ListViewController" implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes,force:lightningQuickAction" access="global" > <aura:handler name="init" value="{!this}" action="{!c.doInit}"/> <aura:attribute name="AccountListViewList" type="SelectOption[]"/> <aura:attribute name="AccountList" type="DynamicTableMapping"/> <aura:attribute name="fieldList" type="string[]"/> <ui:inputSelect class="slds-select slds-size_small" aura:id="selectedViewId" label="Account View" change="{!c.getFilteredAccount}"> <aura:iteration items="{!v.AccountListViewList}" var="listview"> <ui:inputSelectOption text="{!listview.value}" label="{!listview.label}"/> </aura:iteration> </ui:inputSelect> <br/><br/> <table class="slds-table slds-table_bordered slds-table_cell-buffer"> <thead> <tr class="slds-text-title_caps"> <aura:iteration items="{!v.fieldList}" var="item"> <th scope="col"> <div class="slds-truncate" title="{!item}">{!item}</div> </th> </aura:iteration> </tr> </thead> <tbody> <aura:iteration items="{!v.AccountList}" var="item" indexVar="index"> <tr> <aura:iteration items="{!item.values}" var="item1"> <td> {!item1.value} </td></aura:iteration> </tr> </aura:iteration> </tbody> </table> </aura:component>
Component controller JS
({ doInit : function(component, event, helper){ var action = component.get("c.getListViews"); action.setCallback(this, function(response){ var state = response.getState(); if (state === "SUCCESS") { component.set("v.AccountListViewList",response.getReturnValue()); } }); $A.enqueueAction(action); }, getFilteredAccount : function (component, event, helper) { var selected = component.find("selectedViewId").get("v.value"); var action = component.get("c.getFilteredAccounts"); action.setParams({filterId : selected}); action.setCallback(this, function(response){ var state = response.getState(); if (state === "SUCCESS") { component.set("v.AccountList",response.getReturnValue().value); component.set("v.fieldList",response.getReturnValue().headervalues); } }); $A.enqueueAction(action); }, })
Helper classes
public class DynamicTableMapping { @AuraEnabled public list<string> headervalues{get;set;} @AuraEnabled public list<ObjectValueMap> value{get;set;} public DynamicTableMapping(list<string> headervalues,list<ObjectValueMap> value){ this.headervalues=headervalues; this.value=value; } } --- Value map class-- public class ObjectValueMap { @AuraEnabled public account account{get;set;} @AuraEnabled public list<fieldValues> values{get;set;} public ObjectValueMap(account acc,list<fieldValues> values){ this.account=acc; this.values=values; } } -- Field values class-- public class FieldValues { @auraenabled public object value{get;set;} public FieldValues(object value){ this.value=value; } }
You can modify this code any other object you wish to implement.
Create listview button with the VF page.
- vijay kumar 495
- November 30, 2017
- Like
- 2
list view print functionality in lightning
I have developed code to over come limitation of print option for list view.
VF Page
Controller class
Lightning component
Component controller JS
Helper classes
You can modify this code any other object you wish to implement.
Create listview button with the VF page.
VF Page
<apex:page sidebar="false" standardStylesheets="false" cache="false" standardController="Account" recordSetVar="accounts" lightningStylesheets="true"> <button id="upload-button" onclick="window.print();" style="margin-left: 50%;" Class="slds-button">Print</button> <apex:includeLightning /> <div id="lightning" ></div> <script> $Lightning.use("c:ListView", function() { $Lightning.createComponent("c:ListViewComponent", { label : "" }, "lightning", function(cmp) { }); }); </script> </apex:page>
Controller class
public with sharing class ListViewController { // Method to get all list view option available for the Account object @AuraEnabled public static List<SelectOption> getListViews(){ SelectOption lstView=new SelectOption ('--None--','--None--'); List<SelectOption> listviews = new List<SelectOption>(); listviews.add(lstView); for(ListView lstObj : [SELECT Id, Name FROM ListView WHERE SobjectType = 'Account' order by name ASC]){ listviews.add(new SelectOption (lstObj.id,lstObj.name)); } return listviews; } // Method to get the Account records based on the selected list view @AuraEnabled public static DynamicTableMapping getFilteredAccounts(String filterId){ list<string> headervalue =new list<string>(); HttpRequest req = new HttpRequest(); String baseUrl = URL.getSalesforceBaseUrl().toExternalForm(); String endPoinURL = baseUrl+'/services/data/v32.0/sobjects/Account/listviews/'+filterId+'/describe'; req.setEndpoint(endPoinURL); req.setMethod('GET'); req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId()); Http http = new Http(); HTTPResponse response = http.send(req); Map<String, Object> tokenResponse = (Map<String, Object>) JSON.deserializeUntyped(response.getBody()); String query = (String) tokenResponse.get('query'); system.debug('query--->'+query); for(string s:query.split(',')){ s=s.trim(); if(s.startsWith('SELECT')){ headervalue.add((s.removeStart('SELECT')).trim()); }else if(!s.startsWith('SYSTEMMODSTAMP') && !s.equalsIgnoreCase('SYSTEMMODSTAMP FROM ACCOUNT ORDER BY NAME ASC NULLS FIRST') && !s.contains('ASC')){ headervalue.add(s.trim()); } } List<ObjectValueMap> AccountList = new List<ObjectValueMap>(); for(Account accountObj : database.query(query)){ Map<String, Schema.SObjectField> objectFields = Account.getSObjectType().getDescribe().fields.getMap(); list<FieldValues> fieldValue=new list<FieldValues>(); for(string s:headervalue){ Schema.DescribeFieldResult dr; if (objectFields.containsKey(s)) dr = objectFields.get(s).getDescribe(); if(null!=dr) fieldValue.add(new FieldValues(string.valueof(null==accountObj.get(dr.getName())?'':accountObj.get(dr.getName())))); else fieldValue.add(new FieldValues(string.valueof(''))); } AccountList.add(new ObjectValueMap(accountObj,fieldValue)); } return new DynamicTableMapping(headervalue,AccountList); } }
Lightning component
<aura:component controller="ListViewController" implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes,force:lightningQuickAction" access="global" > <aura:handler name="init" value="{!this}" action="{!c.doInit}"/> <aura:attribute name="AccountListViewList" type="SelectOption[]"/> <aura:attribute name="AccountList" type="DynamicTableMapping"/> <aura:attribute name="fieldList" type="string[]"/> <ui:inputSelect class="slds-select slds-size_small" aura:id="selectedViewId" label="Account View" change="{!c.getFilteredAccount}"> <aura:iteration items="{!v.AccountListViewList}" var="listview"> <ui:inputSelectOption text="{!listview.value}" label="{!listview.label}"/> </aura:iteration> </ui:inputSelect> <br/><br/> <table class="slds-table slds-table_bordered slds-table_cell-buffer"> <thead> <tr class="slds-text-title_caps"> <aura:iteration items="{!v.fieldList}" var="item"> <th scope="col"> <div class="slds-truncate" title="{!item}">{!item}</div> </th> </aura:iteration> </tr> </thead> <tbody> <aura:iteration items="{!v.AccountList}" var="item" indexVar="index"> <tr> <aura:iteration items="{!item.values}" var="item1"> <td> {!item1.value} </td></aura:iteration> </tr> </aura:iteration> </tbody> </table> </aura:component>
Component controller JS
({ doInit : function(component, event, helper){ var action = component.get("c.getListViews"); action.setCallback(this, function(response){ var state = response.getState(); if (state === "SUCCESS") { component.set("v.AccountListViewList",response.getReturnValue()); } }); $A.enqueueAction(action); }, getFilteredAccount : function (component, event, helper) { var selected = component.find("selectedViewId").get("v.value"); var action = component.get("c.getFilteredAccounts"); action.setParams({filterId : selected}); action.setCallback(this, function(response){ var state = response.getState(); if (state === "SUCCESS") { component.set("v.AccountList",response.getReturnValue().value); component.set("v.fieldList",response.getReturnValue().headervalues); } }); $A.enqueueAction(action); }, })
Helper classes
public class DynamicTableMapping { @AuraEnabled public list<string> headervalues{get;set;} @AuraEnabled public list<ObjectValueMap> value{get;set;} public DynamicTableMapping(list<string> headervalues,list<ObjectValueMap> value){ this.headervalues=headervalues; this.value=value; } } --- Value map class-- public class ObjectValueMap { @AuraEnabled public account account{get;set;} @AuraEnabled public list<fieldValues> values{get;set;} public ObjectValueMap(account acc,list<fieldValues> values){ this.account=acc; this.values=values; } } -- Field values class-- public class FieldValues { @auraenabled public object value{get;set;} public FieldValues(object value){ this.value=value; } }
You can modify this code any other object you wish to implement.
Create listview button with the VF page.
- vijay kumar 495
- November 30, 2017
- Like
- 2
list view print functionality in lightning
I have developed code to over come limitation of print option for list view.
VF Page
Controller class
Lightning component
Component controller JS
Helper classes
You can modify this code any other object you wish to implement.
Create listview button with the VF page.
VF Page
<apex:page sidebar="false" standardStylesheets="false" cache="false" standardController="Account" recordSetVar="accounts" lightningStylesheets="true"> <button id="upload-button" onclick="window.print();" style="margin-left: 50%;" Class="slds-button">Print</button> <apex:includeLightning /> <div id="lightning" ></div> <script> $Lightning.use("c:ListView", function() { $Lightning.createComponent("c:ListViewComponent", { label : "" }, "lightning", function(cmp) { }); }); </script> </apex:page>
Controller class
public with sharing class ListViewController { // Method to get all list view option available for the Account object @AuraEnabled public static List<SelectOption> getListViews(){ SelectOption lstView=new SelectOption ('--None--','--None--'); List<SelectOption> listviews = new List<SelectOption>(); listviews.add(lstView); for(ListView lstObj : [SELECT Id, Name FROM ListView WHERE SobjectType = 'Account' order by name ASC]){ listviews.add(new SelectOption (lstObj.id,lstObj.name)); } return listviews; } // Method to get the Account records based on the selected list view @AuraEnabled public static DynamicTableMapping getFilteredAccounts(String filterId){ list<string> headervalue =new list<string>(); HttpRequest req = new HttpRequest(); String baseUrl = URL.getSalesforceBaseUrl().toExternalForm(); String endPoinURL = baseUrl+'/services/data/v32.0/sobjects/Account/listviews/'+filterId+'/describe'; req.setEndpoint(endPoinURL); req.setMethod('GET'); req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId()); Http http = new Http(); HTTPResponse response = http.send(req); Map<String, Object> tokenResponse = (Map<String, Object>) JSON.deserializeUntyped(response.getBody()); String query = (String) tokenResponse.get('query'); system.debug('query--->'+query); for(string s:query.split(',')){ s=s.trim(); if(s.startsWith('SELECT')){ headervalue.add((s.removeStart('SELECT')).trim()); }else if(!s.startsWith('SYSTEMMODSTAMP') && !s.equalsIgnoreCase('SYSTEMMODSTAMP FROM ACCOUNT ORDER BY NAME ASC NULLS FIRST') && !s.contains('ASC')){ headervalue.add(s.trim()); } } List<ObjectValueMap> AccountList = new List<ObjectValueMap>(); for(Account accountObj : database.query(query)){ Map<String, Schema.SObjectField> objectFields = Account.getSObjectType().getDescribe().fields.getMap(); list<FieldValues> fieldValue=new list<FieldValues>(); for(string s:headervalue){ Schema.DescribeFieldResult dr; if (objectFields.containsKey(s)) dr = objectFields.get(s).getDescribe(); if(null!=dr) fieldValue.add(new FieldValues(string.valueof(null==accountObj.get(dr.getName())?'':accountObj.get(dr.getName())))); else fieldValue.add(new FieldValues(string.valueof(''))); } AccountList.add(new ObjectValueMap(accountObj,fieldValue)); } return new DynamicTableMapping(headervalue,AccountList); } }
Lightning component
<aura:component controller="ListViewController" implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes,force:lightningQuickAction" access="global" > <aura:handler name="init" value="{!this}" action="{!c.doInit}"/> <aura:attribute name="AccountListViewList" type="SelectOption[]"/> <aura:attribute name="AccountList" type="DynamicTableMapping"/> <aura:attribute name="fieldList" type="string[]"/> <ui:inputSelect class="slds-select slds-size_small" aura:id="selectedViewId" label="Account View" change="{!c.getFilteredAccount}"> <aura:iteration items="{!v.AccountListViewList}" var="listview"> <ui:inputSelectOption text="{!listview.value}" label="{!listview.label}"/> </aura:iteration> </ui:inputSelect> <br/><br/> <table class="slds-table slds-table_bordered slds-table_cell-buffer"> <thead> <tr class="slds-text-title_caps"> <aura:iteration items="{!v.fieldList}" var="item"> <th scope="col"> <div class="slds-truncate" title="{!item}">{!item}</div> </th> </aura:iteration> </tr> </thead> <tbody> <aura:iteration items="{!v.AccountList}" var="item" indexVar="index"> <tr> <aura:iteration items="{!item.values}" var="item1"> <td> {!item1.value} </td></aura:iteration> </tr> </aura:iteration> </tbody> </table> </aura:component>
Component controller JS
({ doInit : function(component, event, helper){ var action = component.get("c.getListViews"); action.setCallback(this, function(response){ var state = response.getState(); if (state === "SUCCESS") { component.set("v.AccountListViewList",response.getReturnValue()); } }); $A.enqueueAction(action); }, getFilteredAccount : function (component, event, helper) { var selected = component.find("selectedViewId").get("v.value"); var action = component.get("c.getFilteredAccounts"); action.setParams({filterId : selected}); action.setCallback(this, function(response){ var state = response.getState(); if (state === "SUCCESS") { component.set("v.AccountList",response.getReturnValue().value); component.set("v.fieldList",response.getReturnValue().headervalues); } }); $A.enqueueAction(action); }, })
Helper classes
public class DynamicTableMapping { @AuraEnabled public list<string> headervalues{get;set;} @AuraEnabled public list<ObjectValueMap> value{get;set;} public DynamicTableMapping(list<string> headervalues,list<ObjectValueMap> value){ this.headervalues=headervalues; this.value=value; } } --- Value map class-- public class ObjectValueMap { @AuraEnabled public account account{get;set;} @AuraEnabled public list<fieldValues> values{get;set;} public ObjectValueMap(account acc,list<fieldValues> values){ this.account=acc; this.values=values; } } -- Field values class-- public class FieldValues { @auraenabled public object value{get;set;} public FieldValues(object value){ this.value=value; } }
You can modify this code any other object you wish to implement.
Create listview button with the VF page.
- vijay kumar 495
- November 30, 2017
- Like
- 2