Регистрация  |  Вход

Создание custom Visualforce страницы.

Помните, мы приняли решение отказаться стандартного функционала Salesforce для нашего приложения Library в пользу custom Visualforce страниц, на которых мы можем делать что угодно. А так же разделили наших пользователей на два типа: library staff и members. Теперь создадим удобные страницы:

- для просмотра/поиска/добавления книг, для добавления книги;

- для работы с читательским билетом читателя.





Для красоты и удобства работы с книгами давайте добавим к объекту Book возможность подгружать обложку. (читаем статью "Файловые вложения для объектов. Attachments")

Создадим в новую Visualforce страницу с названием Books и контроллер для этой страницы BooksController. В этой странице мы сосредоточим всю логику по работе с книгами (просмотр, поиск, создание, редактирование, удаление).

Вот первый вариант страницы Book и ее  контроллера.

<apex:page controller="BooksController" >


<style type="text/css">
table#BookTable {border-collapse: collapse;}
table#BookTable td, table#BookTable th {padding: 10px; border: 1px solid #888888;}
</style>

<h1>Books</h1>

<apex:form >

<apex:inputText value="{!SearchBookKeyword}" />
<apex:commandButton value="Search" rerender="BookTableBox" status="SearchStatus"/>
<apex:actionStatus id="SearchStatus">
<apex:facet name="start"><img src="/img/loading.gif" alt="" /></apex:facet>
<apex:facet name="stop"></apex:facet>
</apex:actionStatus>

<!-- html method -->
<apex:outputPanel layout="block" id="BookTableBox">
<table id="BookTable">
<tr>
<th>Name</th>
<th>ISBN</th>
<th>Date Of Publication</th>
<th>Author</th>
<th></th>
</tr>
<apex:repeat value="{!Books}" var="book">
<tr>
<td>
<apex:outputField value="{!book.Name}"/>
</td>
<td>
<apex:outputField value="{!book.ISBN__c}"/>
</td>
<td>
<apex:outputField value="{!book.Date_Of_Publication__c}"/>
</td>
<td>
<apex:repeat value="{!book.Book_Author__r}" var="author">
<apex:outputField value="{!author.Author__r.Name}"/> <br />
</apex:repeat>
</td>
<td>
<a href="#">Edit</a><br />
<a href="#">Delete</a>
</td>
</tr>
</apex:repeat>
</table>
</apex:outputPanel>

</apex:form>

</apex:page>

public with sharing class BooksController {


public String SearchBookKeyword { get; set; }
public List<Book__c> Books { get{
String SearchQuery = SearchBookKeyword == null ? '%%' : '%'+SearchBookKeyword+'%';
List<Book__c> AvailableBook = [SELECT Id, Name, ISBN__c, Date_Of_Publication__c, (SELECT Id, Author__c, Author__r.Name FROM Book_Author__r) FROM Book__c WHERE Name LIKE :SearchQuery LIMIT 1000];
return AvailableBook;
} set; }

}

Увидеть результат работы кода можно по адресу /apex/Books

Наша страница умеет выводить книги в виде таблицы (пока одним списком до 1000 книги но правильнее будет конечно прикрутить пагинацию) и выполнять поиск по названию книги.

Для поиска и перестройки таблицы результатов используется вcя сила и мощь Visualforce страниц - асинхронная работа страницы и контроллера посредством ajax. Salesforce позволяет выполнить запрос к контроллеру страницы, получить обновленные данные и перестроить любую часть страницы. В нашем случае перестраивается блок  с id  BookTableBox.

В следующей статье я приведу пример работы ссылок delete и edit и кнопки new для работы с записями объекта Book__c

А сейчас заменим Tab "Books" в приложении со стандартного на нашу страницу. Сначала создадим новый tab для Visualforce page Setup->Create->Tabs->Visualforce page->New

salesforce-visualforce-tab

При создании нового Tab надеюсь вы указали что он будет находиться в приложении Library. Поэтому теперь у нас в приложении видно 2 одинаковых Tab с именем Books. Один необходимо удалить в Setup->Create->Apps->Library Edit.

salesforce-visualforce-tab-delete-from-app

Еще одним необходимым шагом, который необходимо сделать для настройки нашего приложения является добавление новой страницы и ее контроллера в список разрешенных для профиля Library Staff (новый Tab Books вы должны были сделать Default On для этого профиля на этапе создания. Если не сделали, то тоже необходимо открыть новый Tab в настройках). Как это сделать написано в статье  Создание и настройка профилей. Salesforce profiles

Здесь пока все. Остальное в следующей статье.