Страница VisualForce не отображает список записей или каких-либо записей, НО она может отображать размер списка

СтраницаVisualForce не отображает список записей - заголовок говорит сам за себя.

Как мне получить страницу VF для отображения записей, которые она явно считает (как говорится 1-15 из 7549 записей).

Выглядит так:

http://i.imgur.com/KuChyJn.png - страница "Уэллс"

Тем не менее, вот как мы хотим, чтобы он выглядел (тот, который у нас сейчас работает!):

http://i.imgur.com/uwXOsHS.png - страница "Модемы" (некоторые поля были отключены, поскольку компания, в которой мы работаем, может не захотеть раскрывать эту информацию)

Моя команда работает над приложением salesforce.com, и у нас есть объект "Модем", который содержит приблизительно 7500 записей.

ModemController

Мы создали собственный контроллер ModemController:

public class ModemController {

public apexpages.standardsetcontroller con {get;set;}
public Integer noOfRecords{get; set;}
public Integer size{get; set;}
public Modem__c modems {get; set;}

public List<Modem__c> AllSearchModems
{
    get
    {
        if (con!= null)
            return (List<Modem__c>)con.getRecords();
        else
            return null;
    }
    set;
}

public ModemController() {
    AllSearchModems = new List<Modem__c>();
    modems = new Modem__c();

    String Name = ApexPages.currentPage().getParameters().get('Name');
    List<Modem__c> modems = [SELECT Name FROM Modem__c WHERE ID= :Name];
}

public PageReference save()
{
    update modems;
    return new PageReference('/' + modems.Name);
}


public ApexPages.StandardSetController setCon {
    get{
        if(setCon == null){
            size = 15;
            string queryString = 'SELECT Name, ModemActive__c, ModemCarrier__c, ModemCarrierData__c, DataPlanName__c, ESNNumber__c, ModemICCID__c, IMEINumber__c, IMSINumber__c, ModemIPEXT__c, ModemJob__c, ModemManufacturer__c, ModemModel__c, ModemPhone__c, PortForwarding__c, ModemIPPort__c, SIMNumber__c, ModemIPSlave__c, ModemStaticIP__c, ModemFirmwareVersion__c FROM Modem__c ORDER BY Name';
            setCon = new ApexPages.StandardSetController(Database.getQueryLocator(queryString));
            setCon.setPageSize(size);
            noOfRecords = setCon.getResultSize();
        }
        return setCon;
    }
    set;
}

public List<Modem__c> getModems()
{
    List<Modem__c> modemList = new List<Modem__c>();
    for(Modem__c w : (List<Modem__c>)setCon.getRecords())
       modemList.add(w);
    return modemList;
}

public PageReference refresh() {
    setCon = null;
    getModems();
    setCon.setPageNumber(1);
    return null;
}



public PageReference Search()
{
    if (modems.Name != null)
    {
        con = new ApexPages.StandardSetController(Database.getQueryLocator([SELECT Name, ModemActive__c,ModemCarrier__c,ModemCarrierData__c,DataPlanName__c,ESNNumber__c,ModemICCID__c, IMEINumber__c,IMSINumber__c,ModemIPEXT__c,ModemJob__c, ModemManufacturer__c,ModemModel__c,ModemPhone__c, PortForwarding__c, ModemIPPort__c,SIMNumber__c,ModemIPSlave__c,ModemStaticIP__c, ModemFirmwareVersion__c FROM Modem__c  Modem__c WHERE Name= :modems.Name]));  
        con.setPageSize(10);
    }
    else
    {
        con = null;
    }
    return null;
}

public Boolean hasNext {
    get {
        return setCon.getHasNext();
    }
    set;
}
public Boolean hasPrevious {
    get {
        return setCon.getHasPrevious();
    }
    set;
}

public Integer pageNumber {
    get {
        return setCon.getPageNumber();
    }
    set;
}

public void first() {
    setCon.first();
}

public void last() {
    setCon.last();
}

public void previous() {
    setCon.previous();
}

public void next() {
    setCon.next();
}
}

Пользовательская страница VF для страницы "Колодцы"

Вот пользовательская страница visualforce для страницы "Колодцы":

