Эта статья морально устарела :( . Приглашаю продолжить ваше знакомство с Salesforce на нашем Форуме!
Помните, мы приняли решение отказаться стандартного функционала 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; }
}