Пользовательские контроллеры Visualforce

Пользовательские контроллеры Visualforce

Добрый день! Подскажите пожалуйста новичку.Имеется объект Pencil Box, который содержит в себе записи -Pencil, с единственным полем - Pencil Name. Необходимо просто достать эти значения через visualforce page и контроллер.Делал по примеру - https://trailhead.salesforce.com/modules/visualforce_fundamentals/units/visualforce_custom_controllers . С конкретным примером все выходит - все эти данные Contacts достаются и выводятся, но свои данные я достать не могу.За меня решать не прошу- натолкнуть на мысль, что я делаю не так! Спасибо! [img]https://ibb.co/j0VHxo[/img]
Код страницы:
<apex:page controller="PenBoxListController">
<apex:form>
<apex:pageBlock title="PencilBox List" id="PencilBox_list">

<apex:pageBlockTable value="{! pencilbox }" var="pb">
<apex:column value="{! pb.PencilName }"/>
<apex:column value="{! pb.PencilBox }"/>

</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
</apex:page>

Код контроллера:
public class ContactsListController {
private String sortOrder = 'PencilName';

public List<PencilBox> getPencil() {

List<PencilBox> results = Database.query(
'SELECT Id, PencilName, PencilBox' +
'FROM PencilBox '
);
return results;
}
}

https://ibb.co/j0VHxo

https://trailhead.salesforce.com/modules/apex_database
https://trailhead.salesforce.com/modules/apex_database/units/apex_database_soql

The WHERE clause is optional. Let’s start with a very simple query. For example, the following query retrieves accounts and gets two fields for each account: the ID and the Phone.

SELECT Name,Phone FROM Account

The query has two parts:

SELECT Name,Phone: This part lists the fields that you would like to retrieve. The fields are specified after the SELECT keyword in a comma-delimited list. Or you can specify only one field, in which case no comma is necessary (e.g. SELECT Phone).
FROM Account: This part specifies the standard or custom object that you want to retrieve. In this example, it’s Account. For a custom object called Invoice_Statement, it is Invoice_Statement__c.

Кастомные объекты и поля имеют префикс __с
На странице объекта есть API Name который и используется в коде.

Поправьте, если я не прав.
<apex:page controller="ContactsListController">
<apex:form>
<apex:pageBlock title="PencilBox List" id="PencilBox_list">

<apex:pageBlockTable value="{! pencilbox }" var="pb">
<apex:column value="{! pb.PencilName__c }"/>
<apex:column value="{! pb.PencilBox__c }"/>

</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
</apex:page>

public class ContactsListController {
private String sortOrder = 'PencilName__с';

public List<PencilBox__C> getPencil() {

List<PencilBox> results = Database.query(
'SELECT Id, PencilName__c, PencilBox__c' +
'FROM PencilBox__c '
);
return results;
}
}

Выглядит правдоподобно,только после PencilBox__c поставь пробел или перед FROM поставь пробел. Или пиши одной строкой: 'SELECT Id, PencilName__c, PencilBox__c FROM PencilBox__c'. А еще getPencil переименуй в getPencilBox

Неправильно вопрос задаешь!

Код никто в уме решать не будет. Хотя тут и так все понятно.

Чтобы правильно было надо написать какая конкретно проблема! Какая ошибка или какой неверный результат который получил.

Насколько я вижу у тебя тупо не компилится страница

Должна быть ошибка, а в ошибке все будет понятно.

ошибка единственная- Invalid type Pencil_Box, и вот и пытаюсь разобраться как ее решить.

VladislavSkor
А еще getPencil переименуй в getPencilBox

Maxim Elets
Выглядит правдоподобно,только после PencilBox__c поставь пробел или перед FROM поставь пробел. Или пиши одной строкой: 'SELECT Id, PencilName__c, PencilBox__c FROM PencilBox__c'. А еще getPencil переименуй в getPencilBox

Maxim Elets
VladislavSkor
А еще getPencil переименуй в getPencilBox

Maxim Elets
Выглядит правдоподобно,только после PencilBox__c поставь пробел или перед FROM поставь пробел. Или пиши одной строкой: 'SELECT Id, PencilName__c, PencilBox__c FROM PencilBox__c'. А еще getPencil переименуй в getPencilBox

Все это проделал-итог к сожалению такой же.

Ну если говорит invalid type значит ты неправильно указываешь api name своего объекта или поля

getPencilBox - это же обычная переменная , которую я сам создаю, так?
А PencilBox__C- мой кастомный объект?

Тут ничего не смущает?

VladislavSkor
List<PencilBox>

Наверное будет глупый вопрос, но как отсюда https://ibb.co/dmC8L8 - вернуться на страницу, где я создавал свои объекты и устанавливал связи?

Вроде как исправил все, но теперь указывает на это Unknown property 'PencilListController.Pencil_Box__c', хотя имя у него такое, подскажите, на что должен я ссылаться в данной строчке <apex:pageBlockTable value="{!Pencil_Box__c}" var="pb">?

public class PencilListController {
public class PencilBoxListController {
private String sortOrder = 'CreatedBy';
public List<Pencil_Box__c>getPencil(){
List<Pencil_Box__c> results = Database.query(
'SELECT Id, Name,CreatedBy FROM Pencil_Box__c');
return results;
}
}
}

<apex:page controller="PencilListController">
<apex:form>
<apex:pageBlock title="Pencil List" id="Pencil_Box_list">

<apex:pageBlockTable value="{!Pencil_Box__c}" var="pb">
<apex:column value="{!pb.Name}"/>
<apex:column value="{!pb.CreatedBy}"/>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
</apex:page>

VladislavSkor
<apex:pageBlockTable value="{!Pencil_Box__c}" var="pb">

Открываем документацию
https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_compref_pageBlockTable.htm
и читаем для чего предназначен каждый из атрибутов в теге apex:pageBlockTable.

Рвение конечно привествуется, но с таким подходом никакого теплого места в IT компании не видать.

Надо разобраться в типах данных, как данные передаются из Controller на Visualforce page. Как правильно использовать <apex:...> теги. И делать это надо не методом тыка, а сперва изучив досконально всю документацию.

Interesting information? Help us, post link to social media..