<apex:page controller="ModemController">
<apex:form >
    <apex:pageBlock id="pb">          
        <apex:pageBlockTable value="{!Modems}" var="m">    
            <apex:column value="{!m.Name}" />   
            <apex:column value="{!m.ModemManufacturer__c}"/>
            <apex:column value="{!m.ModemModel__c}"/> 
            <apex:column value="{!m.ModemICCID__c}"/> 
            <apex:column value="{!m.ModemIPEXT__c}"/>
            <apex:column value="{!m.ModemCarrier__c}"/>
            <apex:column value="{!m.ModemActive__c}"/>
        </apex:pageBlockTable>
         <apex:panelGrid columns="7">
            <apex:commandButton status="fetchStatus" reRender="pb" value="|<" action="{!first}" disabled="{!!hasPrevious}" title="First Page"/>
            <apex:commandButton status="fetchStatus" reRender="pb" value="<" action="{!previous}" disabled="{!!hasPrevious}" title="Previous Page"/>
            <apex:commandButton status="fetchStatus" reRender="pb" value=">" action="{!next}" disabled="{!!hasNext}" title="Next Page"/>
            <apex:commandButton status="fetchStatus" reRender="pb" value=">|" action="{!last}" disabled="{!!hasNext}" title="Last Page"/>
            <apex:outputText >{!(pageNumber * size)+1-size}-{!IF((pageNumber * size)>noOfRecords, noOfRecords,(pageNumber * size))} of {!noOfRecords}</apex:outputText>
            <apex:commandButton status="fetchStatus" reRender="pb" value="Refresh" action="{!refresh}" title="Refresh Page"/>
            <apex:outputPanel style="color:#4AA02C;font-weight:bold">
            <apex:actionStatus id="fetchStatus" startText="Fetching..." stopText=""/>
            </apex:outputPanel>
        </apex:panelGrid>           

    </apex:pageBlock>
</apex:form>

Этот контроллер работает для других вкладок (см. Страницу "Колодцы", он использует идентичный контроллер и работает!), Но не работает для страницы "Модемы".

Мы видим, что страница "Модемы", по крайней мере, читает в 7549 записях (просматривая переменную noOfRecords, чтобы подсчитать их количество), но не отображая их. Я даже пытался добавить LIMIT к запросу SOQL, но безрезультатно. (ограничено 2000, 1999, 1001, 1000, 999 и даже 30,20 и 10)

Я не думаю, что количество записей является проблемой, я могу ошибаться.

Если у кого-то есть какие-либо советы, это будет с благодарностью!

WellController

Если кто-то запросит, вот рабочий код страницы "Уэллс", код VisualForce и Apex:WellController: public class WellController {

public apexpages.standardsetcontroller con {get;set;}
public Integer noOfRecords{get; set;}
public Integer size{get; set;}
public Well__c wellz {get; set;}

public List<Well__c> AllSearchWells
{
    get
    {
        if (con!= null)
            return (List<Well__c>)con.getRecords();
        else
            return null;
    }
    set;
}


public WellController() {
    AllSearchWells = new List<Well__c>();
    wellz = new Well__c();

    String Name = ApexPages.currentPage().getParameters().get('Name');
    List<Well__c> wellz = [SELECT Name FROM Well__c WHERE ID = :Name];
}

public PageReference save()
{
    update wellz;
    return new PageReference('/' + wellz.Name);
}


public ApexPages.StandardSetController setCon {
    get{
        if(setCon == null){
            size = 15;
            string queryString = 'SELECT Name, WellLocActivationDate__c, Active__c, AntennaType__c, WellLocBillTo__c, CompanyName__c, CompanyName_del__c, WellLocCompanyName__c, ConnectedCarrier__c, ContactReponsible__c, DataNetwork__c, WellLocSPOCDataPlan__c, WellSiteEquipHistory__c, WellLoclPD__c, WellLocKillDate__c, ModemConnectedTo__c, Name__c, WellLocModemSerial__c, SignalQuality__c, SignalStrength__c, SimCardNumber__c, TechResponsible__c, Action__c, ActionDate__c, WellLocName__c, WellLocOwningCompanyName__c FROM Well__c ORDER BY Name';
            setCon = new ApexPages.StandardSetController(Database.getQueryLocator(queryString));
            setCon.setPageSize(size);
            noOfRecords = setCon.getResultSize();
        }
        return setCon;
    }
    set;
}

public List<Well__c> getWells()
{
    List<Well__c> wellList = new List<Well__c>();
    for(Well__c w : (List<Well__c>)setCon.getRecords())
        wellList.add(w);
    return wellList;
}

public PageReference refresh() {
    setCon = null;
    getWells();
    setCon.setPageNumber(1);
    return null;
}



public PageReference Search()
{
    if (wellz.Name != null)
    {
        con = new ApexPages.StandardSetController(Database.getQueryLocator([SELECT Name, WellLocActivationDate__c, Active__c, AntennaType__c, WellLocBillTo__c, CompanyName__c, CompanyName_del__c, WellLocCompanyName__c, ConnectedCarrier__c, ContactReponsible__c, DataNetwork__c, WellLocSPOCDataPlan__c, WellSiteEquipHistory__c, WellLoclPD__c, WellLocKillDate__c, ModemConnectedTo__c, Name__c, WellLocModemSerial__c, SignalQuality__c, SignalStrength__c, SimCardNumber__c, TechResponsible__c, Action__c, ActionDate__c, WellLocName__c, WellLocOwningCompanyName__c FROM Well__c  Well__c where Name = :wellz.Name]));  
        con.setPageSize(10);
    }
    else
    {
        con = null;
    }
    return null;
}

public Boolean hasNext {
    get {
        return setCon.getHasNext();
    }
    set;
}
public Boolean hasPrevious {
    get {
        return setCon.getHasPrevious();
    }
    set;
}

public Integer pageNumber {
    get {
        return setCon.getPageNumber();
    }
    set;
}

public PageReference make() 
{

  return Page.wellCreate;
}



public void first() {
    setCon.first();
}

public void last() {
    setCon.last();
}

public void previous() {
    setCon.previous();
}

public void next() {
    setCon.next();
}
}

