#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 и разбивке на страницы.