function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Sainath VenkatSainath Venkat 

list view selected ids to visualforce page

I am working on creating list view button which can pass selected id's to visualforce page but some how vf page is unable to catch those selected id's.
In classis I used javascript buttons but can anyone help me out how to do this in lightning. My code is below.

Apex Class:
public with sharing class PaymentSummaryController {
    
   
    public boolean InError {get;set;}
    
    public decimal TotalAmount {get;set;}
    public decimal TotalAppliedAmount {get;set;}
    public integer TotalItems {get;set;}
    
    public List<String> selectedIds {get;set;}
   
    public PaymentSummaryController(ApexPages.StandardSetController controller) {
       
        InError=false;
        controller.setPageSize(1000); 
        
        String str = ApexPages.currentPage().getParameters().get('selectedIds');
        if(str !=null)
            selectedIds = String.escapeSingleQuotes(str).split(',');
        
        
        if (selectedIds==null || selectedIds.size()==0) {
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Please select at least one record.');
            ApexPages.addMessage(myMsg);
            InError=true;
        } 
        else {
            TotalAmount=0;
            TotalAppliedAmount=0;
            TotalItems=0;
            for (EXECED_Payment__c p : [select id,Amount__c,Total_Applied_Amount__c from EXECED_Payment__c where id in: selectedIds]){
                if (p.Amount__c!=null)
                    TotalAmount+=p.Amount__c;
                if (p.Total_Applied_Amount__c!=null)
                    TotalAppliedAmount+=p.Total_Applied_Amount__c;
                TotalItems++;
            }
        }
     } 
    
   
   
}
Visualforce page:
<apex:page standardController="EXECED_Payment__c" sidebar="false" showHeader="false" extensions="PaymentSummaryController" recordSetVar="payments" lightningStylesheets="true">
    
    <apex:form > 
        <apex:pagemessages />
        <apex:outputPanel rendered="{!inError}">
            <apex:commandButton action="{!Cancel}" value="Cancel"/>    
        </apex:outputPanel>
        
       
        <apex:outputpanel rendered="{!not(InError)}">
            <br/>
            <table>
                <tr>
                    <td><apex:outputtext value="Number of payments selected:"/></td>
                    <td><apex:outputtext style="font-weight:bold;" value="{!TotalItems}"/></td>
                </tr>
                <tr>
                    <td><apex:outputtext value="Total Amount:"/></td>
                    <td><apex:outputtext style="font-weight:bold;" value="{!TotalAmount}"/></td>
                </tr>
                 <tr>
                    <td><apex:outputtext value="Total Applied Amount:"/></td>
                    <td><apex:outputtext style="font-weight:bold;" value="{!TotalAppliedAmount}"/></td>
                </tr>
            </table>
            
           
          <!--  <br/><br/>
            <apex:commandButton action="{!Cancel}" value="Return"/>      -->
        </apex:outputpanel>
       
    </apex:form>
</apex:page>


 
Avishek Nanda 14Avishek Nanda 14
Hi Sainath,

You can render your list using a lightning data table and use event to capture the id and pass to do your logic. Eg: Below shows a List of account below. Modify your code accordingly. 
 
Component
<aura:component implements="force:appHostable"
       controller="AccountListController">
                
    <aura:attribute type="Account[]" name="acctList"/>
    <aura:attribute name="mycolumns" type="List"/>
    <aura:attribute name="selectedAccts" type="List"/>
    
    <aura:handler name="init" value="{!this}" action="{!c.init}"/>
    
    <div class="slds-box slds-theme_default">
        
        <lightning:datatable data="{! v.acctList }" 
                             columns="{! v.mycolumns }" 
                             keyField="id"
                             onrowselection="{!c.handleSelect}"/>
        <br/>
        <center>
            <lightning:button onclick="{!c.showSelectedName}" label="Show" variant="brand"/>
        </center>
        
    </div>
    
</aura:component>
JS Controller
({
    
    init : function(component, event, helper) {
        
        component.set('v.mycolumns', [
            {label: 'Account Name', fieldName: 'linkName', type: 'url', 
            typeAttributes: {label: { fieldName: 'Name' }, target: '_blank'}},
            {label: 'Industry', fieldName: 'Industry', type: 'text'},
            {label: 'Type', fieldName: 'Type', type: 'Text'}
        ]);
        
        helper.fetchAccounts(component, event);
        
    },
    
    handleSelect : function(component, event, helper) {
        
        var selectedRows = event.getParam('selectedRows'); 
        var setRows = [];
        for ( var i = 0; i < selectedRows.length; i++ ) {
            
            setRows.push(selectedRows[i]);

        }
        component.set("v.selectedAccts", setRows);
        
    },
    
    showSelectedName : function(component, event, helper) {
        
        var records = component.get("v.selectedAccts");
        for ( var i = 0; i < records.length; i++ ) {
         
            alert(records[i].Name);
            
        }
    }

})
Java Script Helper
({
    
 fetchAccounts : function(component, event) {
  
        var action = component.get("c.fetchAccts");
        
        action.setCallback(this, function(response) {
            
            var state = response.getState();
            
            if (state === "SUCCESS") {
                
                var records = response.getReturnValue();
                records.forEach(function(record) {
                    
                    record.linkName = '/' + record.Id;
                    record.CheckBool = false;
                    
                });   
                
                component.set("v.acctList", records);
                
            }            
            
        });
        
        $A.enqueueAction(action);
        
 }
    
})
public class AccountListController {
    
    @AuraEnabled
    public static List < Account > fetchAccts() {
        
        return [ SELECT Id, Name, Industry, Type FROM Account LIMIT 5 ];
        
    }
    
}