プログラマ38の日記

主にプログラムメモです。

Salesforce: ナレッジを一括で公開する

Salesforceのナレッジをまとめて登録し、そのまま公開したい場合があります。

その際のやり方は次のようになります。

 

ナレッジをまとめて登録する

データローダをはじめとするAPIで登録が可能です。

f:id:crmprogrammer38:20170731182247p:plain

上記の、ナレッジの記事タイプの詳細で表示されているAPI参照名がオブジェクトAPI名となり、通常のオブジェクトの同じように登録を行います。上の画面では「type1__kav」がオブジェクトAPI名です。

そして登録後は「ドラフト記事」として保存されます。データローダ(API)で「type1__kav」をselectすると「ドラフト記事」は取得できないため、「type1__kav」にinsert後、「type1__kav」をselectすると結果に表示されません。、公開状況(PublishStatus)に"Draft"の検索条件を指定しないと結果が取得できません。他のオブジェクトの違いに多少戸惑います。

2017/8/17:__kavのオブジェクトからデータを取得する際には、公開状況(PublishStatus)に何も検索条件を指定しないと、公開状況(PublishStatus)が"Online"の条件がデフォルトとなることがわかりました。記載が間違えていたので訂正しました。

 

余談:ナレッジをまとめて削除する

「type1__kav」は、insert、upsert、updateが可能で、deleteはできません。deleteは「type1__ka」で行います。

 

ナレッジをまとめて公開する

f:id:crmprogrammer38:20170731183644p:plain

画面から行う場合は、「記事の管理」タブのドラフト記事から、複数のナレッジにチェックを入れて公開ボタンをクリックします。

それとは別にナレッジ用に用意されているApexClassからも公開できます。

List<KnowledgeArticle> rows = [Select  Id  From   KnowledgeArticle
where id not in ( select KnowledgeArticleId from KnowledgeArticleVersion) limit 100];
[Select KnowledgeArticleId From KnowledgeArticleVersion where PublishStatus = 'Draft' limit 100 ]

for( KnowledgeArticle row : rows ){
KbManagement.PublishingService.publishArticle(row.Id, true);
}

上記のコードで公開ができます。コードでKnowledgeArticle、KnowledgeArticleVersionを使いましたが、type1__ka、type1__kavとしても同じです。
※2017/8/17 公開状況(PublishStatus)に"Draft"の検索条件を入れれば、KnowledgeArticleVersionから取得できることがわかりSOQLを修正しました。

KnowledgeArticle、KnowledgeArticleVersionは全ての記事タイプを通してナレッジを管理できるオブジェクトです。

soqlでlimitを入れていますが、使ってみた結果100件が限界でした。ですので、100件以上まとめて公開する場合は、上記を全て公開できるまで繰り返すことになります。