我想使用apex:selectList来填充联系人。问题是它出错了
Collection size 3,403 exceeds maximum size of 1,000
这是因为我有3403个联系人,而Vf对VF页面中的集合有限制。
我想将初始联系人限制为< 1000,并且当用户开始输入我想要查询联系人的字符时。例如,如果用户键入Ji,我想查询联系人以检索以JI开头的记录。
这可能吗?
<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;
}
答案 0 :(得分:0)
您可以在查询中使用通配符来执行此操作 - 因此您需要在页面中添加<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) ...
答案 1 :(得分:0)
有几个选项可以获得您想要的功能。这取决于您想要的解决方案的复杂程度,但始终存在解决方案。
您可能需要考虑在控制器中使用jQuery和SOSL(搜索语言)。以下是使用Salesforce中的Ajax API进行jQuery自动完成的示例。点击以下链接: http://matthewkeefe-developer-edition.na8.force.com/jQueryAutocompleteWithAjaxAPI
另外,请查看Tehnrd的帖子“Super Cool Advanced Lookup Component”以获取其他选项。