はじめに
皆さんこんにちは!!家族全員のリニアモーターカーの体験乗車の購入権が当たった川口です。
子供と一緒に旅行に行くネタができて本当にうれしいです!
さて、今回は、Summer'17でリリースされた統合検索(Federated Search)という機能を使って、TerraSkyのテックブログをSalesforceのグローバル検索で検索する方法を説明します。
興味を持ったきっかけは、分からないことを検索するのに、いつも時間がかかっていたことです。それは、複数の社内の非公開ナレッジや、公開ナレッジ、属人的なナレッジを検索するのに、それぞれに検索が必要で、例えば、私はまず、プロジェクト管理ツールやチャットツール、Salesforce、共有サーバを検索し、なければ、次にテックブログや公開のブログを検索します。最後に属人的なナレッジをChatterで聞くという流れで検索します。
ここで、私が不便に感じる点は3つあります。
まず一つが、情報やファイルがどこにあるか把握すること、特に新人は自社のシステムにも慣れておらず、共有ファイルシステムを探すことにも時間がかかること、
次に、複数のナレッジやファイルが別々のアプリケーションで管理されているためと検索を複数回実行すること、
最後に、一度検索した情報は、また同じ問題が発生した時や、確認したい時のためにメモで残すのですがメンテナンス性が低く情報量が増えると逆に検索しにくくなることです。
このような不便な点は、統合検索を利用することで一つにまとめることができ、検索結果から簡単に目的の情報やファイルにアクセスすることができます。そうすれば、検索に対するストレスや生産性が間違いなく向上しそうですね!!
子供と一緒に旅行に行くネタができて本当にうれしいです!
さて、今回は、Summer'17でリリースされた統合検索(Federated Search)という機能を使って、TerraSkyのテックブログをSalesforceのグローバル検索で検索する方法を説明します。
興味を持ったきっかけは、分からないことを検索するのに、いつも時間がかかっていたことです。それは、複数の社内の非公開ナレッジや、公開ナレッジ、属人的なナレッジを検索するのに、それぞれに検索が必要で、例えば、私はまず、プロジェクト管理ツールやチャットツール、Salesforce、共有サーバを検索し、なければ、次にテックブログや公開のブログを検索します。最後に属人的なナレッジをChatterで聞くという流れで検索します。
ここで、私が不便に感じる点は3つあります。
まず一つが、情報やファイルがどこにあるか把握すること、特に新人は自社のシステムにも慣れておらず、共有ファイルシステムを探すことにも時間がかかること、
次に、複数のナレッジやファイルが別々のアプリケーションで管理されているためと検索を複数回実行すること、
最後に、一度検索した情報は、また同じ問題が発生した時や、確認したい時のためにメモで残すのですがメンテナンス性が低く情報量が増えると逆に検索しにくくなることです。
このような不便な点は、統合検索を利用することで一つにまとめることができ、検索結果から簡単に目的の情報やファイルにアクセスすることができます。そうすれば、検索に対するストレスや生産性が間違いなく向上しそうですね!!
仕様
統合検索は、分散している外部リポジトリを1回の検索で検索することができる機能です。今回は、Googleカスタム検索で自社のブログを検索してみたいと思います。
それでは、もう少し詳細に説明します。
それでは、もう少し詳細に説明します。
利用環境
統合検索を使える環境は、Lightning ExperienceやSalesforce Classicの両方で利用することが可能です。
外部検索プロバイダ
今回は、Googleのカスタム検索を使用しますが、その他にSalesforce は Coveo、Docurated、および Swiftype とも提携しているため、簡単に外部検索プロバイダを Salesforce に接続できます。これらのパートナーのサービスを利用することで、そのサービス先の外部リポジトリも検索できます。たとえば、Dropbox、Confluence、SharePoint など検索できます。また、「Federated Search Developer Guide」を読めば個別で実装することも可能です。
OpenSearch プロトコル
Salesforce統合検索コネクタは 、OpenSearch 標準に基づく外部検索エンジンに Salesforce 統合検索 API で接続します。なので、少しだけOpen Search プロトコルについて知識があるほうが設定を理解しやすいです。
OpenSearchプロトコルは二つの部分で構成されています。
一つが、「OpenSearch XML Description」
外部検索エンジンを検索する方法と、それがサポートする機能について記述しています。このXMLファイルは、検索エンジン自体が公開URLで提供します。記述の主な要素は<Url>で、テンプレート属性が呼び出すURLとセマンティクスでサポートされるパラメータを提供します。また、テンプレート属性で設定された外部検索エンジンに送信するパラメータはURLエンコードされ、HTTPS GETメソッドを介して送信されます。
また、OpenSearch仕様と同じ要素にSalesforce拡張機能にレコードタイプやOAuth認証など含めることができます。
もう一つが、「外部検索エンジンから返された検索結果」
HTML検索要求の応答としてAtomまたはRSS形式で返されます。
実際に、検索結果を確認したい場合はテンプレートのURLをブラウザで実行してみると結果を簡単に確認することができます。
OpenSearchプロトコルは二つの部分で構成されています。
一つが、「OpenSearch XML Description」
外部検索エンジンを検索する方法と、それがサポートする機能について記述しています。このXMLファイルは、検索エンジン自体が公開URLで提供します。記述の主な要素は<Url>で、テンプレート属性が呼び出すURLとセマンティクスでサポートされるパラメータを提供します。また、テンプレート属性で設定された外部検索エンジンに送信するパラメータはURLエンコードされ、HTTPS GETメソッドを介して送信されます。
また、OpenSearch仕様と同じ要素にSalesforce拡張機能にレコードタイプやOAuth認証など含めることができます。
もう一つが、「外部検索エンジンから返された検索結果」
HTML検索要求の応答としてAtomまたはRSS形式で返されます。
実際に、検索結果を確認したい場合はテンプレートのURLをブラウザで実行してみると結果を簡単に確認することができます。
テンプレートパラメータ
簡単な説明ですが、テンプレートパラメータに設定できるのは、OpenSearchの標準だと検索条件、ページ毎の表示件数、スタート件数、インプットとアウトプットのエンコードが設定できます。そして、Salesforce固有で設定できるのは、ユーザID、ログインユーザ名、ユーザメールアドレス、組織ID、SOSL構文、ID検索フラグ、レコードタイプ、ソート項目、ソート順が設定可能です。
アーキテクチャ
ヘルプの資料の引用ですが、システム的な動きの説明です。
設定
それでは、各設定に移ります。
Googleカスタム検索設定
Googleカスタム検索を利用して、対象ドメイン内のページ検索します。 作成には、Googleアカウントが必要です。今回は、Google Custom Search APIを利用するので、Google Cloud Platformのアカウントが必要です。設定方法については、色々なブログで公開されていますのでここでは割愛したいと思います。
Custom Search JSON/Atom API設定
Custom Search APIを使用して、OpenSearchプロトコルに準拠した結果をGoogleカスタム検索から取得するために利用します。こちらも設定に関して、色々なブログで公開されていますのでここでは割愛したいと思います。
OpenSearch XML Description XMLファイルを公開
[OpenSearch プロトコル]で説明した[Open Search XML Description]のXMLファイルを、Salesforceから参照できるように公開します。
<?xml version="1.0" encoding="UTF-8"?> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:sfdc="http://salesforce.com/2016/federatedsearch/1.0"> <ShortName>Eventbrite Search</ShortName> <Url type="application/atom+xml" sfdc:maxTotalResults="100" sfdc:maxCount="10" template="https://www.googleapis.com/customsearch/v1?key=xxx&alt=atom&cx=yyy&q={searchTerms}&start={startIndex?}&num={count?}"/> </OpenSearchDescription>
OpenSearch XML Description
上記のXMLをファイルにコピーして。Urlエレメントのテンプレート属性にある xxxとyyyに先ほどメモした値を設定します。xxxにはGoogle Custom Search APIのAPIキー、yyyにはGoogleカスタム検索の検索エンジンID を設定します。
このファイルをSalesforceから参照できるように公開します。私は、Herokuに設置して公開しました。静的リソースやGoogleドライブで公開できるので試しましたが、Salesforceで正しく読み込めませんでした。やり方については、「Getting Started on Heroku with Node.js」を参照してください。
このファイルをSalesforceから参照できるように公開します。私は、Herokuに設置して公開しました。静的リソースやGoogleドライブで公開できるので試しましたが、Salesforceで正しく読み込めませんでした。やり方については、「Getting Started on Heroku with Node.js」を参照してください。
配置場所は、{ローカルにcloneした場所}\node-js-getting-started\publicの配下にファイルを配置すると公開できます。
外部データソース設定
検索レイアウト変更
確認してみよう
気になるところ
検索実行の制御
APIのコール回数で課金されるサービスもありますので、実行を制御する方法を調べました。
制御する方法として、動的に制御する方法はなさそうですが、静的に制御する方法は、オブジェクトの設定ページの [検索を許可] 設定を有効/無効にする事で制御できます。ヘルプではグローバル検索で検索速度を高速化するために使用されないカスタムオブジェクトや外部オブジェクトを検索対象から外すような説明で紹介されていました。また、プロファイルの外部オブジェクト権限でプロファイル単位の制御はできました。
制御する方法として、動的に制御する方法はなさそうですが、静的に制御する方法は、オブジェクトの設定ページの [検索を許可] 設定を有効/無効にする事で制御できます。ヘルプではグローバル検索で検索速度を高速化するために使用されないカスタムオブジェクトや外部オブジェクトを検索対象から外すような説明で紹介されていました。また、プロファイルの外部オブジェクト権限でプロファイル単位の制御はできました。
APIのコール数
1回のグローバル検索で、Google Custom Search APIが何回リクエストされるのか確認しました。
追加で、検索するサイトが増えた場合どうなるのか試してみました。
一回のグローバル検索で、同じGoogle Custom Search APIのAPIキーで、2つのGoogleカスタム検索を実行すると、リクエスト数はカスタム検索の個数分の2回リクエストが実行されている事を確認できました。リクエストは有料なので注意が必要ですね。
一回のグローバル検索で、同じGoogle Custom Search APIのAPIキーで、2つのGoogleカスタム検索を実行すると、リクエスト数はカスタム検索の個数分の2回リクエストが実行されている事を確認できました。リクエストは有料なので注意が必要ですね。
その他の実行
グローバル検索では、実行が動的に制御できないため検索を有効にしていると常に実行されます。おそらく、状況に応じて検索できるように個別開発で検索画面を開発したい要望が出てくると思いますが、今のところその方法を説明されたドキュメントはありませんでした。
少し調査した結果を載せたいと思います。開発者コンソールからSOSLで検索すると標準項目の外部 ID、表示 URLは検索できますが、カスタム項目のDate、Title、Summaryが検索できませんでした。あと、標準ではオブジェクトのホーム画面にはレコードが表示されませんでした。
そのほかに標準で表示できる方法のリンクを載せます。一部試してみましたがうまく実行できなかったものもあるのでぜひ試してみてください。
少し調査した結果を載せたいと思います。開発者コンソールからSOSLで検索すると標準項目の外部 ID、表示 URLは検索できますが、カスタム項目のDate、Title、Summaryが検索できませんでした。あと、標準ではオブジェクトのホーム画面にはレコードが表示されませんでした。
そのほかに標準で表示できる方法のリンクを載せます。一部試してみましたがうまく実行できなかったものもあるのでぜひ試してみてください。
アクセスコントロール
外部オブジェクトのアクセスコントロールについて説明している資料を見つけることができなかったので、私の調査結果で説明します。
① 共有設定や共有ルールでは外部オブジェクトが非表示なので制御はできませんでした。
② プロファイルのオブジェクト権限(参照のみ)、項目レベルセキュリティーは制御できました。レコードタイプは非表示なので制御はできませんでした。
③ 所有者のアクセス権は、所有者項目がないためできませんでした。
④ 主従によるアクセス権は、参照関係しか設定できずできませんでした。
⑤ コミュニティーユーザにプロファイルで外部オブジェクト権限を付与できますが、コミュニティーの検索で利用できないようです。
⑥ ユーザ単位やレコード単位でアクセス制御は、検索先で実装するのが最善だと感じました。
① 共有設定や共有ルールでは外部オブジェクトが非表示なので制御はできませんでした。
② プロファイルのオブジェクト権限(参照のみ)、項目レベルセキュリティーは制御できました。レコードタイプは非表示なので制御はできませんでした。
③ 所有者のアクセス権は、所有者項目がないためできませんでした。
④ 主従によるアクセス権は、参照関係しか設定できずできませんでした。
⑤ コミュニティーユーザにプロファイルで外部オブジェクト権限を付与できますが、コミュニティーの検索で利用できないようです。
⑥ ユーザ単位やレコード単位でアクセス制御は、検索先で実装するのが最善だと感じました。
料金
① Googleカスタム検索は無料です。
② Google Custom Search APIは、1日100クエリまでは無料ですが、更に必要な場合は1000回につき5ドル、最大1日1万リクエストが上限です。
③ Salesforce 統合検索機能の料金は無料です。
② Google Custom Search APIは、1日100クエリまでは無料ですが、更に必要な場合は1000回につき5ドル、最大1日1万リクエストが上限です。
③ Salesforce 統合検索機能の料金は無料です。
まとめ
いかがだったでしょうか?便利に感じていただけたでしょうか?このブログを見て「おおーー!!」と思った方は多いと思います。設定も簡単なので簡単に試していただけると思います。
この機能で検索の利便性が向上するとともに、ナレッジが更に活用されることで、もっと「ナレッジを蓄積しよう!」という動きが出てきたら更にうれしいですね!
それでは!
この機能で検索の利便性が向上するとともに、ナレッジが更に活用されることで、もっと「ナレッジを蓄積しよう!」という動きが出てきたら更にうれしいですね!
それでは!
資料
Federated Search for Salesforce ISVs | Developer Force Blog
今回のサンプルが載っています。
"TrailheaDX for you"でのLT「Federation Search(統合検索) を見てみよう」資料
このLTで初めてこの機能を知りました。基礎的な情報から個別実装でのノウハウを説明されたいい資料です。
Simplify Your Searching with Federated Search - Salesforce Admins
外部検索プロバイダーについて説明されています。
70 件