ナレッジ記事添付ファイルのコンテンツ内の検索
サポート情報記事にダウンロード可能なファイルを含めるために、ナレッジ記事添付ファイルを使用することができます。 また、Web ファイルを使用してダウンロード可能なコンテンツを持つ FAQ ページを作成することができます。
重要
サポート情報記事に添付されているファイルのみ検索できます。 Web ファイルに添付されているファイルは検索できません。
Power Pages サイトを構成することで、ナレッジベース記事の添付コンテンツ内を検索できるようなります。 これはユーザーが探している情報を検索するために役立ちます。
サポート情報記事では、定義された接頭語があるすべての添付ファイルはインデックス付きです。
ナレッジ記事添付ファイルにインデックスを作成するには、次のサイト設定を作成して、その値を true に設定する必要があります。
サイト設定 | 説明 |
---|---|
Search/IndexNotesAttachments | サポート情報記事の添付ファイルの内容をインデックス付きにする必要があるかどうかを示します。 既定では、False に設定されています。 |
KnowledgeManagement/DisplayNotes | サポート情報記事の添付ファイルを表示するかどうかを示します。 既定では、False に設定されています。 |
用語を検索するとき、検索結果には添付ファイルも含まれます。 検索語が knowledgearticle 添付ファイルと一致する場合、対応するサポート情報記事へのリンクも表示されます。 ダウンロード可能な添付ファイルを表示するには、左ウィンドウのレコードの種類でダウンロードを選択します。 ダウンロード ラベルを変更するには、検索/ファセット/ダウンロードのコンテンツ スニペットを編集します。 既定では、値はダウンロードにセットされています。
注意
この機能を使用するには、ご使用の環境で Dataverse 検索を有効にする必要があります。
サポート情報記事の添付ファイルを検索する
サイトで Lucene .NET 検索 を使用している場合、Dynamics 365 Customer Service 管理センターまたは Customer Service ハブ アプリでサポート情報記事の 添付ファイルをサイトに同期する オプションを はい に設定することにより、Web サイトがサポート情報記事の添付ファイルを検索できるようになります。 サイトで Dataverse 検索を使用している場合、このオプションを構成する必要はありません。既定でナレッジ記事の添付ファイルを検索できます。
これにより、 検索でサポート情報記事の添付ファイルを検索して、サポート情報の利用者が情報に簡単にアクセスできるようになります。 このファイル添付機能を使用すると、サイトのメモ添付ファイルを使用する必要がなくなります。 サポート情報記事の添付ファイルは、メモ添付ファイルに自動的に同期されます。 詳細: ポータルのサポート情報記事の添付ファイルを更新する
サイト構成の更新
2018 年 4 月以前にすでに Web サイトをお持ちで、最新バージョンにアップグレードした場合、新規インストールと同じユーザー体験をするためには、以下の構成を行う必要があります。
コンテンツ スニペット
注釈および Web ファイル ダウンロードの検索結果に表示されるラベルを修正するには、コンテンツ スニペット Search/Facet/Downloads を作成してから、必要に応じてその値を設定します。 既定値はDownloadsです。
Web テンプレート
ファセット検索 - 結果テンプレートの Web テンプレートは、サポート情報記事に関連付けられたファイルを、関連記事リンクを持つ主要な検索結果項目として表示するように変更されます。 ファセット検索 - 結果テンプレートの Web テンプレートを以下のソースに対して更新する必要があります。
{% assign openTag = '{{' %}
{% assign closingTag = '}}' %}
{%raw%}
<script id="search-view-results" type="text/x-handlebars-template">
{{#if items}}
<div class="page-header">
<h2>{%endraw%}{{openTag}} stringFormat "{{ resx.Search_Results_Format_String }}" firstResultNumber lastResultNumber itemCount {{closingTag}}{%raw%}
<em class="querytext">{{{query}}}</em>
{{#if isResetVisible}}
<a class="btn btn-default btn-sm facet-clear-all" role="button" title="{%endraw%}{{ snippets['Search/Facet/ClearConstraints'] | default: res['Search_Filter_Clear_All'] }}{%raw%}" tabIndex="0">{%endraw%}{{ snippets['Search/Facet/ClearConstraints'] | default: res['Search_Filter_Clear_All'] }}{%raw%}</a>
{{/if}}
</h2>
</div>
<ul>
{{#each items}}
<li>
<h3><a title="{{title}}" href="{{url}}">{{#if parent}}<span class="glyphicon glyphicon-file pull-left text-muted" aria-hidden="true"></span>{{/if}}{{title}}</a></h3>
<p class="fragment">{{{fragment}}}</p>
{{#if parent}}
<p class="small related-article">{%endraw%}{{ resx.Related_Article }}{%raw%}: <a title="{{parent.title}}" href="{{parent.absoluteUrl}}">{{parent.title}}</a></p>
{{/if}}
<ul class="note-group small list-unstyled">
{{#if relatedNotes}}
{{#each relatedNotes}}
<li class="note-item">
{{#if isImage}}
<a target="_blank" title="{{title}}" href="{{absoluteUrl}}"><span class="glyphicon glyphicon-file" aria-hidden="true"></span> {{title}}</a>
{{else}}
<a title="{{title}}" href="{{absoluteUrl}}"><span class="glyphicon glyphicon-file" aria-hidden="true"></span> {{title}}</a>
{{/if}}
<p class="fragment text-muted">{{{fragment}}}</p>
</li>
{{/each}}
{{/if}}
{{#if relatedAttachments}}
{{#each relatedAttachments}}
<li class="note-item">
{{#if isImage}}
<a id="kbattachment-{{entityID}}" href="javascript:downloadKbAttachmentFile('kbattachment-{{entityID}}', '{{title}}', {{fileSize}}, '{{fileType}}', '{{downloadBlockUrl}}', '{{initializeDownloadUrl}}')"><span class="glyphicon glyphicon-file" aria-hidden="true"></span> {{title}}</a>
{{else}}
<a id="kbattachment-{{entityID}}" title="{{title}}" href="javascript:downloadKbAttachmentFile('kbattachment-{{entityID}}', '{{title}}', {{fileSize}}, '{{fileType}}', '{{downloadBlockUrl}}', '{{initializeDownloadUrl}}')"><span class="glyphicon glyphicon-file" aria-hidden="true"></span> {{title}}</a>
{{/if}}
<p class="fragment text-muted">{{{fragment}}}</p>
</li>
{{/each}}
{{/if}}
</ul>
</li>
{{/each}}
</ul>
{{else}}
<h2>{%endraw%}{{ resx.Search_No_Results_Found }}{%raw%}<em class="querytext">{{{query}}}</em>
{{#if isResetVisible}}
<a class="btn btn-default btn-sm facet-clear-all" role="button" title="{%endraw%}{{ snippets['Search/Facet/ClearConstraints'] | default: res['Search_Filter_Clear_All'] }}{%raw%}" tabIndex="0">{%endraw%}{{ snippets['Search/Facet/ClearConstraints'] | default: res['Search_Filter_Clear_All'] }}{%raw%}</a>
{{/if}}
</h2>
{{/if}}
</script>
<script type="text/javascript">
function downloadKbAttachmentFile(attachmentElementId, fileName, fileSize, mimeType, downloadBlockUrl, initializeUrl) {
// Download block API supports max 4MB block size
const blockSizeInBytes = 4096 * 1024;
const totalNumberOfBlocks = parseInt(fileSize / blockSizeInBytes + 1);
var fileContinuationToken = "";
var contentString = "";
var numberOfBlocksDownloaded = 0;
var blockNumberToContentMap = {};
function downloadBlockCallback(i, result) {
numberOfBlocksDownloaded++;
blockNumberToContentMap[i] = result;
if (numberOfBlocksDownloaded == totalNumberOfBlocks) {
for (var j = 0; j < totalNumberOfBlocks; j++) {
contentString += blockNumberToContentMap[j];
}
var isImage = mimeType.startsWith('image/');
const attachmentElement = document.getElementById(attachmentElementId);
if (isImage) {
const bodyByteString = atob(contentString);
const bodyBuffer = new ArrayBuffer(bodyByteString.length);
const bodyView = new Uint8Array(bodyBuffer);
for (var k = 0; k < bodyByteString.length; k++) {
bodyView[k] = bodyByteString.charCodeAt(k);
}
var imageUrl = URL.createObjectURL(new Blob([bodyBuffer], { type: mimeType }));
attachmentElement.href = imageUrl;
attachmentElement.target = "_blank";
}
else {
const linkSource = 'data:' + mimeType + ';base64,' + contentString;
attachmentElement.href = linkSource;
attachmentElement.download = fileName;
}
attachmentElement.click();
}
}
shell.ajaxSafePost({
type: 'GET',
url: initializeUrl,
success: function (result) {
fileContinuationToken = encodeURIComponent(result);
for (var i = 0; i < totalNumberOfBlocks; i++) {
url = downloadBlockUrl + "&blockNumber=" + i + "&fileContinuationToken=" + fileContinuationToken + "&blockSize=" + blockSizeInBytes;
var x = downloadBlockCallback.bind(this,i);
shell.ajaxSafePost({
type: 'GET',
url: url,
success: (result) => { x(result) }
});
}
}
});
}
</script>
{%endraw%}
サイト設定
\_logicalname:annotation~0.9^0.25
値を Search/Query サイト設定に追加する必要があります。 追加後、その値は次のようになります。
+(@Query) \_title:(@Query) \_logicalname:knowledgearticle~0.9^0.3 \_logicalname:annotation~0.9^0.25 \_logicalname:adx_webpage~0.9^0.2 -\_logicalname:adx_webfile~0.9 adx_partialurl:(@Query) \_logicalname:adx_blogpost~0.9^0.1 -\_logicalname:adx_communityforumthread~0.9
ファセットを構成して、サポート情報記事に関連付けられた注釈と単一ファセット内の Web ファイルをグループ化するには、Search/RecordTypeFacetsEntities サイト設定名を編集してその値に ;Downloads:annotation,adx_webfile
を追加します。
サポート情報記事に関連付けられた添付ファイルが Web サイトおよび検索結果に表示されるようにするには、KnowledgeManagement/DisplayNotes サイト設定を編集してその値をTrueにセットします。 サイト設定KnowledgeManagement/NotesFilterには、メモ上のメモ テキスト フィールドの前に付ける必要がある接頭語値が含まれます。指定して接頭語値を持つメモのみが Web サイトに表示されます。 既定では、その値は *WEB* ですが、サイト設定を介して変更することができます。
メモに関連付けられた添付ファイルのインデックス作成を有効にするには、 Search/IndexNotesAttachments サイト設定を作成してその値を True にセットします。