Newer Version Available
Salesforce ナレッジ記事の推奨
ユーザーが検索を実行する前に関連記事に移動するショートカットをユーザーに提供します。Search.suggest(searchText, objectType, options) をコールして、ユーザーの検索クエリ文字列にタイトルが一致する Salesforce ナレッジ記事のリストを返します。
推奨を返すには、Salesforce ナレッジを有効にします。Salesforce ナレッジの設定についての詳細は、『Salesforce ナレッジ利用ガイド』を参照してください。
次の Visualforce ページには、記事または取引先を検索する入力項目があります。ユーザーが [推奨] ボタンを押すと、推奨されるレコードが表示されます。結果が 5 件より多い場合、[結果をさらに表示] ボタンが表示されます。結果をさらに表示するには、このボタンをクリックします。
1<apex:page controller="SuggestionDemoController">
2 <apex:form >
3 <apex:pageBlock mode="edit" id="block">
4 <h1>Article and Record Suggestions</h1>
5 <apex:pageBlockSection >
6 <apex:pageBlockSectionItem >
7 <apex:outputPanel >
8 <apex:panelGroup >
9 <apex:selectList value="{!objectType}" size="1">
10 <apex:selectOption itemLabel="Account" itemValue="Account" />
11 <apex:selectOption itemLabel="Article" itemValue="KnowledgeArticleVersion" />
12 <apex:actionSupport event="onchange" rerender="block"/>
13 </apex:selectList>
14 </apex:panelGroup>
15 <apex:panelGroup >
16 <apex:inputHidden id="nbResult" value="{!nbResult}" />
17 <apex:outputLabel for="searchText">Search Text</apex:outputLabel>
18
19 <apex:inputText id="searchText" value="{!searchText}"/>
20 <apex:commandButton id="suggestButton" value="Suggest" action="{!doSuggest}"
21 rerender="block"/>
22 <apex:commandButton id="suggestMoreButton" value="More results..." action="{!doSuggestMore}"
23 rerender="block" style="{!IF(hasMoreResults, '', 'display: none;')}"/>
24 </apex:panelGroup>
25 </apex:outputPanel>
26 </apex:pageBlockSectionItem>
27 </apex:pageBlockSection>
28 <apex:pageBlockSection title="Results" id="results" columns="1" rendered="{!results.size>0}">
29 <apex:dataList value="{!results}" var="w" type="1">
30 Id: {!w.SObject['Id']}
31 <br />
32 <apex:panelGroup rendered="{!objectType=='KnowledgeArticleVersion'}">
33 Title: {!w.SObject['Title']}
34 </apex:panelGroup>
35 <apex:panelGroup rendered="{!objectType!='KnowledgeArticleVersion'}">
36 Name: {!w.SObject['Name']}
37 </apex:panelGroup>
38 <hr />
39 </apex:dataList>
40 </apex:pageBlockSection>
41 <apex:pageBlockSection id="noresults" rendered="{!results.size==0}">
42 No results
43 </apex:pageBlockSection>
44 <apex:pageBlockSection rendered="{!LEN(searchText)>0}">
45 Search text: {!searchText}
46 </apex:pageBlockSection>
47 </apex:pageBlock>
48 </apex:form>
49</apex:page>次のコードは、ページのカスタム Visualforce コントローラーです。
1public class SuggestionDemoController {
2
3 public String searchText;
4 public String language = 'en_US';
5 public String objectType = 'Account';
6 public Integer nbResult = 5;
7 public Transient Search.SuggestionResults suggestionResults;
8
9 public String getSearchText() {
10 return searchText;
11 }
12
13 public void setSearchText(String s) {
14 searchText = s;
15 }
16
17 public Integer getNbResult() {
18 return nbResult;
19 }
20
21 public void setNbResult(Integer n) {
22 nbResult = n;
23 }
24
25 public String getLanguage() {
26 return language;
27 }
28
29 public void setLanguage(String language) {
30 this.language = language;
31 }
32
33 public String getObjectType() {
34 return objectType;
35 }
36
37 public void setObjectType(String objectType) {
38 this.objectType = objectType;
39 }
40
41 public List<Search.SuggestionResult> getResults() {
42 if (suggestionResults == null) {
43 return new List<Search.SuggestionResult>();
44 }
45
46 return suggestionResults.getSuggestionResults();
47 }
48
49 public Boolean getHasMoreResults() {
50 if (suggestionResults == null) {
51 return false;
52 }
53 return suggestionResults.hasMoreResults();
54 }
55
56 public PageReference doSuggest() {
57 nbResult = 5;
58 suggestAccounts();
59 return null;
60 }
61
62 public PageReference doSuggestMore() {
63 nbResult += 5;
64 suggestAccounts();
65 return null;
66 }
67
68 private void suggestAccounts() {
69 Search.SuggestionOption options = new Search.SuggestionOption();
70 Search.KnowledgeSuggestionFilter filters = new Search.KnowledgeSuggestionFilter();
71 if (objectType=='KnowledgeArticleVersion') {
72 filters.setLanguage(language);
73 filters.setPublishStatus('Online');
74 }
75 options.setFilter(filters);
76 options.setLimit(nbResult);
77 suggestionResults = Search.suggest(searchText, objectType, options);
78 }
79}