hnishiyamaのブログ

日記とかSalesforceのこととか、なんでも書いていきます。

SOQLでナレッジを操作する時の言語の挙動について

はじめに

翻訳済みのナレッジをSOQLで扱う時、どのような挙動をするのかまとめました。


扱うオブジェクト

まず、記事情報を表すオブジェクトは

の4種類あるようです。


オブジェクト
説明
ArticleType_ka 記事タイプ「ArticleType」の最新バージョンの記事情報を保持
ArticleType_kav 記事タイプ「ArticleType」の全てのバージョン・全ての言語の、カスタム項目を含めた記事情報を保持
KnowledgeArticle 全記事タイプの最新バージョンの記事情報を保持
KnowledgeArticleVersion 全記事タイプの全てのバージョン・全ての言語の記事情報を保持


kaは「KnowledgeArticle」、kavは「KnowledgeArticleVersion」の略みたいですね。ArticleType_kaオブジェクトはKnowledgeArticleオブジェクトと、ArticleType_kavオブジェクトはKnowledgeArticleVersionと、レコードの単位が同じです。異なる点は、記事タイプの指定と、ArticleType_kavでないとカスタム項目が扱えないことです。記事タイプごとにカスタム項目を設定できることを考えると、当然ですね。

さらに言語のことを考えると、ArticleType_kaとKnowledgeArticleはMasterLanguageのみ保持しており、ArticleType_kavとKnowledgeArticleVersionは各言語をレコードごとに保持しています。よって、kaとkavの粒度はバージョンだけでなく、言語ごとにも異なると考えてよいでしょう。

本記事では言語ごとに操作したいので、KnowledgeArticleVersionを使って挙動を見ていきます。


 開発者ガイドによる言語についての記述

開発者ガイドでKnowledgeArticleVersionをみてみると、言語を表すLanguage項目について以下記述があります。

SOQL や SOSL での記事のクエリや検索では、WHERE 句で Language 項目を指定する必要があります。すべての記事タイプで同じ言語にする必要があります。
必ず Language の値は 1 つだけ指定します。ただし、SOQL では、Id または KnowledgeArticleId に対する条件がある場合、複数の Language を指定できます。

なるほど。 Languageを指定しないとどうなんだろうか。


Languageを指定しないとこうなる

以下が指定した場合

f:id:hhhhhnishi:20181217122742j:plain

以下が指定しなかった場合

f:id:hhhhhnishi:20181217122746j:plain

お、動きますね。 このとき、ユーザの言語はEnglishなので、このせいでしょうか。

f:id:hhhhhnishi:20181217122748j:plain

中国語にしてみよう

f:id:hhhhhnishi:20181217122753j:plain

で、Languageを指定せずにクエリを投げてみると

f:id:hhhhhnishi:20181217122756j:plain

やはり、指定しない場合はユーザの言語に合わせて取得してくれますね。
※開発者コンソールを開きっぱなしで言語設定を変更した場合は、開発者コンソールをリロードしましょう。


結論

Language を指定しない(しなくてもよい)ケースがあるとすれば、標準機能をあまり使わない画面でナレッジの項目を開発で表示する場合などでしょうか。基本ユーザの言語に合わせてとってきてくれればよい時ってことですね。

開発者ガイドにも指定してくれって書いてあるし、バージョンアップでクエリエラーが返されるようになってはたまったもんじゃないので、基本は言語を指定すればよいでしょう。

ナレッジについてひとつ詳しくなれました。


参考