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
Lakshmi SLakshmi S 

Visualforce Error -- System.QueryException: List has no rows for assignment to SObject

HI Team,

Visualforce Error :
System.QueryException: List has no rows for assignment to SObject.
 
<apex:page standardController="High_Risk_Success_Factors__c" sidebar="true" tabStyle="Account" extensions="HighRiskSuccessFactorsDetailCls" >
    <apex:form >
        <apex:pageBlock title="Success Factors Details">
            
            <apex:pageBlockButtons >
                <apex:commandButton value="Save" action="{!Save}" id="saveButton" style="display:none;"  />
                <apex:commandButton value="Edit" action="{!Edit}" id="editButton" />
                <apex:commandButton value="Delete" action="{!Delete}" onclick="if(!confirm('Are you sure?')){return false};" id="deleteButton" />
                <apex:commandButton value="Clone" action="{!doClone}" id="cloneButton" />
               <apex:commandButton value="Cancel" action="{!doCancel}" id="cancelButton" immediate="true" style="display:none;" />
                
            </apex:pageBlockButtons>
            <apex:pageMessages ></apex:pageMessages>
<apex:pageBlock>
<apex:form>
<apex:page>
public with sharing class HighRiskSuccessFactorsDetailCls {
    
    public boolean bool {get;set;}
    Private ApexPages.StandardController controller {get;set;}
    
    
    public HighRiskSuccessFactorsDetailCls(ApexPages.StandardController controller){
        bool = false;
        this.controller=controller;
       
    }
   
    public PageReference save(){
        try{
            controller.save();
            PageReference pr = Page.HighRiskSuccessFactorsDetailPage;
            pr.setRedirect(true);
            pr.getParameters().put('id',controller.getId());
            return pr;
        }catch(Exception e){
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, e.getMessage()));
            return null;
        }
    }
    
   public PageReference doClone(){
       PageReference pr;
       try{
           if(controller.getId() != null)
           pr = Page.HighRiskSuccessFactorsClonePage;
           pr.getParameters().put('id',controller.getId());
           return pr;
       }
       catch(Exception e){
           ApexPages.addMessages(e);
           return null;
       }
        
    } 
    
    
        Public PageReference doCancel(){
            
            PageReference pr = new PageReference('/'+Schema.SObjectType.High_Risk_Success_Factors__c.getKeyPrefix()+'/o');
            return pr;

        }

}
If we click on clone button, if record is not available it shwos above error.
How can we handle these type of errors for vf pages.

Thanks
Lakshmi

 
Raj VakatiRaj Vakati
I belive error is coming from the HighRiskSuccessFactorsClonePage Page and its controller. can you share the HighRiskSuccessFactorsClonePage page controller?
Lakshmi SLakshmi S
<apex:page standardController="High_Risk_Success_Factors__c" sidebar="true" tabStyle="Account" extensions="HighRiskSuccessFactorsCloneCls" >
    <apex:form >
        <apex:pageBlock title="New Success Factors" >
            <apex:pageBlockButtons >
                <apex:commandButton value="Save" action="{!Save}" />
                <apex:commandButton value="Cancel" action="{!doCancel}" immediate="true" />
            <apex:commandButton value="Save & New" action="{!saveNew}"/>
            </apex:pageBlockButtons>
            <apex:pageMessages />
                <apex:pageBlockSection title="Account/Opportunity Details" columns="2">
                <apex:inputField value="{!hr.Name}" required="true" />    
                <apex:inputField value="{!hr.Account_Name__c}" />
                <apex:inputField value="{!hr.Opportunity_Name__c}" />    
			</apex:pageBlockSection>
		</apex:pageBlock>
	</apex:form>
</apex:page>
public class HighRiskSuccessFactorsCloneCls {
    
    private ApexPages.StandardController controller{get;set;}
    public High_Risk_Success_Factors__c hr{get;set;}
    public HighRiskSuccessFactorsCloneCls(ApexPages.StandardController controller){
        this.controller = controller;
        hr = (High_Risk_Success_Factors__c)controller.getRecord();
        
        hr =[select name,Account_Name__c,Opportunity_Name__c from High_Risk_Success_Factors__c where id =:hr.Id limit 1];
        //system.debug('---------'+controller.getId());
       
    }
    
    public PageReference save(){
        SavePoint sp = Database.setSavepoint();
        High_Risk_Success_Factors__c newHR;
        try{
            newHR = hr.clone(false,true,false,false);
            insert newHr;
            return new PageReference('/'+newHr.Id);
        }catch(Exception e){
            Database.rollback(sp);
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, e.getMessage()));
            return null;
        }
    }
    
     public PageReference saveNew()
     { 
         SavePoint sp = Database.setSavepoint();
         High_Risk_Success_Factors__c newHR;
         PageReference pr;
        try{
            newHR = hr.clone(false,true,false,false);
            insert newHr;
            Schema.DescribeSObjectResult describeResult = controller.getRecord().getSObjectType().getDescribe();
            pr = new PageReference('/' + describeResult.getKeyPrefix() + '/e');
            pr.setRedirect(true);
            return pr;
        }catch(Exception e){
            Database.rollback(sp);
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, e.getMessage()));
            return null;
        }
     }
   
    Public PageReference doCancel(){
            PageReference pr = new PageReference('/'+Schema.SObjectType.High_Risk_Success_Factors__c.getKeyPrefix()+'/o');
            return pr;
        }

}
@isTest
private class TestHighRiskSuccessFactorsCloneCls {
    private static testMethod void testClone(){
        
        PageReference pr = Page.HighRiskSuccessFactorsClonePage;
        Test.setCurrentPage(pr);
        
        High_Risk_Success_Factors__c hrsf = new High_Risk_Success_Factors__c();
        hrsf.Name = 'success factors';
        insert hrsf;
        
        ApexPages.StandardController con = new ApexPages.StandardController(hrsf);
        HighRiskSuccessFactorsCloneCls sfclone = new HighRiskSuccessFactorsCloneCls(con);
        
        Test.startTest();
        PageReference ref = sfclone.save();
        PageReference ref2 = sfclone.saveNew();
        PageReference ref3 = sfclone.doCancel();
        system.assert(true);
        
        Test.stopTest();
        
    }

}



 
Lakshmi SLakshmi S
Hi Raj,
Please check above code.