Заполните список выбора контактами - PullRequest
0 голосов
/ 23 октября 2011

Я хочу использовать apex: selectList для заполнения контактов. Проблема в том, что выдает ошибку

  Collection size 3,403 exceeds maximum size of 1,000

Это потому, что у меня 3403 контакта, и у Vf есть ограничения на коллекции на странице VF.

Я хочу ограничить начальный набор контактов <1000, и, когда пользователь начинает вводить символы, я хочу запросить контакты. Например, если пользователь вводит Ji, я хочу запросить контакты, чтобы получить записи, начинающиеся с JI. </p>

Возможно ли это сделать?

  <apex:selectlist id="ClientsSearch"  value="{!Appointment.Client__c}" 
       size="1" required="true" rendered="{!NOT (SearchMode)}">

  <apex:selectOptions value="{!Clients}" />
  </apex:selectlist>


 public List<SelectOption> getClients() {     
   List<SelectOption> options = new List<SelectOption>();
  List<Contact> Clients =  [Select id, Name From Contact order by Name];
  options.add(new SelectOption('0001', '--Select--'));
 for(Contact c : Clients ){
 options.add(new  SelectOption(c.id, c.Name));
 }
  return options;
 }

Ответы [ 2 ]

0 голосов
/ 28 октября 2011

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

Возможно, вы захотите использовать jQuery и SOSL (язык поиска) в контроллере.Вот пример автозаполнения jQuery с помощью Ajax API в Salesforce.Нажмите на ссылку ниже: http://matthewkeefe -developer-edition.na8.force.com / jQueryAutocompleteWithAjaxAPI

Кроме того, ознакомьтесь с сообщением Tehnrd " Super Cool Advanced Lookup Component «для другого варианта.

0 голосов
/ 24 октября 2011

Вы можете использовать подстановочные знаки в своем запросе, чтобы сделать это - поэтому вы захотите добавить элемент <apex:inputText> на своей странице, чтобы они могли вводить поисковый термин, который записывает строковую переменную в контроллере. Затем добавьте кнопку поиска, чтобы выполнить запрос, и повторно отобразите список с новым списком контактов.

Важные части контроллера будут выглядеть примерно так:

public string SearchTerm {get; set;}
public list<ContacT> Contacts {get; set;}

public Pagereference SearchContacts()
{
    // etc.
    Contacts = [select Id, Name from Contact where name like : '%' + SearchTerm + '%' order by name limit 1000]; 
    // populate list here
    return null;
}

Вы можете выполнить поиск, используя функцию действия и запустив ее из события onChange поля ввода, но наличие кнопки для поиска сделает все это более отзывчивым (IMO) с точки зрения пользователя.

Примечание: я написал этот код на лету, возможно, вы не можете просто сопоставить "%" с поисковым термином таким образом или, возможно, вам даже не нужно это делать при непосредственном запросе. Обычно в этих случаях мне приходилось использовать динамический SOQL из-за других требований, когда вы строили запрос в строке:

strQuery = 'select id from contact where name like \'%' +
    String.escapeSingleQuotes(SearchTerm) + '%\' order by name';
for(Contact sContact : Database.query(strQuery) ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...