Система.Исключение QueryException: в списке нет строк для назначения sObject

#apex #visualforce

#apex #visualforce

Вопрос:

Я хочу обновить список возможностей с помощью страницы visualforce.На странице visualforce я хочу обновить количество, дату закрытия и этап.Страница visulaforce должна отображать только все открытые возможности (ЭТАП НЕ РАВЕН ЗАКРЫТЫМ ВЫИГРАННЫМ И ЗАКРЫТЫМ ПРОИГРАННЫМ).

Кто-нибудь, помогите мне исправить эту ошибку и обновить только все открытые возможности.

Вот мой код:

Apex

 public class UpdateListofOppty {
    public Opportunity opportunities {get;set;} 
    public Id recId{get;set;}
    public UpdateListofOpporunity(ApexPages.StandardSetController sc){
    recId = ApexPages.CurrentPage().getParameters().get('id');
    opportunities = [SELECT Name,Amount,StageName FROM opportunity WHERE Id = :recId AND StageName NOT IN ('Closed Lost', 'Closed Won')];
    }

    public Opportunity getOpptyDetail(){
        return opportunities;
    }

    public PageReference Save() {
        try{
        update(opportunities);
        }
        catch(System.DmlException e){
        ApexPages.addMessages(e);
        return null;
    }
        PageReference view = new ApexPages.StandardController(opportunities).view();
         return (view);
    }
}
  

Страница VF

 <apex:page standardController="Opportunity" extensions="UpdateListofOppty" recordSetVar="opportunities" tabStyle="Opportunity" sidebar="false">
    <apex:form >
        <apex:pageBlock >
            <apex:pageMessages />
            <apex:pageBlockButtons >
                <apex:commandButton value="Save" action="{!save}"/>
            </apex:pageBlockButtons>
            <apex:pageBlockTable value="{!opportunities}" var="opp">
                <apex:column value="{!opp.name}"/>
                <apex:column headerValue="Amount">
                    <apex:inputField value="{!opp.Amount}"/>
                </apex:column>
                <apex:column headerValue="Close Date">
                    <apex:inputField value="{!opp.CloseDate}"/>
                </apex:column>
                <apex:column headerValue="Stage">
                    <apex:inputField value="{!opp.stageName}"/>
                </apex:column>
            </apex:pageBlockTable>      
        </apex:pageBlock>
    </apex:form>
</apex:page>
  

ОШИБКА:

Система.Исключение QueryException: в списке нет строк для назначения sObject

Ошибка, показанная в этой строке:

 opportunities = [SELECT Name,Amount,StageName FROM opportunity WHERE Id = :recId AND StageName NOT IN ('Closed Lost', 'Closed Won')];
  

Ответ №1:

Я подозреваю, что ваш id параметр не передается, поэтому он равен нулю. Возможности запроса WHERE Id = null всегда возвращают нулевые результаты. Или, может быть, он передается, но это бесполезно. Если у вас есть StandardSetController, значение Id в URL страницы может использоваться как идентификатор фильтра (listview), а не идентификатор какой-либо конкретной записи. Значение запроса все равно вернет 0 строк.

Что вы пытались сделать? Возможно, простое удаление этой части условия поможет, хотя этот список может расти очень быстро. Возможно, вы захотите поместить оператор LIMIT в запрос или прочитать о StandardSetController и разбивке на страницы.