Controller class public with sharing class ListViewController { // Method to get all list view option available for the Account object @AuraEnabled public static List getListViews(){ SelectOption  lstView=new SelectOption ('--None--','--None--'); List listviews = new List(); 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 headervalue =new list(); 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 tokenResponse = (Map) 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 AccountList = new List(); for(Account accountObj : database.query(query)){ Map objectFields = Account.getSObjectType().getDescribe().fields.getMap(); list fieldValue=new list(); 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

{!item}
{!item1.value}
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 headervalues{get;set;} @AuraEnabled public list value{get;set;} public DynamicTableMapping(list headervalues,list value){ this.headervalues=headervalues; this.value=value; } } --- Value map class-- public class ObjectValueMap { @AuraEnabled public account account{get;set;} @AuraEnabled public list values{get;set;} public ObjectValueMap(account acc,list 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.", "answerCount": 18, "upvoteCount": 2, "datePublished": "2017-11-30T05:13:38.000Z", "author": { "@type": "Person", "name": "Vijayakumar VM", "url": "https://trailblazers.salesforce.com/profileView?u=0053000000Bms3jAAB", "affiliation": { "@type": "Organization", "name": "--" } }, "suggestedAnswer": [ { "@type": "Answer", "text": "Thanks Vijay", "upvoteCount": 0, "url": "https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T4101SAB", "datePublished": "2017-12-04T08:06:04.000Z", "author": { "@type": "Person", "name": "Emerson Brophy", "url": "https://trailblazers.salesforce.com/profileView?u=0053A00000Dgn15QAB", "affiliation": { "@type": "Organization", "name": "--" } } } ] } } Skip to main content
Vijayakumar VM a posé une question dans #Lightning Experience
I have developed code to over come limitation of print option for list view.

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.
18 réponses
0/9000