СтраницаVF - "Уэллс"

И страница VisualForce, связанная с объектом 'Wells':

<apex:page controller="WellController">
<apex:form >
    <apex:pageBlock title="Wells" id="pb">
        <apex:pageBlockSection >

        <apex:commandButton action="{!make}" value="Create New"/>

    </apex:pageBlockSection>
        <apex:pageBlockTable value="{!Wells}" var="w">
            <apex:column headerValue="Well Name">
                <apex:outputLink value="/apex/wellEdit?id={!w.id}">{!w.WellLocName__c}</apex:outputLink>
            </apex:column>
            <apex:column value="{!w.WellLocModemSerial__c}" />
            <apex:column value="{!w.WellLocCompanyName__c}" />
            <apex:column value="{!w.WellLocOwningCompanyName__c}" />
            <apex:column value="{!w.WellLocBillTo__c}" />
            <apex:column value="{!w.Active__c}" />
        </apex:pageBlockTable>
        <apex:panelGrid columns="7">
            <apex:commandButton status="fetchStatus" reRender="pb" value="|<" action="{!first}" disabled="{!!hasPrevious}" title="First Page"/>
            <apex:commandButton status="fetchStatus" reRender="pb" value="<" action="{!previous}" disabled="{!!hasPrevious}" title="Previous Page"/>
            <apex:commandButton status="fetchStatus" reRender="pb" value=">" action="{!next}" disabled="{!!hasNext}" title="Next Page"/>
            <apex:commandButton status="fetchStatus" reRender="pb" value=">|" action="{!last}" disabled="{!!hasNext}" title="Last Page"/>
            <apex:outputText >{!(pageNumber * size)+1-size}-{!IF((pageNumber * size)>noOfRecords, noOfRecords,(pageNumber * size))} of {!noOfRecords}</apex:outputText>
            <apex:commandButton status="fetchStatus" reRender="pb" value="Refresh" action="{!refresh}" title="Refresh Page"/>
            <apex:outputPanel style="color:#4AA02C;font-weight:bold">
            <apex:actionStatus id="fetchStatus" startText="Fetching..." stopText=""/>
            </apex:outputPanel>
        </apex:panelGrid>
    </apex:pageBlock>
</apex:form>

1 ответ

Проблема здесь, скорее всего, связана с тем, что профиль пользователя, в который вы вошли, не имеет доступа ни к одному из полей Well__c объект.

Страницы VF, при использовании <apex:outputField /> привязки, обеспечивает безопасность на уровне полей и скрывает поля, к которым у пользователя нет доступа.

Если вы посмотрите на безопасность на уровне полей для этого объекта, я подозреваю, что вы обнаружите, что ваш профиль не имеет доступа ни к одному из полей, которые вы используете в столбцах. Безопасность на Modem__c Объект, вероятно, был правильно установлен для своих полей.

Другие вопросы по тегам