Salesforce ナレッジ開発者ガイド - Salesforce.com Help Portal

Salesforce ナレッジ開発者ガ
イド
バージョン 34.0, Summer ’15
@salesforcedocs
最終更新日: 2015/5/21
© Copyright 2000–2015 salesforce.com, inc. All rights reserved. Salesforce およびその他の名称や商標は、salesforce.com,
inc. の登録商標です。本ドキュメントに記載されたその他の商標は、各社に所有権があります。
目次
第 1 章: Salesforce ナレッジでの開発の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Salesforce ナレッジ API オブジェクト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
第 2 章: 開発組織の設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
第 3 章: Visualforce タグを使用した検索ページの作成 . . . . . . . . . . . . . . . . . . . . . . 13
Visualforce を使用して記事リストを作成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
ページネーションを Visualforce 記事リストに追加する . . . . . . . . . . . . . . . . . . . . . . . . . 16
検索項目を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する . . . . . . . . . 19
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する . . . . . . . . 23
[Last Updated Promotions (最後に更新されたプロモーション)] ボックスを [Visualforce Article
Search (Visualforce 記事検索ページ)] に追加する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
第 4 章: Apex および REST API を使用した記事の管理 . . . . . . . . . . . . . . . . . . . . . . 39
PublishingService クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
PublishingService メソッド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
記事のマスタバージョンをアーカイブする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
翻訳に関連するタスクを割り当てる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
マスタ記事に関連するタスクを割り当てる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
記事のマスタバージョンを削除する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
記事の翻訳バージョンを削除する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
マスタ記事のオンラインバージョンを編集する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
記事のマスタバージョンを公開する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
記事のアーカイブバージョンを復元する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
記事のメタデータを取得する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
記事のバージョンを取得する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
マスタバージョンのメタデータ要素を検索する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
翻訳バージョンのメタデータ要素を検索する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
翻訳記事のバージョンを完了に設定する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
翻訳記事のバージョンを未完了に設定する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
記事の翻訳を申請する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
記事のマスタバージョンを非公開にする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
翻訳記事のオンラインバージョンを非公開にする . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Salesforce Object Query Language を使用して参照統計を更新する . . . . . . . . . . . . . . . . . 64
Salesforce Object Search Language を使用して検索キーワードを追跡する . . . . . . . . . . . . 64
Salesforce Object Search Language を使用して記事の参照統計を更新する . . . . . . . . . . . . 64
第1章
トピック:
•
Salesforce ナレッジ
API オブジェクト
Salesforce ナレッジでの開発の概要
Salesforce ナレッジは、ユーザが内容 (記事とも呼ばれる) を簡単に作成および管理で
き、必要な記事の検索と表示をすばやく実行できる知識ベースです。組織内のSalesforce
ナレッジの設定が完了したら、ユーザは [記事の管理] タブを使用して記事の書き込
み、編集、公開、アーカイブを行ったり、[記事] タブを使用して公開記事の検索と
表示を行ったりできます。カスタマーポータルまたはパートナーポータルでSalesforce
ナレッジが有効になっている場合、顧客およびパートナーは記事にアクセスできま
す。Web サイト訪問者が記事を参照できるよう、公開知識ベースを作成することも
できます。
このガイドは、会社のニーズに応じて Salesforce ナレッジをカスタマイズする開発者
を対象としています。Visualforce タグを使用した記事の検索ページを理解して作成で
きるようにいくつかの例が記載されています。
1
Salesforce ナレッジでの開発の概要
Salesforce ナレッジ API オブジェクト
Salesforce ナレッジ API オブジェクト
Salesforce ナレッジでは、記事およびデータカテゴリを使用します。記事には、知識ベースで入手できるように
する会社の商品およびサービスに関する情報が取り込まれます。Salesforce ナレッジでは、データカテゴリは、
階層的にカテゴリグループにまとめられた一連の条件です。知識ベースの記事は、複数のカテゴリにしたがっ
て分類できます。ユーザは必要な記事を見つけやすくなります。たとえば、営業地域や事業単位で記事を分類
するには、「営業地域」と「事業単位」という 2 つのカテゴリグループを作成します。「営業地域」カテゴリ
グループでは、「全営業地域」を最上位として、第 2 レベルに「北米」、「アジア」というように、地理的階
層を最大 5 レベルに構成することができます。作成者がカテゴリを記事に割り当てます。管理者は、データカ
テゴリを使用して記事へのアクセスを制御します。
データカテゴリは、システム管理者が定義した値で、記事を知識ベース内で論理サブグループに整理するとき
に役立ちます。たとえば、[記事] タブから、最も関連性の高いデータカテゴリを選択して、記事のリストを絞
り込むことができます。このセクションでは、記事およびデータカテゴリの Salesforce ナレッジ API オブジェク
トと、それらを操作するリソースをリストします。
記事
記事には、知識ベースで入手できるようにする会社の商品およびサービスに関する情報が取り込まれます。知
識ベースの記事を 1 つ以上のデータカテゴリに分類することにより、ユーザは必要な記事を見つけやすくなり
ます。管理者は、データカテゴリを使用して記事へのアクセスを制御します。
記事は記事タイプに基づいており、記事タイプは次に依存しています。
• セクションの内容を整理する記事タイプ。
• 記事を表示する記事タイプのテンプレート。
どの記事も公開サイクルで管理されます。
記事タイプ
Salesforce ナレッジのすべての記事は 1 つの記事タイプに割り当てられます。記事のタイプは、記事が含む
コンテンツのタイプ、外観、および記事にアクセスできるユーザを特定します。たとえば、単純な FAQ の
記事タイプには、[質問] および [回答] の 2 つのカスタム項目があり、記事マネージャが FAQ の記事の作
成または更新時にそこにデータを入力します。より複雑な記事タイプでは、複数のセクションに分かれた
多数の項目が必要な場合があります。レイアウトおよびテンプレートを使用することで、管理者は特定の
コンテンツに対して最も効果的な方法で記事タイプを構築できます。記事タイプへのユーザのアクセスは
権限によって制御されます。各記事タイプについて、管理者は「作成」、「参照」、「編集」、または「削
除」権限をユーザに与えることができます。たとえば、記事マネージャが内部ユーザには FAQ を参照、作
成、編集できるようにするけれども、パートナーユーザには FAQ の参照のみを可能にする場合などです。
記事タイプレイアウト
記事タイプレイアウトを使用して、管理者は記事に表示される項目を構成するセクションを作成し、ユー
ザが表示および編集可能な項目を選択できます。記事タイプごとに 1 つのレイアウトが使用可能です。管
理者は、記事タイプの詳細ページからレイアウトを変更します。
記事タイプテンプレート
記事タイプテンプレートでは、記事タイプレイアウトでのセクションの表示方法を指定します。記事タイ
プは、その 4 つのチャネルそれぞれに異なるテンプレートを使用できます。たとえば、FAQ の記事タイプの
[カスタマーポータル] チャネルをタブテンプレートに割り当てると、FAQ のレイアウトのセクションが、顧
2
Salesforce ナレッジでの開発の概要
Salesforce ナレッジ API オブジェクト
客が FAQ の記事を表示するときにタブとして表示されます。目次テンプレートの場合は、レイアウトで定
義したセクションが、記事が表示されたときに 1 つのページにハイパーリンクと共に表示されます。Salesforce
は、タブと目次の 2 つの標準記事タイプテンプレートを提供します。カスタムテンプレートは Visualforce で
作成できます。
チャネル
チャネルとは、記事を利用可能にする媒体を指します。Salesforce ナレッジでは、記事を利用可能にできる
チャネルを 4 つ提供しています。
• 内部アプリケーション: Salesforceのユーザが、ロールの表示設定に応じて [記事] タブで記事にアクセスで
きます。
• カスタマー: [記事] タブがコミュニティまたはカスタマーポータルで使用可能な場合、顧客が記事にアク
セスできます。カスタマーユーザは、取引先でのマネージャのロール表示設定を継承します。コミュニ
ティでは、カスタマーコミュニティまたはカスタマーコミュニティプラスライセンスを持つユーザのみ
が記事を使用できます。
• パートナー: [記事] タブがコミュニティまたはカスタマーポータルで使用可能な場合、パートナーが記事
にアクセスできます。パートナーユーザは、取引先でのマネージャのロール表示設定を継承します。コ
ミュニティでは、パートナコミュニティライセンスを持つユーザのみが記事を使用できます。
• 公開知識ベース: 記事は、AppExchange から Salesforce ナレッジのサンプル公開知識ベースアプリケーショ
ンを使用して公開知識ベースを作成することで、匿名ユーザに公開できます。公開知識ベースの作成に
は、サイトおよび Visualforce が必要です。
• 自分の Web サイト。会社の Web サイト経由でユーザが記事を使用できます。
公開サイクル
Salesforce ナレッジ記事は公開サイクルの作成から削除までの段階を移行していきます。公開サイクルには、
3 つの異なる状況があります。Draft は、新しい記事が作成されるか既存の記事が更新される段階です。
状況が Online である記事は、公開済みで、他のチャネルで利用できるようになったドラフト記事です。
最後に、公開記事がサイクルの最終段階になると、Archived 状況に移行するか、または Draft に戻り後
続のバージョンで更新されます。
次の表に、記事を操作する API リソースのリストを示します。
名前
型
説明
記事タイプ
__DataCategorySelection
Object
記事を分類するデータカテゴリを表します。
記事タイプ__ka
Object
バージョンとは関係なく特定の記事タイプの記事へのア
クセスを提供します。このオブジェクトは参照のみであ
るため、SOQL 句または WITH DATA CATEGORY
DataCategorySpec SOSL 句では使用できません。詳細
は、「KnowledgeArticle」を参照してください。
記事タイプ__kav
Object
バージョンに応じて特定の記事タイプのすべての記事へ
のアクセスを提供します。このオブジェクトは、
KnowledgeArticleVersion で使用可能な項目へのアクセスを提
供します。詳細は、「KnowledgeArticleVersion」を
参照してください。
3
Salesforce ナレッジでの開発の概要
Salesforce ナレッジ API オブジェクト
名前
型
説明
記事タイプ__Feed
Object
記事の詳細ページに表示されるフィード内の単一フィー
ド項目を表します。
記事タイプ__ViewStat
Object
特定の記事タイプの記事の参照回数の統計情報を提供し
ます。詳細は、「KnowledgeArticleViewStat」を参
照してください。
記事タイプ__VoteStat
Object
特定の記事タイプの記事の加重評価を 1 - 5 のスケールで
提供します。詳細は、「KnowledgeArticleVoteStat」
を参照してください。
CaseArticle
Object
Case と KnowledgeArticle との間の関連を表します。
FeedComment
Object
ユーザがフィードに追加したコメントを表します。ユー
ザがフィードに追加したコメントを表します。
FeedItem
Object
FeedItem は、レコードフィードの変更 (テキスト投稿、リ
ンク投稿、およびコンテンツ投稿を含む) などのフィー
ドのエントリを表します。
KnowledgeArticle
Object
バージョンとは関係なく記事へのアクセスを提供しま
す。このオブジェクトは参照のみであるため、SOQL 句ま
たは WITH DATA CATEGORY DataCategorySpec SOSL 句で
は使用できません。
KnowledgeArticleVersion
Object
バージョンに応じて、すべての記事タイプを対象に記事
の標準項目のグローバルな参照を提供します。
KnowledgeArticleViewStat
Object
すべての記事タイプを対象に指定記事の参照回数に関す
る統計情報を提供します。
KnowledgeArticleVoteStat
Object
すべての記事タイプを対象に指定記事の加重評価を 1 - 5
のスケールで提供します。
NewsFeed
Object
ユーザのホームの単一フィード項目を表します。Chatter
フィードでは、ユーザがフォローするレコードに対する
最新の変更が表示されます。
UserProfileFeed
Object
ユーザプロファイルフィードを表します。このフィード
は、フィード内で追跡可能なレコードに対するユーザに
よるすべてのアクションを追跡します。このフィード
は、ユーザプロファイルページに表示されます。
WITH DATA CATEGORY
filteringExpression
SOQL 句
公開サイクルおよびデータカテゴリの状況に応じて記事
を分類します。詳細は、『Force.com SOQL および SOSL リ
ファレンス』を参照してください。
4
Salesforce ナレッジでの開発の概要
Salesforce ナレッジ API オブジェクト
名前
型
説明
WITH DATA CATEGORY
DataCategorySpec
SOSL 句
カテゴリに基づいて記事を検索します。詳細は、
『Force.com SOQL および SOSL リファレンス』を参照してく
ださい。
KnowledgeArticleVersion での SOQL および SOSL
• クエリで 1 つ以上の主キー ID を指定する場合を除き、必ず PublishStatus の値は 1 つだけ指定します。
セキュリティをサポートするために、PublishStatus の値が Draft の記事は「記事の管理」権限を持つ
ユーザにのみ表示されます。
• アーカイブ済み記事のバージョンは、articletype_kav オブジェクトに保存されます。アーカイブ済み記事の
バージョンをクエリするには、記事の Id を指定し、sLatestVersion='0' を設定します。
• 必ず Language の値は 1 つだけ指定します。ただし、SOQL では、Id または KnowledgeArticleId に対す
る条件がある場合、複数の Language を指定できます。
データカテゴリ
データカテゴリは、カテゴリグループ別に編成され、次のことを実行できます。
• ユーザによるレコードの分類および検索。
• システム管理者によるレコードへのアクセスの管理。
データカテゴリは、Salesforce ナレッジ (記事) およびアンサーコミュニティ (質問) で使用できます。
データカテゴリと記事
Salesforce ナレッジでは、各カテゴリグループ内の 5 段階階層のデータカテゴリをサポートします。知識ベー
スの記事は、複数のカテゴリに従って分類できます。ユーザは必要な記事を見つけやすくなります。たと
えば、営業地域や事業単位で記事を分類するには、「営業地域」と「事業単位」という 2 つのカテゴリグ
ループを作成します。「営業地域」カテゴリグループでは、「全営業地域」を最上位として、第 2 レベル
に「北米」、「アジア」というように、地理的階層を構成することができます。
以下の図は、ラップトップの商談に関する記事の、知識ベース管理者のビューを示します。記事の編集ペー
ジを使用して、知識ベース管理者は Product カテゴリグループの Laptops、および Geography カテゴ
リグループの USA で記事を分類しました。
5
Salesforce ナレッジでの開発の概要
Salesforce ナレッジ API オブジェクト
次の図は、[記事] タブで公開されている同じ記事を検索するエージェントを示します。エージェントは、
Products および Geography ドロップダウンリストで、それぞれ Laptops および USA を選択します。
次の表に、データカテゴリを操作する API リストを示します。
名前
型
説明
記事タイプ
__DataCategorySelection
Object
記事カテゴリへのアクセスを許可します。
QuestionDataCategorySelection Object
質問カテゴリへのアクセスを許可します。
WITH DATA CATEGORY
filteringExpression
SOQL 句
公開サイクルおよびデータカテゴリの状況に応じて記事
を分類します。詳細は、『SalesforceSOQL および SOSL リファ
レンス』を参照してください。
6
Salesforce ナレッジでの開発の概要
Salesforce ナレッジ API オブジェクト
名前
型
説明
WITH DATA CATEGORY
DataCategorySpec
SOSL 句
カテゴリに基づいて記事を検索します。詳細は、
『Salesforce SOQL および SOSL リファレンス』を参照してく
ださい。
describeDataCategoryGroups() コール
要求で指定されたオブジェクトで使用できるカテゴリグ
ループを取得します。
describeDataCategoryGroupStructures() コール
要求で指定されたオブジェクトで使用できるカテゴリグ
ループとそのデータカテゴリ構造を返します。
describeDataCategoryGroups
Apex メソッド 指定したオブジェクトに関連するカテゴリグループのリ
ストを返します。『Force.com Apex コード開発者ガイド』
を参照してください。
describeDataCategoryGroupStructures Apex メソッド 要求で指定されたオブジェクトのデータカテゴリ構造と
共に使用可能なカテゴリグループを返します。『Force.com
Apex コード開発者ガイド』を参照してください。
7
第2章
開発組織の設定
このガイドのサンプルでは、特定のカテゴリグループ、カテゴリ、および記事タイ
プを参照します。これらのサンプルを変更せずに使用するには、以下に示す記事タ
イプ、データカテゴリ、記事、カスタムアプリケーションのパラメータを使用して
開発組織を作成する必要があります。自分の開発組織のカテゴリや記事タイプでサ
ンプルを更新することもできます。
記事タイプ
次の表では、サンプルで使用される 2 つの記事タイプについて説明します。サンプ
ルを変更せずに使用するには、これらの記事タイプを開発組織に追加します。記事
タイプを追加する方法についての詳細は、Salesforce オンラインヘルプの「記事タイ
プの定義」を参照してください。
パラメータ
提示
プロモーション
表示ラベル
Offer (提示)
Promotion (プロモーション)
API 名
Offer__kav
Promotion__kav
カスタム項目 1
• 項目表示ラベル:
• 項目表示ラベル: Start
Reference (リファレンス)
Date (開始日)
カスタム項目 2
カスタム項目 3
カスタム項目 4
• API 名: Reference__c
• API 名: Start_Date__c
• 型: text
• 型: date/time
• 項目表示ラベル:
Description (説明)
• 項目表示ラベル: End Date
(終了日)
• API 名: Description__c
• API 名: End_Date__c
• 型: rich text area
• 型: date/time
• 項目表示ラベル: Launch • 項目表示ラベル:
Date (開始日)
Description (説明)
• API 名: Launch_Date__c
• API 名: Description__c
• 型: date
• 型: rich text area
• 項目表示ラベル: Size (サ なし
イズ)
• API 名: Size__c
• 型: picklist
8
開発組織の設定
パラメータ
提示
プロモーション
• 値は次のとおりです。
– XS
– S
– M
– L
– XL
– XXL
カスタム項目 5
• 項目表示ラベル: Data
Sheet (データシート)
なし
• API 名: Data_Sheet__c
• 型: file
データカテゴリ
コードサンプルのカスタマイズされた検索ページでは、[Fashions (ファッション)]、
[Stores (店舗)]、および [Products (商品)] カテゴリグループを使用します。次の表に、こ
れらのカテゴリグループで使用されるカテゴリの詳細を示します。API を使用する
と、一意の名前でカテゴリを選択できます。これらのカテゴリをサンプルの組織に
追加する際は、括弧内に記載された一意のカテゴリ名を設定してください。
Fashions (ファッション)
Stores (店舗)
Products (商品)
All (All)
All (All)
All (All)
• Rockers (Rockers)
• Online store (Online_Store) • Men (Men)
• Late 50's/early 60's
(Late_50_s_early_60_s)
• US (US)
– Shoes (Shoes_m)
– San Francisco
(San_Francisco)
– Jackets (Jackets_m)
• Futuristic (Futuristic)
• Grunge (Grunge)
– New-York (New_York)
– Shirts (Shirts_m)
• Old Hollywood
(Old_Hollywood)
• Asia (Asia)
– Hong-Kong
(Hong_Kong)
• The 80's (The_80_s)
• French Chic (French_Chic)
– Tokyo (Tokyo)
• Flashy Disco (Flashy_Disco)
• Gothic (Gothic)
• Europe (Europe)
– Trousers (Trousers_m)
– Hats (Hats_m)
• Women (Women)
– Shoes (Shoes_w)
– Jackets (Jackets_w)
– Trousers (Trousers_w)
– Paris (Paris)
– Skirts (Shirts_w)
– London (London)
– Hats (Hats_w)
• Children (Children)
9
開発組織の設定
Fashions (ファッション)
Stores (店舗)
Products (商品)
– Shoes (Shoes_k)
– Trousers (Trousers_k)
– Jackets (Jackets_k)
記事
記事を作成すると、サンプルの検索ページをより現実的なものにすることができま
す。このセクションのコンテンツを使用して .csv ファイルを作成し、サンプル組
織にインポートします。
提示およびプロモーションの各記事タイプの .csv ファイルを作成する手順は、次
のとおりです。記事をインポートする方法については、 Salesforce オンラインヘルプ
の「記事をインポート」を参照してください。
1. 記事タイプの項目名をカンマで区切って .csv ファイルの最初の行に入力しま
す。項目間にスペースを追加しないでください。
2. 値の内容を切り取って項目名の下に貼り付けます。
3. ファイルを保存して .csv ファイルを Salesforce ナレッジにインポートします。
メモ: インポート後に記事を公開する必要があります。公開されていない記事
は、カスタム検索ページに表示されません。
提示記事
次に、提示記事タイプの記事のコンテンツを示します。箇条書きに記載されている
のは、使用可能な項目です。その下の各行が、その項目値です。
• Title
• Summary
• URLName
• datacategorygroup.Fashions
• datacategorygroup.Stores
• datacategorygroup.Products
• channels
• Reference__c
• Description__c
• Launched_Date__c
• Size__c
• Data_Sheet__c
Aviator Jacket,5
Zippers,,The_80_s+Grunge,San_Francisco+Paris+London,Jackets_m,,,,,,
Army Jacket,Men's Grenade jacket for
snowboarding,,Grunge,US,Jackets_m,,,,,,
10
開発組織の設定
Futuristic Boots,Integrates state-of-the-art
biotechnics,,Futuristic,All,Shoes_w,,,,,,
60s Mini Skirt,Go back with this mini
skirt,,Late_50_s_early_60_s,All,Skirts_w,,,,,,
Dotted 80's Skirt,Who said you were a material
girl?,,The_80_s,All,Skirts_w,,,,,,
80's Punk Skirts,London Calling!,,The_80_s+Grunge,US,Skirts_w,,,,,,
French Design shoes,Magnifique!,,French_Chic,All,Shoes_w,,526398,,,,
Vintage Platform Shoes,Get high!,,The_80_s,All,Shoes_w,,,,,,
Metallic Jacket,We need you for vintage
army!,,The_80_s+Futuristic,All,Jackets_m,,,,,,
Gothic Boots,Are you from the Adam's family?,,Gothic,All,Shoes_w,,,,,,
Motorcycle Jacket,Live to ride, ride to
live!,,Rockers,US,Jackets_m,,,,,,
Men's Leather Pants,Hey
man!,,Late_50_s_early_60_s,US+Europe,Trousers_m,,,,,,
Retro Disco Jacket,Saturday's night
fever!,,Flashy_Disco,US+Europe,Jackets_m,,,,,,
French Beret,Red
beret,,French_Chic,All,Hats_m+Hats_w,,,Beret_DataSheet.htm,2010-02-25,S,
プロモーション記事
次に、プロモーション記事タイプの記事のコンテンツを示します。箇条書きに記載
されているのは、使用可能な項目です。その下の各行が、項目の値です。
• Title
• URLName
• datacategorygroup.Fashions
• datacategorygroup.Stores
• datacategorygroup.Products
• channels
• Start_Date__c
• End_Date__c,Description__c
60's Pants,,Late_50_s_early_60_s,US+Europe,Trousers_m+Trousers_w,,,,
French Trousers,,French_Chic,All,Trousers_w,,,,
Futuristic Flip-Flops,,Futuristic,US,Shoes_w,,,,
Green Kids Gogo Boots,,The_80_s+Futuristic,All,Shoes_k,,,,
Dark Shirts,,Gothic,All,Shirts_m,,,,
Christmas Tree Skirts,,Late_50_s_early_60_s,US,Skirts_w,,,,
Leather Rocker Jacket,,Rockers,US,Jackets_m,,,,
ナレッジのカスタムアプリケーション
Salesforce 知識ベースのカスタムアプリケーションを作成する手順は、次のとおりで
す。
1. [設定] で、[作成] > [アプリケーション] をクリックします。
11
開発組織の設定
2. 内容を紹介するスプラッシュページが表示される場合は、[次へ]をクリックしま
す。
3. [新規] をクリックします。
新規カスタムアプリケーションウィザードが表示されます。
4. [アプリケーションの表示ラベル] 項目に「Knowledge」(ナレッジ) と入力します。
5. [説明] 項目に「My Custom Knowledge Base」(私のカスタム知識ベース) と入
力します。
6. [次へ] をクリックします。
7. [次へ] をクリックします。
8. [ホーム]、[記事]、[記事の管理] タブを選択して、[次へ] をクリックします。
9. [プロファイルへの割り当て] ページで、標準ユーザプロファイルおよびシステム
管理者プロファイルの横にある [参照可能] チェックボックスをオンにします。
10. [保存] をクリックします。
ブラウザの右上隅にあるアプリケーションメニューにナレッジカスタムアプリケー
ションが表示されます。このアプリケーションを選択して、コードサンプルを実行
します。
12
第3章
トピック:
•
Visualforce を使用し
て記事リストを作
成する
•
ページネーション
を Visualforce 記事
リストに追加する
•
検索項目を
[Visualforce Article
Search (Visualforce
記事検索)] ページに
追加する
•
•
検索条件を
[Visualforce Article
Search (Visualforce
記事検索)] ページに
追加する
[Last Updated
Promotions (最後に
更新されたプロ
モーション)] ボック
スを [Visualforce
Article Search
(Visualforce 記事検
索ページ)] に追加す
る
Visualforce タグを使用した検索ページの
作成
本番組織へのリリース時にテストクラスを含める
このセクションの一部のコードサンプルには、対応するテストクラスがあります。
本番組織にリリースする場合、コードにこのテストクラスを含めます。
テストクラスには、Apex クラスおよびトリガの動作を検証する単体テストが含まれ
ます。単体テストは、コード内の特定の部分が正しく機能していることを確認する
クラスメソッドです。単体テストのメソッドは引数を取らず、データベースへのデー
タのコミットを行うこともなく、メソッド定義に testMethod キーワードのフラグが
立てられます。
正確性やコードカバー率を確認し、また回帰テストを行う意味も含めて、Apex コー
ドが本番組織にリリースされるときには、毎回、組織内のすべてのテストメソッド
が実行されます。本番組織にリリースするには、すべての Apex クラスで 75% 以上の
コードカバー率が必要になります。また、すべてのトリガについてもある程度のコー
ドカバー率が必要です。
@isTest クラスアノテーションは、このクラスにはテストメソッドのみが含まれて
いることを示します。@isTest アノテーションで定義したクラスは、すべてのApex
スクリプトの組織サイズの上限には含まれません。テストおよびコードカバー率に
ついての詳細は、『Apex コード開発者ガイド』を参照してください。
このセクションでは、Visualforce を使用して検索ページを作成します。次の手順を実
行します。
1. Visualforce を使用して記事リストを作成する
2. ページネーションを Visualforce 記事リストに追加する
3. 検索項目を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
4. 検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
5. [Last Updated Promotions (最後に更新されたプロモーション)] ボックスを [Visualforce
Article Search (Visualforce 記事検索ページ)] に追加する
13
Visualforce タグを使用した検索ページの作成
Visualforce を使用して記事リストを作成する
Visualforce を使用して記事リストを作成する
Visualforce 検索ページの最初のコンポーネントとなる記事リストを作成します。
1. ブラウザのアドレスバーで、salesforce.com/ より右側すべてを apex/ArticleList に置き換えます。
salesforce.com/ の左側は何も変更しないでください。
この結果、URL は、https://instance.salesforce.com/apex/ArticleList のようになります。
2. Enter キーを押します。
ページがまだ存在しないことを示す Visualforce エラーページが表示されます。
3. [ArticleList ページを作成] リンクをクリックします。
4. 新しい Visualforce ページの下部にあるフッターで、[ArticleList] をクリックして Visualforce 開発モードのページ
エディタを表示します。
5. Visualforce 開発モードのページエディタでデフォルトのマークアップをすべて削除し、「Visualforce 記事リス
トのコードサンプル」 (ページ 14)に表示されているマークアップに置き換えます。
6. [保存] (
) をクリックします。
マークアップを保存すると、Force.comプラットフォームでマークアップが有効であるかどうかが確認されて、
エラーがあれば通知されます。マークアップが有効である場合、Visualforce ページの新しいバージョンが保存
され、ブラウザに表示されます。これで、記事のリストが表示された [Article List (記事リスト)] ページを確認で
きます。
Visualforce 記事リストのコードサンプル
太字の行については、コードサンプルの後に説明があります。
<apex:page sidebar="false" title="Article List">
<style>
td{
vertical-align : top;
text-align: left;
}
</style>
<apex:form >
<apex:pageBlock title="Article List" >
<apex:panelGrid width="100%">
<table width="99%">
<tr>
<th width="33%">Title</th>
<th width="33%">Article Type</th>
<th width="33%">Summary</th>
</tr>
</table>
<knowledge:articleList articleVar="article" hasMoreVar="false" pageSize="10">
<table width="99%">
<tr>
<td width="33%">
<apex:outputLink target="_blank" value="{!URLFOR($Action.KnowledgeArticle.View,
14
Visualforce タグを使用した検索ページの作成
Visualforce を使用して記事リストを作成する
article.id,['popup' = 'true'])}">{!article.title}</apex:outputLink>
</td>
<td width="33%"><apex:outputText >{!article.articleTypeLabel}</apex:outputText></td>
<td width="33%"><apex:outputText >{!article.abstract}</apex:outputText></td>
</tr>
</table>
</knowledge:articleList>
</apex:panelGrid>
</apex:pageBlock>
</apex:form>
</apex:page>
次のコードフラグメントでは、knowledge:articleList Visualforce コンポーネントによって最初の記事リス
トが作成されます。pageSize 属性により、リスト内に 10 個までしか記事が表示されないようになります。
<knowledge:articleList articleVar="article"
hasMoreVar="false" pageSize="10">
[Visualforce Article Search (Visualforce 記事検索)] タブの作成
次に、記事リストが表示される Visualforce ページの新しいカスタムタブを作成します。このページを [Visualforce
Article Search (Visualforce 記事検索)] ページと呼ぶこととします。
1. [設定] で、[作成] > [タブ] をクリックします。
2. Visualforce タブ領域で、[新規] をクリックします。
3. [Visualforce ページ] ドロップダウンリストで、ArticleList を選択します。
4. [タブの表示ラベル] 項目に「Visualforce Article Search」(Visualforce 記事検索) と入力します。
5. [タブ名] 項目のデフォルト値はそのままにしておきます。
6. [タブスタイル] ルックアップアイコンをクリックして、新しいタブのスタイルを選択します。
7. [Salesforce Classic 準備完了] チェックボックスをオフ、[スプラッシュページのカスタムリンク] ド
ロップダウンリストの設定を [--なし--] のままにします。
8. [説明] 項目に「A tab for the Visualforce Article Search page」(Visualforce 記事検索ページのタ
ブ) と入力します。
9. [次へ] をクリックします。
10. [次へ] を再度クリックして、デフォルトのユーザプロファイル表示を受け入れます。
11. [カスタムアプリケーションに追加] ページで、自分のナレッジアプリケーション以外のすべての [タブを含
める] チェックボックスをオフにします。
12. [各ユーザのカスタマイズ設定にタブを追加する] チェックボックスをオンにします。
13. [保存] をクリックします。
ページが更新されると、[Visualforce Article Search (Visualforce 記事検索)] タブが自動的にページ上部のアプリケー
ションタブに追加されます。
15
Visualforce タグを使用した検索ページの作成
ページネーションを Visualforce 記事リストに追加する
これまでの作業を確認する
[Visualforce Article Search (Visualforce 記事検索)] タブを選択して、記事リストを表示します。
リスト内の各項目には、記事のタイトル、記事タイプ、および記事の概要が表示されます。現時点では、
Visualforce リストのコードサンプルの knowledge:articleList タグで設定したように、リストにはページご
とに 10 個の記事しか表示されません。
ページネーションを Visualforce 記事リストに追加する
[Visualforce Article Search (Visualforce 記事検索)] タブに、ページ間を移動するための [次へ] および [前へ] リンクを追
加します。
1. [Visualforce Article Search (Visualforce 記事検索)] タブの下部にあるフッターで、[ArticleList] をクリックして Visualforce
開発モードのページエディタを表示します。
2. Visualforce 開発モードのページエディタで既存のマークアップをすべて削除し、「Visualforce 記事リストペー
ジネーションのコードサンプル」 (ページ 17)に表示されているマークアップに置き換えます。
3. [保存] (
) をクリックします。
新しい Visualforce コードは、Apex クラスおよびメソッドを参照しているため、後でエラーメッセージが表示
されて、想定されるクラスまたはメソッドを宣言するように求められます。これらの項目を 1 つずつ宣言
する代わりに、適切なコントローラを作成します。
4. [設定] から、[開発] > [Apex クラス] をクリックします。
16
Visualforce タグを使用した検索ページの作成
ページネーションを Visualforce 記事リストに追加する
5. [新規] をクリックします。
6. Visualforce ページネーションコントローラのコードサンプル (ページ 18)の内容をコピーして貼り付けます。
7. [保存] をクリックします。
8. ステップ 1 ~ 3 を繰り返します。
Visualforce 記事リストページネーションのコードサンプル
このコードサンプルは、最初に保存した Visualforce ページに基づいていますが、ページネーションを有効にす
る機能強化が含まれています。太字の行については、コードサンプルの後に説明があります。
<apex:page sidebar="false" title="Article List" controller="vfListPaginationController">
<style>
td{
vertical-align : top;
text-align: left;
}
</style>
<apex:form >
<apex:pageBlock title="Article List" >
<apex:panelGroup id="theSearchResults" >
<apex:panelGrid width="100%">
<table width="99%">
<tr>
<th width="33%">Title</th>
<th width="33%">Article Type</th>
<th width="33%">Summary</th>
</tr>
</table>
<knowledge:articleList articleVar="article" pageNumber="{!currentPageNumber}"
hasMoreVar="false" pageSize="10">
<table width="99%">
<tr>
<td width="33%">
<apex:outputLink target="_blank" value="{!URLFOR($Action.KnowledgeArticle.View,
article.id,['popup' = 'true'])}">{!article.title}</apex:outputLink>
</td>
<td width="33%"><apex:outputText >{!article.articleTypeLabel}</apex:outputText></td>
<td width="33%"><apex:outputText >{!article.abstract}</apex:outputText></td>
</tr>
</table>
</knowledge:articleList>
</apex:panelGrid>
<apex:panelGrid columns="2">
<apex:commandLink action="{!previous}" value="Previous" style="{!IF(prevRequired =
true,'display:block','display:none')}" reRender="theSearchResults"/>
<apex:commandLink action="{!next}" value="Next" style="{!IF(nextRequired =
true,'display:block','display:none')}" reRender="theSearchResults"/>
</apex:panelGrid>
</apex:panelGroup>
</apex:pageBlock>
17
Visualforce タグを使用した検索ページの作成
ページネーションを Visualforce 記事リストに追加する
</apex:form>
</apex:page>
コード controller="vfListPaginationController" は、Visualforce ページで使用されるコントローラを参
照し、pageNumber="{!currentPageNumber}" は、記事リストのページネーションを設定します。
currentPageNumber 変数は、ユーザが [次へ] または [前へ] リンクをクリックするたびに更新されます。
次のコードフラグメントでは、コントローラ内の previous メソッドをコールします。rerender 属性は、
ページ全体ではなく記事リストのみを更新します。
<apex:commandLink action="{!previous}" value="Previous" style="{!IF(prevRequired =
true,'display:block','display:none')}" reRender="theSearchResults"/>
Visualforce ページネーションコントローラのコードサンプル
太字の行については、コードサンプルの後に説明があります。
public with sharing class vfListPaginationController {
//Page Size
private Static Final Integer PAGE_NUMBER = 10;
public vfListPaginationController() {
String qryString = 'SELECT Id, title, UrlName, LastPublishedDate,LastModifiedById FROM
KnowledgeArticleVersion WHERE (PublishStatus = \'online\' and Language = \'en_US\')';
List<KnowledgeArticleVersion> articleList= Database.query(qryString);
maxSize = articleList.size() ;
}
//Keeps track of current page & max size of article list
Integer currentPage = 1;
Integer maxSize = 1;
// Returns whether we need to see previous button or not
public boolean getPrevRequired() {
return currentPage > 1;
}
// Returns whether we need to see next button or not
public boolean getNextRequired() {
return currentPage * PAGE_NUMBER < maxSize;
}
//Returns current page number
public Decimal getCurrentPageNumber() {
return this.currentPage;
}
//action for next click
public PageReference next() {
if(maxSize > this.currentPage * PAGE_NUMBER) {
this.currentPage = this.currentPage + 1;
}
18
Visualforce タグを使用した検索ページの作成
検索項目を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
return null;
}
//action for previous click
public PageReference previous() {
if(this.currentPage > 1)
this.currentPage = this.currentPage - 1;
return null;
}
}
次のコードフラグメントは、記事情報を取得してリストに表示する SOQL 句です。WHERE 句では、公開記事の
みが記事リストに表示されるように指定しています。
SELECT Id, title, UrlName, LastPublishedDate,LastModifiedById FROM KnowledgeArticleVersion
WHERE (PublishStatus = \'online\' and Language = \'en_US\')
これまでの作業を確認する
作業内容を保存すると、[Visualforce Article Search (Visualforce 記事検索)] ページが更新されて、[次へ] リンクがリス
トの下部に表示されます。[次へ] をクリックすると、ページに [前へ] リンクが表示されます。
検索項目を [Visualforce Article Search (Visualforce 記事検索)] ページ
に追加する
記事リストの上にキーワード検索項目を作成します。この項目にテキストを入力すると、リストが更新され
て、そのキーワードを含む記事のみが表示されます。
19
Visualforce タグを使用した検索ページの作成
検索項目を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
検索項目を使用する場合、検索文字列を設定および取得する新しいメソッドが必要になります。そのため、
[Visualforce Article Search (Visualforce 記事検索)] ページのコードを変更する前に新しいコントローラを追加します。
1. [設定] で、[開発] > [Apex クラス] をクリックします。
2. [新規] をクリックします。
3. Visualforce キーワード検索コントローラのコードサンプル (ページ 21)の内容をコピーして貼り付けます。
4. [保存] をクリックします。
5. [Visualforce Article Search (Visualforce 記事検索)] タブのフッターで、[ArticleList] をクリックして Visualforce 開発モー
ドのページエディタを表示します。
6. Visualforce 開発モードのページエディタで既存のマークアップをすべて削除し、「Visualforce キーワード検索
のコードサンプル」 (ページ 20)に表示されているマークアップに置き換えます。
Visualforce キーワード検索のコードサンプル
太字の行については、コードサンプルの後に説明があります。
<apex:page sidebar="false" title="Article List" controller="vfKeywordSearchController">
<style>
td{
vertical-align : top;
text-align: left;
}
</style>
<apex:form >
<apex:pageBlock title="Search" >
<apex:inputText value="{!searchstring}" id="theSearchstring" maxlength="100" size="110"/>
&nbsp;
<apex:commandButton value="Go" id="submitButton" style="width:30"
reRender="theSearchResults" />
</apex:pageBlock>
<apex:messages />
<apex:pageBlock title="Article List" >
<apex:panelGroup id="theSearchResults" >
<apex:panelGrid width="100%">
<table width="99%">
<tr>
<th width="33%">Title</th>
<th width="33%">Article Type</th>
<th width="33%">Summary</th>
</tr>
</table>
<knowledge:articleList articleVar="article" pageNumber="{!currentPageNumber}"
Keyword="{!searchstring}" hasMoreVar="false" pageSize="10">
<table width="99%">
<tr>
<td width="33%">
<apex:outputLink target="_blank" value="{!URLFOR($Action.KnowledgeArticle.View,
article.id,['popup' = 'true'])}">{!article.title}</apex:outputLink>
</td>
20
Visualforce タグを使用した検索ページの作成
検索項目を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
<td width="33%"><apex:outputText >{!article.articleTypeLabel}</apex:outputText></td>
<td width="33%"><apex:outputText >{!article.abstract}</apex:outputText></td>
</tr>
</table>
</knowledge:articleList>
</apex:panelGrid>
<apex:panelGrid columns="2">
<apex:commandLink action="{!previous}" value="Previous" style="{!IF(prevRequired =
true,'display:block','display:none')}" reRender="theSearchResults"/>
<apex:commandLink action="{!next}" value="Next" style="{!IF(nextRequired =
true,'display:block','display:none')}" reRender="theSearchResults"/>
</apex:panelGrid>
</apex:panelGroup>
</apex:pageBlock>
</apex:form>
</apex:page>
次のコードフラグメントでは、Keyword 属性を使用します。この属性の値で、vfKeywordSearchController
コントローラの searchstring メソッドを呼び出します。
<knowledge:articleList articleVar="article" pageNumber="{!currentPageNumber}"
Keyword="{!searchstring}" hasMoreVar="false" pageSize="10">
Visualforce キーワード検索コントローラのコードサンプル
太字の行については、コードサンプルの後に説明があります。
public with sharing class vfKeywordSearchController {
//Page Size
private Static Final Integer PAGE_NUMBER = 10;
//Search String used in ArticleList tag
public String searchstring { get; set; }
public vfKeywordSearchController() {
String qryString = 'SELECT Id, title, UrlName, LastPublishedDate,LastModifiedById FROM
KnowledgeArticleVersion WHERE (PublishStatus = \'online\' and Language = \'en_US\')';
List<KnowledgeArticleVersion> articleList= Database.query(qryString);
maxSize = articleList.size() ;
}
//Keeps track of current page & max size of article list
Integer currentPage = 1;
Integer maxSize = 1;
// Returns whether we need to see previous button or not
public boolean getPrevRequired() {
return currentPage > 1;
}
// Returns whether we need to see next button or not
21
Visualforce タグを使用した検索ページの作成
検索項目を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
public boolean getNextRequired() {
return currentPage * PAGE_NUMBER < maxSize;
}
//Returns current page number
public Decimal getCurrentPageNumber() {
return this.currentPage;
}
//action for next click
public PageReference next() {
if(maxSize > this.currentPage * PAGE_NUMBER) {
this.currentPage = this.currentPage + 1;
}
return null;
}
//action for previous click
public PageReference previous() {
if(this.currentPage > 1)
this.currentPage = this.currentPage - 1;
return null;
}
}
次のコードフラグメントで、検索キーワードが設定および取得されます。
public String searchstring { get; set; }
これまでの作業を確認する
[Visualforce Article Search (Visualforce 記事検索)] ページの記事リストの上に検索項目が表示されます。
22
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページ
に追加する
検索項目に加えて、ユーザが店舗、国、またはファッションで検索結果を絞り込むことができるように、記事
リストを絞り込むデータカテゴリを表示します。
検索条件を Visualforce ページに追加する場合、データカテゴリをリスト、取得、および挿入するメソッドを設
定する必要があります。また、適切なメソッドをコールしてページを処理する新しいコントローラを追加する
必要もあります。
1. [設定] で、[開発] > [Apex クラス] をクリックします。
2. 次のコードサンプルを追加します。
a. データカテゴリ情報のコードサンプル
b. データカテゴリグループ情報のコードサンプル
c. データカテゴリユーティリティのコードサンプル
d. Visualforce 検索コントローラのコードサンプル
3. [Visualforce Article Search (Visualforce 記事検索)] タブの下部にあるフッターで、[ArticleList] をクリックして Visualforce
開発モードのページエディタを表示します。
4. Visualforce 開発モードのページエディタで既存のマークアップをすべて削除し、Visualforce 検索のコードサン
プル (ページ 32)のマークアップに置き換えます。
5. [保存] (
) をクリックします。
23
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
データカテゴリ情報のコードサンプル
/**
* This class holds the Data Category Info. from
* the describe result
*/
public class DataCategoryInfo {
private String name;
private String label;
private String displayName;
public DataCategoryInfo(String name, String label, String displayName) {
this.name = name;
this.label = label;
this.displayName = displayName;
}
public String getName() {
return this.name;
}
public String getLabel() {
return this.label;
}
public String getDisplayName() {
return this.displayName;
}
}
データカテゴリ情報のテスト
次に、データカテゴリ情報のコードサンプル (ページ 24)のテストクラスを示します。
@isTest
private class DataCategoryInfoTestClass {
static testMethod void validateDataCategoryInfoObject() {
DataCategoryInfo dataCategoryInfo = new DataCategoryInfo('Products__c', 'Products__c',
'Products');
System.assertEquals('Products__c',dataCategoryInfo.getName());
System.assertEquals('Products__c',dataCategoryInfo.getLabel());
System.assertEquals('Products',dataCategoryInfo.getDisplayName());
}
}
データカテゴリグループ情報のコードサンプル
/**
* This class holds the Data Category Group Info.
* from the describe result
24
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
*/
public class DataCategoryGroupInfo {
private
private
private
private
String name;
String label;
String description;
DataCategoryInfo[] groupStructure;
public DataCategoryGroupInfo (String name, String label, String description,
DataCategoryInfo[] structure) {
this.name = name;
this.label = label;
this.description = description;
this.groupStructure = structure;
}
public String getName(){
return this.name;
}
public String getLabel(){
return this.label;
}
public String getDescription(){
return this.description;
}
public DataCategoryInfo[] getGroupStructure(){
return this.groupStructure;
}
}
データカテゴリグループ情報のテスト
次に、データカテゴリグループ情報のコードサンプル (ページ 24)のテストクラスを示します。
@isTest
private class DataCategoryGroupInfoTestClass {
static testMethod void validateDataCategoryGroupInfoObject(){
DataCategoryInfo[] structure = new DataCategoryInfo[1];
structure[0] = new DataCategoryInfo('Product','Product__c','Product__c');
DataCategoryGroupInfo dataCategoryGroupInfo = new
DataCategoryGroupInfo('Product','Product__c','Test DataCategoryInfoClass',structure);
System.assertEquals('Product', dataCategoryGroupInfo.getName());
System.assertEquals('Product__c', dataCategoryGroupInfo.getLabel());
System.assertEquals('Test DataCategoryInfoClass', dataCategoryGroupInfo.getDescription());
System.assertEquals(structure.size(),dataCategoryGroupInfo.getGroupStructure().size());
25
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
}
}
データカテゴリユーティリティのコードサンプル
/**
* This class contains utility functions used by
* the controller
*/
public with sharing class DataCategoryUtil {
private static final DataCategoryUtil INSTANCE = new DataCategoryUtil();
private static final String NON_BREAKING_SPACE = '&nbsp;&nbsp;';
private final String ARTICLE_TYPE = 'KnowledgeArticleVersion';
private DataCategoryUtil() { }
public static DataCategoryUtil getInstance() { return INSTANCE; }
/**
* Retrieves a List of DataCategoryGroupInfo of all the data category
* groups associated with Knowledge Article Version
*/
public DataCategoryGroupInfo[] getAllCategoryGroups() {
Describedatacategorygroupresult[] results = getDescribeDataCategoryGroupResults();
DataCategoryGroupInfo[] dataCategoryGroups = new DataCategoryGroupInfo[] { };
for (Describedatacategorygroupresult singleResult : results) {
dataCategoryGroups.add(
new DataCategoryGroupInfo(singleResult.getName(), singleResult.getLabel(),
singleResult.getDescription(), getCategoryStructure(singleResult.getName())));
}
return dataCategoryGroups;
}
private Describedatacategorygroupresult[] getDescribeDataCategoryGroupResults() {
String[] objTypes = new String[] {ARTICLE_TYPE};
return Schema.describeDataCategoryGroups(objTypes);
}
/**
* Retrieves an ordered list of all Categories for the specified category group
*/
private DataCategoryInfo[] getCategoryStructure(String categoryGroupName) {
DataCategory root = getRootCategory(categoryGroupName);
DataCategory[] yetToBeProcessed = root.getChildCategories();
DataCategoryInfo[] allCategories = new DataCategoryInfo[] { processCategory(root, '')
};
getAllCategories(yetToBeProcessed, allCategories, NON_BREAKING_SPACE);
return allCategories;
}
private void getAllCategories(DataCategory[] yetToBeProcessed, DataCategoryInfo[] processed,
26
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
String labelPrefix) {
for (DataCategory category : yetToBeProcessed) {
processed.add(processCategory(category, labelPrefix));
getAllCategories(category.getChildCategories(), processed, labelPrefix +
NON_BREAKING_SPACE);
}
}
private DataCategoryInfo processCategory(DataCategory category, String labelPrefix) {
return new DataCategoryInfo(category.getName(), category.getLabel(), labelPrefix +
category.getLabel());
}
private DataCategory getRootCategory(String categoryGroupName) {
Describedatacategorygroupstructureresult structureResult =
getDescribeDataCategoryGroupStructureResults(categoryGroupName);
return structureResult.getTopCategories()[0];
}
private Describedatacategorygroupstructureresult
getDescribeDataCategoryGroupStructureResults(String categoryGroupName) {
Datacategorygroupsobjecttypepair pair = new Datacategorygroupsobjecttypepair();
pair.setSobject(ARTICLE_TYPE);
pair.setDataCategoryGroupName(categoryGroupName);
return Schema.describeDataCategoryGroupStructures(new Datacategorygroupsobjecttypepair[]
{ pair }, false)[0];
}
}
データカテゴリユーティリティのテスト
次に、データカテゴリユーティリティのコードサンプル (ページ 26)のテストクラスを示します。
@isTest
private class DataCategoryUtilTestClass {
static testMethod void validateCategoryGroups(){
String[] objTypes = new String[] { 'KnowledgeArticleVersion' };
Describedatacategorygroupresult[] datacategorygroupresult =
Schema.describeDataCategoryGroups(objTypes);
DataCategoryGroupInfo[] dataCategoryGroupInfo =
DataCategoryUtil.getInstance().getAllCategoryGroups();
System.assertEquals(datacategorygroupresult.size(),dataCategoryGroupInfo.size());
}
static testMethod void validateCategoryGroupsResults(){
DataCategoryGroupInfo[] dataCategoryGroupInfo =
DataCategoryUtil.getInstance().getAllCategoryGroups();
String[] objTypes = new String[] { 'KnowledgeArticleVersion' };
Describedatacategorygroupresult[] datacategorygroupresult =
Schema.describeDataCategoryGroups(objTypes);
for(Integer i=0;i< dataCategoryGroupInfo.size(); i++) {
27
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
System.assertEquals(dataCategoryGroupInfo[i].getName(),datacategorygroupresult[i].getName());
System.assertEquals(dataCategoryGroupInfo[i].getLabel(),datacategorygroupresult[i].getLabel());
System.assertEquals(dataCategoryGroupInfo[i].getDescription(),datacategorygroupresult[i].getDescription());
}
}
}
Visualforce 検索コントローラのコードサンプル
太字の行については、コードサンプルの後に説明があります。
/**
* Controller for Visual force Page.
* author SFDC
*/
public with sharing class VfSearchController{
//Page Size
private Static Final Integer PAGE_NUMBER = 10;
//Search String used in ArticleList tag
public String searchstring { get; set; }
//Is new List reqd
private boolean isRefRequired = true;
//Exclude filter criteria for UI only
private static final String EXCLUDE_CRITERIA_FILTER
= 'All';
//Keeps track of current page & max size of article list
Integer currentPage = 1;
Integer maxSize = 1;
//Returns array of Category Groups
public DataCategoryGroupInfo[] getDataCategoryGroupInfo() {
return DataCategoryUtil.getInstance().getAllCategoryGroups();
}
//Returns category keyword required to filter articleList.
public String getCategoryKeyword() {
DataCategoryGroupInfo[] categoryGroups =
DataCategoryUtil.getInstance().getAllCategoryGroups();
String categoryCondition = '';
for (DataCategoryGroupInfo categoryGroup : categoryGroups) {
String selectedCategoryName =
System.currentPageReference().getParameters().Get('categoryType_'+categoryGroup.getName());
if(selectedCategoryName != null && !selectedCategoryName.equals('NoFilter')) {
if(categoryCondition=='' && selectedCategoryName != null){
28
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
categoryCondition=categoryCondition+categoryGroup.getName() + ':' +
System.currentPageReference().getParameters().Get('categoryType_'+categoryGroup.getName());
}else {
categoryCondition=categoryCondition + ',' +categoryGroup.getName() + ':' +
System.currentPageReference().getParameters().Get('categoryType_'+categoryGroup.getName());
}
}
}
String categoryFilter = '';
for (DataCategoryGroupInfo categoryGroup : categoryGroups) {
String categoryType =
System.currentPageReference().getParameters().Get('categoryType_'+categoryGroup.getName());
if(categoryType != null && !categoryType.equals('NoFilter')) {
if(categoryFilter == ''){
categoryFilter = categoryGroup.getName() + '__c ABOVE_OR_BELOW ' + categoryType
+'__c';
} else {
categoryFilter = categoryFilter + ' AND ' + categoryGroup.getName() +'__c ABOVE_OR_BELOW
' + categoryType +'__c';
}
}
}
try {
if(categoryFilter.length()>0) {
if(searchString != null && searchString.length() >0 ) {
String searchquery = 'FIND \'' + searchString + '*\'IN ALL FIELDS RETURNING
KnowledgeArticleVersion(Id, title, UrlName, LastPublishedDate,LastModifiedById where
PublishStatus =\'online\' and Language = \'en_US\') WITH DATA CATEGORY '+categoryFilter ;
List<List<SObject>>searchList = search.query(searchquery);
List<KnowledgeArticleVersion> articleList =
(List<KnowledgeArticleVersion>)searchList[0];
maxSize = articleList.size() ;
//
maxSize = maxSize.divide(PAGE_NUMBER,2,System.RoundingMode.UP);
} else {
String qryString = 'SELECT Id, title, UrlName, LastPublishedDate,LastModifiedById FROM
KnowledgeArticleVersion WHERE (PublishStatus = \'online\' and Language = \'en_US\') WITH
DATA CATEGORY '+categoryFilter;
List<KnowledgeArticleVersion> articleList= Database.query(qryString);
maxSize = articleList.size() ;
//
maxSize = maxSize.divide(PAGE_NUMBER,2,System.RoundingMode.UP);
}
} else {
String qryString = 'SELECT Id, title, UrlName, LastPublishedDate,LastModifiedById FROM
KnowledgeArticleVersion WHERE (PublishStatus = \'online\' and Language = \'en_US\')';
List<KnowledgeArticleVersion> articleList= Database.query(qryString);
maxSize = articleList.size() ;
//
maxSize = maxSize.divide(PAGE_NUMBER,2,System.RoundingMode.UP);
}
} catch(Exception e) {
Apexpages.addmessages( e );
29
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
}
if(categoryFilter =='') {
//
maxSize = 0;
categoryCondition = 'Fashions:All,Stores:All,Products:All' ;
}
return categoryCondition;
}
// Action call when the new list needs to be fetched
public PageReference refreshSearchResult() {
maxSize = currentPage = 1;
return null;
}
// Returns whether we need to see previous button or not
public boolean getPrevRequired() {
return currentPage > 1;
}
// Returns whether we need to see next button or not
public boolean getNextRequired() {
return currentPage * PAGE_NUMBER < maxSize;
}
//Returns current page number
public Decimal getCurrentPageNumber() {
return this.currentPage;
}
//action for next click
public PageReference next() {
if(maxSize > this.currentPage * PAGE_NUMBER) {
this.currentPage = this.currentPage + 1;
}
return null;
}
//action for previous
public PageReference
if(this.currentPage
this.currentPage =
return null;
}
click
previous() {
> 1)
this.currentPage - 1;
}
次のコードフラグメントでは、検索条件で選択したカテゴリを取得します。
public String getCategoryKeyword() {
DataCategoryGroupInfo[] categoryGroups =
DataCategoryUtil.getInstance().getAllCategoryGroups();
String categoryCondition = '';
for (DataCategoryGroupInfo categoryGroup : categoryGroups) {
String selectedCategoryName =
System.currentPageReference().getParameters().Get('categoryType_'+categoryGroup.getName());
30
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
if(selectedCategoryName != null && !selectedCategoryName.equals('NoFilter')) {
if(categoryCondition=='' && selectedCategoryName != null){
categoryCondition=categoryCondition+categoryGroup.getName() + ':' +
System.currentPageReference().getParameters().Get('categoryType_'+categoryGroup.getName());
}else {
categoryCondition=categoryCondition + ',' +categoryGroup.getName() + ':' +
System.currentPageReference().getParameters().Get('categoryType_'+categoryGroup.getName());
}
}
}
Visualforce 検索コントローラのテスト
次に、Visualforce検索コントローラのコードサンプル (ページ 28)のテストクラスを示します。
@isTest
private class VfSearchControllerTestClass {
static testMethod void validateDataCategoryGroupInfo(){
DataCategoryGroupInfo[] dataCategoryGroupInfo =
DataCategoryUtil.getInstance().getAllCategoryGroups();
VfSearchController vfSearchControllerObj = new VfSearchController();
System.assertEquals(vfSearchControllerObj.getDataCategoryGroupInfo().size(),
dataCategoryGroupInfo.size());
}
static testMethod void testClassVariables() {
VfSearchController vfSearchControllerObj = new VfSearchController();
vfSearchControllerObj.refreshSearchResult();
System.assertEquals(vfSearchControllerObj.getCurrentPageNumber(),1.0);
vfSearchControllerObj.next();
System.assertEquals(vfSearchControllerObj.getCurrentPageNumber(),1.0);
vfSearchControllerObj.previous();
System.assertEquals(vfSearchControllerObj.getCurrentPageNumber(),1.0);
System.assertEquals(vfSearchControllerObj.getPrevRequired(),false);
System.assertEquals(vfSearchControllerObj.getNextRequired(),false);
}
static testMethod void validateCategoryKeyword() {
VfSearchController vfSearchControllerObj = new VfSearchController();
DataCategoryGroupInfo[] categoryGroups =
DataCategoryUtil.getInstance().getAllCategoryGroups();
String categoryCondition = '';
for (DataCategoryGroupInfo categoryGroup : categoryGroups) {
ApexPages.currentPage().getParameters().put('categoryType_'+categoryGroup.getName(),'All');
if(categoryCondition==''){
categoryCondition=categoryCondition+categoryGroup.getName() + ':' +
31
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
System.currentPageReference().getParameters().Get('categoryType_'+categoryGroup.getName());
}else {
categoryCondition=categoryCondition + ',' +categoryGroup.getName() + ':' +
System.currentPageReference().getParameters().Get('categoryType_'+categoryGroup.getName());
}
}
System.assertEquals(categoryCondition, vfSearchControllerObj.getCategoryKeyword());
}
}
Visualforce 検索のコードサンプル
太字の行については、コードサンプルの後に説明があります。
<apex:page controller="VfSearchController" sidebar="false" title="Knowledge Search">
<style>
td{
vertical-align : top;
text-align: left;
}
</style>
<apex:form >
<apex:panelGrid columns="2" >
<apex:panelGroup >
<apex:pageBlock >
<apex:outputText value="Filter Your Results" />
<apex:pageBlockSection columns="1">
<apex:dataTable value="{!dataCategoryGroupInfo}" var="dataCategory" id="dataCategory">
<apex:column width="20%">
<apex:outputLabel
for="categoryType_{!dataCategory.name}">{!dataCategory.name}</apex:outputLabel>
<br />
<select id="categoryType_{!dataCategory.name}"
name="categoryType_{!dataCategory.name}" onchange = "refreshSearchResult()" >
<option value="NoFilter">No Filter</option>
<option value="All">All</option>
<knowledge:categoryList categoryVar="category" categoryGroup="{!dataCategory.name}"
rootCategory="All" level="-1">
<option value="{!category.name}">
<apex:outputText escape="false" value="{!LPAD(' ',6*category.depth,'&nbsp;')}"
/>
{!category.label}
</option>
</knowledge:categoryList>
</select>
</apex:column>
</apex:dataTable>
</apex:pageBlockSection>
</apex:pageBlock>
32
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
</apex:panelGroup>
<apex:panelGroup >
<apex:pageBlock title="Search" >
<apex:inputText value="{!searchstring}" id="theSearchstring" maxlength="100" size="110"
onkeypress="if (event.keyCode == 13) {refreshSearchResult();return false;} "/> &nbsp;
<apex:commandButton value="Go" id="submitButton" style="width:30"
reRender="theSearchResults" />
</apex:pageBlock>
<apex:messages />
<apex:panelGroup id="theSearchResults" >
<apex:pageBlock title="Search Results" >
<apex:panelGrid width="100%">
<table width="99%">
<tr>
<th width="33%">Title</th>
<th width="33%">Article Type</th>
<th width="33%">Summary</th>
</tr>
</table>
<knowledge:articleList articleVar="article" categories="{!categoryKeyword}"
Keyword="{!searchstring}" pageNumber="{!currentPageNumber}" hasMoreVar="false" pageSize="10">
<table width="99%">
<tr>
<td width="33%">
<apex:outputLink target="_blank" value="{!URLFOR($Action.KnowledgeArticle.View,
article.id,['popup' = 'true'])}">{!article.title}</apex:outputLink>
</td>
<td width="33%"><apex:outputText >{!article.articleTypeLabel}</apex:outputText></td>
<td width="33%"><apex:outputText >{!article.abstract}</apex:outputText></td>
</tr>
</table>
</knowledge:articleList>
</apex:panelGrid>
</apex:pageBlock>
<apex:panelGrid columns="2">
<apex:commandLink action="{!previous}" value="Previous" style="{!IF(prevRequired =
true,'display:block','display:none')}" reRender="theSearchResults"/>
<apex:commandLink action="{!next}" value="Next" style="{!IF(nextRequired =
true,'display:block','display:none')}" reRender="theSearchResults"/>
</apex:panelGrid>
</apex:panelGroup>
</apex:panelGroup>
</apex:panelGrid>
<apex:actionFunction action="{!refreshSearchResult}" name="refreshSearchResult"
rerender="theSearchResults" >
</apex:actionFunction>
</apex:form>
</apex:page>
33
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検
索)] ページに追加する
次のコードフラグメントでは、<apex:dataTable> タグで、(Visualforce検索コントローラのコードサンプルで
宣言した) getdataCategoryGroupInfo メソッドを使用して、各カテゴリグループを反復処理します。
<apex:dataTable value="{!dataCategoryGroupInfo}" var="dataCategory" id="dataCategory">
<apex:column width="20%">
<apex:outputLabel
for="categoryType_{!dataCategory.name}">{!dataCategory.name}</apex:outputLabel>
<br />
次のコードフラグメントでは、<select> タグで、カテゴリ検索条件を作成します。onchange 属性とその
refreshSearchResult 値で、ユーザが検索条件の選択内容を変更するたびに記事リストを更新します。
<select id="categoryType_{!dataCategory.name}" name="categoryType_{!dataCategory.name}"
onchange = "refreshSearchResult()" >
<option value="NoFilter">No Filter</option>
<option value="All">All</option>
次のコードフラグメントでは、knowledge:categoryList タグで、カテゴリグループの [All (すべて)] の下に
あるすべてのカテゴリのループを実行します。
<knowledge:categoryList categoryVar="category" categoryGroup="{!dataCategory.name}"
rootCategory="All" level="-1">
<option value="{!category.name}">
<apex:outputText escape="false" value="{!LPAD(' ',6*category.depth,'&nbsp;')}" />
{!category.label}
</option>
</knowledge:categoryList>
</select>
</apex:column>
</apex:dataTable>
次のコードフラグメントでは、ページを更新する必要がある場合に (Visualforce 検索コントローラのコードサン
プルの) refreshSearchResult メソッドをコールします。[Visualforce Article Search (Visualforce 記事検索)] ページ
の [Search Results (検索結果)] セクションのみが更新されます。
<apex:actionFunction action="{!refreshSearchResult}" name="refreshSearchResult"
rerender="theSearchResults" >
これまでの作業を確認する
[Visualforce Article Search (Visualforce 記事検索)] ページに、[結果を絞り込み] ボックスが表示されます。検索条件の
選択内容を変更すると、[Search Results (検索結果)] ボックスが更新されます。選択したカテゴリに一致する記事
のみが表示されます。
34
Visualforce タグを使用した検索ページの作成
[Last Updated Promotions (最後に更新されたプロモーショ
ン)] ボックスを [Visualforce Article Search (Visualforce 記事
検索ページ)] に追加する
[Last Updated Promotions (最後に更新されたプロモーション)] ボッ
クスを [Visualforce Article Search (Visualforce 記事検索ページ)] に追
加する
最後に、[Last Updated Promotions (最後に更新されたプロモーション)] ボックスを追加します。
1. [Visualforce Article Search (Visualforce 記事検索)] タブの下部にあるフッターで、[ArticleList] をクリックして Visualforce
開発モードのページエディタを表示します。
2. Visualforce 開発モードのページエディタで既存のマークアップをすべて削除し、「Visualforce ボックスのコー
ドサンプル」 (ページ 35)に表示されているマークアップに置き換えます。
3. [保存] (
) をクリックします。
Visualforce ボックスのコードサンプル
太字の行については、コードサンプルの後に説明があります。
<apex:page controller="VfSearchController" sidebar="false" title="Knowledge Search">
<style>
td{
vertical-align : top;
35
Visualforce タグを使用した検索ページの作成
[Last Updated Promotions (最後に更新されたプロモーショ
ン)] ボックスを [Visualforce Article Search (Visualforce 記事
検索ページ)] に追加する
text-align: left;
}
</style>
<apex:form >
<apex:panelGrid columns="2" >
<apex:panelGroup >
<apex:pageBlock >
<apex:outputText value="Filter Your Results" />
<apex:pageBlockSection columns="1">
<apex:dataTable value="{!dataCategoryGroupInfo}" var="dataCategory" id="dataCategory">
<apex:column width="20%">
<apex:outputLabel
for="categoryType_{!dataCategory.name}">{!dataCategory.name}</apex:outputLabel>
<br />
<select id="categoryType_{!dataCategory.name}"
name="categoryType_{!dataCategory.name}" onchange = "refreshSearchResult()" >
<option value="NoFilter">No Filter</option>
<option value="All">All</option>
<knowledge:categoryList categoryVar="category" categoryGroup="{!dataCategory.name}"
rootCategory="All" level="-1">
<option value="{!category.name}">
<apex:outputText escape="false" value="{!LPAD(' ',6*category.depth,'&nbsp;')}"
/>
{!category.label}
</option>
</knowledge:categoryList>
</select>
</apex:column>
</apex:dataTable>
</apex:pageBlockSection>
</apex:pageBlock>
<apex:pageBlock >
<apex:outputText value="Last Updated Promotions" />
<apex:pageBlockSection columns="1">
<knowledge:articleList articleVar="article" articleTypes="Promotion__kav" pageSize="10"
>
<li>
<apex:outputLink target="_blank" value="{!URLFOR($Action.KnowledgeArticle.View,
article.id, ['popup' = 'true'])}">{!article.title}</apex:outputLink>
</li>
</knowledge:articleList>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:panelGroup>
<apex:panelGroup >
<apex:pageBlock title="Search" >
<apex:inputText value="{!searchstring}" id="theSearchstring" maxlength="100" size="110"
onkeypress="if (event.keyCode == 13) {refreshSearchResult();return false;} "/> &nbsp;
<apex:commandButton value="Go" id="submitButton" style="width:30"
reRender="theSearchResults" />
</apex:pageBlock>
<apex:messages />
<apex:panelGroup id="theSearchResults" >
36
Visualforce タグを使用した検索ページの作成
[Last Updated Promotions (最後に更新されたプロモーショ
ン)] ボックスを [Visualforce Article Search (Visualforce 記事
検索ページ)] に追加する
<apex:pageBlock title="Search Results" >
<apex:panelGrid width="100%">
<table width="99%">
<tr>
<th width="33%">Title</th>
<th width="33%">Article Type</th>
<th width="33%">Summary</th>
</tr>
</table>
<knowledge:articleList articleVar="article" categories="{!categoryKeyword}"
Keyword="{!searchstring}" pageNumber="{!currentPageNumber}" hasMoreVar="false" pageSize="10">
<table width="99%">
<tr>
<td width="33%">
<apex:outputLink target="_blank" value="{!URLFOR($Action.KnowledgeArticle.View,
article.id,['popup' = 'true'])}">{!article.title}</apex:outputLink>
</td>
<td width="33%"><apex:outputText >{!article.articleTypeLabel}</apex:outputText></td>
<td width="33%"><apex:outputText >{!article.abstract}</apex:outputText></td>
</tr>
</table>
</knowledge:articleList>
</apex:panelGrid>
</apex:pageBlock>
<apex:panelGrid columns="2">
<apex:commandLink action="{!previous}" value="Previous" style="{!IF(prevRequired =
true,'display:block','display:none')}" reRender="theSearchResults"/>
<apex:commandLink action="{!next}" value="Next" style="{!IF(nextRequired =
true,'display:block','display:none')}" reRender="theSearchResults"/>
</apex:panelGrid>
</apex:panelGroup>
</apex:panelGroup>
</apex:panelGrid>
<apex:actionFunction action="{!refreshSearchResult}" name="refreshSearchResult"
rerender="theSearchResults" >
</apex:actionFunction>
</apex:form>
</apex:page>
次のコードフラグメントでは、<knowledge:articleList> タグで、最後に公開された記事をデフォルトで
取得します。articleTypes 属性では、プロモーション記事のみを [Last Updated Promotions (最後に
更新されたプロモーション)] ボックスに表示するように指定します。
<apex:outputText value="Last Updated Promotions" />
<apex:pageBlockSection columns="1">
<knowledge:articleList articleVar="article" articleTypes="Promotion__kav" pageSize="10"
>
<li>
<apex:outputLink target="_blank" value="{!URLFOR($Action.KnowledgeArticle.View, article.id,
['popup' = 'true'])}">{!article.title}</apex:outputLink>
37
Visualforce タグを使用した検索ページの作成
[Last Updated Promotions (最後に更新されたプロモーショ
ン)] ボックスを [Visualforce Article Search (Visualforce 記事
検索ページ)] に追加する
</li>
</knowledge:articleList>
これまでの作業を確認する
[Visualforce Article Search (Visualforce 記事検索)] ページの左ペインに [Last Updated Promotions (最後に更新されたプロ
モーション)] ボックスが表示されています。このボックスには、新しいプロモーションまたは最近更新された
プロモーションが表示されます。
38
第4章
トピック:
•
•
PublishingService ク
ラス
記事のマスタバー
ジョンをアーカイ
ブする
•
翻訳に関連するタ
スクを割り当てる
•
マスタ記事に関連
するタスクを割り
当てる
•
記事のマスタバー
ジョンを削除する
•
記事の翻訳バー
ジョンを削除する
•
マスタ記事のオン
ラインバージョン
を編集する
•
記事のマスタバー
ジョンを公開する
•
記事のアーカイブ
バージョンを復元
する
•
記事のメタデータ
を取得する
•
記事のバージョン
を取得する
•
マスタバージョン
のメタデータ要素
を検索する
•
翻訳バージョンの
メタデータ要素を
検索する
•
翻訳記事のバー
ジョンを完了に設
定する
•
翻訳記事のバー
ジョンを未完了に
設定する
Apex および REST API を使用した記事の
管理
Apex または REST API を使用した記事の管理
このセクションでは、記事や記事翻訳で実行可能な多くの主要なアクション (下記参
照) にプログラムでアクセスできるようにする API について説明します。
• 公開
• 更新
• 取得
• 削除
• 翻訳の申請
• 翻訳を完了または未完了の状況に設定
この章の最初のトピックでは、Apex ナレッジ管理公開サービスクラスについて説明
します。その後のトピックでは、REST API を使用して実行できる公開アクションにつ
いて説明します。
Apex を使用して記事を管理する方法についての詳細は、『Force.com Apex コード開発
者ガイド』を参照してください。REST を使用して記事を管理する方法についての詳
細は、『Force.com REST API 開発者ガイド』を参照してください。
39
Apex および REST API を使用した記事の管理
•
記事の翻訳を申請
する
•
記事のマスタバー
ジョンを非公開に
する
•
翻訳記事のオンラ
インバージョンを
非公開にする
•
Salesforce Object
Query Language を
使用して参照統計
を更新する
•
Salesforce Object
Search Language を
使用して検索キー
ワードを追跡する
•
Salesforce Object
Search Language を
使用して記事の参
照統計を更新する
40
Apex および REST API を使用した記事の管理
PublishingService クラス
PublishingService クラス
KbManagement.PublishingService クラスのメソッドを使用して、記事とその翻訳のライフサイクルを管
理します。
名前空間
KbManagement
使用方法
記事とその翻訳のライフサイクルで次の部分を管理するには、KbManagement.PublishingService クラス
のメソッドを使用します。
• 公開
• 更新
• 取得
• 削除
• 翻訳の申請
• 翻訳を完了または未完了の状況に設定
• アーカイブ
• ドラフト記事または翻訳のレビュータスクの割り当て
メモ: 日付値は、GMT に基づきます。
このクラスのメソッドを使用するには、Salesforce ナレッジを有効にする必要があります。Salesforce ナレッジの
設定についての詳細は、『Salesforce Knowledge Implementation Guide』を参照してください。
このセクションの内容:
PublishingService メソッド
PublishingService メソッド
PublishingService のメソッドは次のとおりです。すべてのメソッドが静的です。
このセクションの内容:
archiveOnlineArticle(String, Datetime)
記事のオンラインバージョンをアーカイブします。指定された scheduledDate が null の場合、記事は即時に
アーカイブされます。それ以外の場合、記事は予定日にアーカイブされます。
assignDraftArticleTask(String, String, String, Datetime, Boolean)
ドラフト記事に関連するレビュータスクを割り当てます。
41
Apex および REST API を使用した記事の管理
PublishingService メソッド
assignDraftTranslationTask(String, String, String, Datetime, Boolean)
ドラフト翻訳に関連するレビュータスクを割り当てます。
cancelScheduledArchivingOfArticle(String)
スケジュールされたオンライン記事のアーカイブをキャンセルします。
cancelScheduledPublicationOfArticle(String)
スケジュールされたドラフト記事の公開をキャンセルします。
completeTranslation(String)
翻訳を完了状態 (公開準備完了) にします。
deleteArchivedArticle(String)
アーカイブされた記事を削除します。
deleteArchivedArticleVersion(String, Integer)
アーカイブされた記事の特定のバージョンを削除します。
deleteDraftArticle(String)
ドラフト記事を削除します。
deleteDraftTranslation(String)
ドラフト翻訳を削除します。
editArchivedArticle(String)
アーカイブされたマスタバージョンからドラフト記事を作成し、記事の新しいドラフトマスタバージョン
ID を返します。
editOnlineArticle(String, Boolean)
オンラインバージョンからドラフト記事を作成し、記事の新しいドラフトマスタバージョン ID を返しま
す。さらに、unpublish が true に設定されている場合は、オンライン記事の公開を解除します。
editPublishedTranslation(String, String, Boolean)
特定の言語のオンライン翻訳のドラフトバージョンを作成し、記事の新しいドラフトマスタバージョン ID
を返します。さらに、true に設定されている場合は、記事の公開を解除します。
publishArticle(String, Boolean)
記事を公開します。flagAsNew が true に設定されている場合は、記事をメジャーバージョンとして公開
します。
restoreOldVersion(String, Integer)
既存のオンライン記事の指定されたアーカイブバージョンに基づいて、その記事からドラフト記事を作成
し、記事のバージョン ID を返します。
scheduleForPublication(String, Datetime)
メジャーバージョンとして記事の公開をスケジュールします。指定された日付が null の場合、記事は即時
に公開されます。
setTranslationToIncomplete(String)
公開準備完了のドラフト翻訳を「処理中」状況に戻します。
submitForTranslation(String, String, String, Datetime)
指定された言語への記事の翻訳を申請します。さらに、指定されたユーザと期日も申請に割り当て、ドラ
フト翻訳の新しい ID を返します。
42
Apex および REST API を使用した記事の管理
PublishingService メソッド
archiveOnlineArticle(String, Datetime)
記事のオンラインバージョンをアーカイブします。指定された scheduledDate が null の場合、記事は即時にアー
カイブされます。それ以外の場合、記事は予定日にアーカイブされます。
署名
public static Void archiveOnlineArticle(String articleId, Datetime scheduledDate)
パラメータ
articleId
型: String
scheduledDate
型: Datetime
戻り値
型: Void
例
String articleId = 'Insert article ID';
Datetime scheduledDate = Datetime.newInstanceGmt(2012, 12,1,13,30,0);
KbManagement.PublishingService.archiveOnlineArticle(articleId, scheduledDate);
assignDraftArticleTask(String, String, String, Datetime, Boolean)
ドラフト記事に関連するレビュータスクを割り当てます。
署名
public static Void assignDraftArticleTask(String articleId, String assigneeID, String
instructions, Datetime dueDate, Boolean sendEmailNotification)
パラメータ
articleId
型: String
assigneeID
型: String
instructions
型: String
dueDate
型: Datetime
43
Apex および REST API を使用した記事の管理
PublishingService メソッド
sendEmailNotification
型: Boolean
戻り値
型: Void
例
String articleId = 'Insert article ID';
String assigneeId = '';
String instructions = 'Please review this draft.';
Datetime dueDate = Datetime.newInstanceGmt(2012, 12,1);
KbManagement.PublishingService.assignDraftArticleTask(articleId, assigneeId, instructions,
dueDate, true);
assignDraftTranslationTask(String, String, String, Datetime, Boolean)
ドラフト翻訳に関連するレビュータスクを割り当てます。
署名
public static Void assignDraftTranslationTask(String articleVersionId, String assigneeID,
String instructions, Datetime dueDate, Boolean sendEmailNotification)
パラメータ
articleVersionId
型: String
assigneeID
型: String
instructions
型: String
dueDate
型: Datetime
sendEmailNotification
型: Boolean
戻り値
型: Void
例
String articleId = 'Insert article ID';
String assigneeId = 'Insert assignee ID';
44
Apex および REST API を使用した記事の管理
PublishingService メソッド
String instructions = 'Please review this draft.';
Datetime dueDate = Datetime.newInstanceGmt(2012, 12,1);
KbManagement.PublishingService.assignDraftTranslationTask(articleId, assigneeId,
instructions, dueDate, true);
cancelScheduledArchivingOfArticle(String)
スケジュールされたオンライン記事のアーカイブをキャンセルします。
署名
public static Void cancelScheduledArchivingOfArticle(String articleId)
パラメータ
articleId
型: String
戻り値
型: Void
例
String articleId = 'Insert article ID';
KbManagement.PublishingService.cancelScheduledArchivingOfArticle (articleId);
cancelScheduledPublicationOfArticle(String)
スケジュールされたドラフト記事の公開をキャンセルします。
署名
public static Void cancelScheduledPublicationOfArticle(String articleId)
パラメータ
articleId
型: String
戻り値
型: Void
45
Apex および REST API を使用した記事の管理
PublishingService メソッド
例
String articleId = 'Insert article ID';
KbManagement.PublishingService.cancelScheduledPublicationOfArticle (articleId);
completeTranslation(String)
翻訳を完了状態 (公開準備完了) にします。
署名
public static Void completeTranslation(String articleVersionId)
パラメータ
articleVersionId
型: String
戻り値
型: Void
例
String articleVersionId = 'Insert article ID';
KbManagement.PublishingService.completeTranslation(articleVersionId);
deleteArchivedArticle(String)
アーカイブされた記事を削除します。
署名
public static Void deleteArchivedArticle(String articleId)
パラメータ
articleId
型: String
戻り値
型: Void
46
Apex および REST API を使用した記事の管理
PublishingService メソッド
例
String articleId = 'Insert article ID';
KbManagement.PublishingService.deleteArchivedArticle(articleId);
deleteArchivedArticleVersion(String, Integer)
アーカイブされた記事の特定のバージョンを削除します。
署名
public static Void deleteArchivedArticleVersion(String articleId, Integer versionNumber)
パラメータ
articleId
型: String
versionNumber
型: Integer
戻り値
型: Void
例
String articleId = 'Insert article ID';
Integer versionNumber = 1;
KbManagement.PublishingService.deleteArchivedArticleVersion(articleId, versionNumber);
deleteDraftArticle(String)
ドラフト記事を削除します。
署名
public static Void deleteDraftArticle(String articleId)
パラメータ
articleId
型: String
戻り値
型: Void
47
Apex および REST API を使用した記事の管理
PublishingService メソッド
例
String articleId = 'Insert article ID';
KbManagement.PublishingService.deleteDraftArticle(articleId);
deleteDraftTranslation(String)
ドラフト翻訳を削除します。
署名
public static Void deleteDraftTranslation(String articleVersionId)
パラメータ
articleVersionId
型: String
戻り値
型: Void
例
String articleVersionId = 'Insert article ID';
KbManagement.PublishingService.deleteDraftTranslation (articleVersionId);
editArchivedArticle(String)
アーカイブされたマスタバージョンからドラフト記事を作成し、記事の新しいドラフトマスタバージョン ID
を返します。
署名
public static String editArchivedArticle(String articleId)
パラメータ
articleId
型: String
戻り値
型: String
48
Apex および REST API を使用した記事の管理
PublishingService メソッド
例
String articleId = 'Insert article ID';
String id = KbManagement.PublishingService.editArchivedArticle(articleId);
editOnlineArticle(String, Boolean)
オンラインバージョンからドラフト記事を作成し、記事の新しいドラフトマスタバージョン ID を返します。
さらに、unpublish が true に設定されている場合は、オンライン記事の公開を解除します。
署名
public static String editOnlineArticle(String articleId, Boolean unpublish)
パラメータ
articleId
型: String
unpublish
型: Boolean
戻り値
型: String
例
String articleId = 'Insert article ID';
String id = KbManagement.PublishingService.editOnlineArticle (articleId, true);
editPublishedTranslation(String, String, Boolean)
特定の言語のオンライン翻訳のドラフトバージョンを作成し、記事の新しいドラフトマスタバージョン ID を
返します。さらに、true に設定されている場合は、記事の公開を解除します。
署名
public static String editPublishedTranslation(String articleId, String language, Boolean
unpublish)
パラメータ
articleId
型: String
language
型: String
49
Apex および REST API を使用した記事の管理
PublishingService メソッド
unpublish
型: Boolean
戻り値
型: String
例
String articleId = 'Insert article ID';
String language = 'fr';
String id = KbManagement.PublishingService.editPublishedTranslation(articleId, language,
true);
publishArticle(String, Boolean)
記事を公開します。flagAsNew が true に設定されている場合は、記事をメジャーバージョンとして公開し
ます。
署名
public static Void publishArticle(String articleId, Boolean flagAsNew)
パラメータ
articleId
型: String
flagAsNew
型: Boolean
戻り値
型: Void
例
String articleId = 'Insert article ID';
KbManagement.PublishingService.publishArticle(articleId, true);
restoreOldVersion(String, Integer)
既存のオンライン記事の指定されたアーカイブバージョンに基づいて、その記事からドラフト記事を作成し、
記事のバージョン ID を返します。
署名
public static String restoreOldVersion(String articleId, Integer versionNumber)
50
Apex および REST API を使用した記事の管理
PublishingService メソッド
パラメータ
articleId
型: String
versionNumber
型: Integer
戻り値
型: String
例
String articleId = 'Insert article ID';
String id = KbManagement.PublishingService.restoreOldVersion (articleId, 1);
scheduleForPublication(String, Datetime)
メジャーバージョンとして記事の公開をスケジュールします。指定された日付が null の場合、記事は即時に公
開されます。
署名
public static Void scheduleForPublication(String articleId, Datetime scheduledDate)
パラメータ
articleId
型: String
scheduledDate
型: Datetime
戻り値
型: Void
例
String articleId = 'Insert article ID';
Datetime scheduledDate = Datetime.newInstanceGmt(2012, 12,1,13,30,0);
KbManagement.PublishingService.scheduleForPublication(articleId, scheduledDate);
setTranslationToIncomplete(String)
公開準備完了のドラフト翻訳を「処理中」状況に戻します。
51
Apex および REST API を使用した記事の管理
PublishingService メソッド
署名
public static Void setTranslationToIncomplete(String articleVersionId)
パラメータ
articleVersionId
型: String
戻り値
型: Void
例
String articleVersionId = 'Insert article ID';
KbManagement.PublishingService.setTranslationToIncomplete(articleVersionId);
submitForTranslation(String, String, String, Datetime)
指定された言語への記事の翻訳を申請します。さらに、指定されたユーザと期日も申請に割り当て、ドラフト
翻訳の新しい ID を返します。
署名
public static String submitForTranslation(String articleId, String language, String
assigneeID, Datetime dueDate)
パラメータ
articleId
型: String
language
型: String
assigneeID
型: String
dueDate
型: Datetime
戻り値
型: String
例
String articleId = 'Insert article ID';
String language = 'fr';
52
Apex および REST API を使用した記事の管理
記事のマスタバージョンをアーカイブする
String assigneeId = 'Insert assignee ID';
Datetime dueDate = Datetime.newInstanceGmt(2012, 12,1);
String id = KbManagement.PublishingService.submitForTranslation(articleId, language,
assigneeId, dueDate);
記事のマスタバージョンをアーカイブする
記事のマスタバージョンをアーカイブします。各アクションは、リソースで要求する項目変更によって定義さ
れます。マスタバージョンをアーカイブするには、"publishStatus":"Archived" を使用します。アーカ
イブの日付をスケジュールするには、"archiveScheduleDate" : <date> を使用します。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/masterVersions/<versionID>
形式
JSON、XML
HTTP メソッド
PATCH
認証
Authorization: OAuth accesstoken
パラメータ
パラメータ
説明
publishStatus
記事の公開の状況。archived を使用します。
archiveScheduleDate
記事をアーカイブする日付。
リクエストボディの例
アーカイブ:
{
"publishStatus":"Archived"
}
アーカイブのスケジュール (GMT 日付形式を使用):
{
"archiveScheduleDate" : "2012-04-19T07:00:00.000+0000"
}
レスポンスボディの例
既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。
53
Apex および REST API を使用した記事の管理
翻訳に関連するタスクを割り当てる
翻訳に関連するタスクを割り当てる
期日や説明を含む、翻訳記事のタスクをユーザに割り当てます。各アクションは、リソースで要求する項目変
更によって定義されます。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/translations/<translationVersionId>
形式
JSON、XML
HTTP メソッド
PATCH
認証
Authorization: OAuth accesstoken
パラメータ
パラメータ
説明
assigneeId
マスタ記事をユーザ ID に割り当てます。
dueDate
タスクの期日。
instruction
タスクに関する説明。
リクエストボディの例
{
"assigneeId":"05Dxx0000dsads"
"dueDate":"2012-04-19T07:00:00.000+0000"
"instruction":"Please review."
}
レスポンスボディの例
既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。
マスタ記事に関連するタスクを割り当てる
期日や説明を含む、マスタ記事のタスクをユーザに割り当てます。各アクションは、リソースで要求する項目
変更によって定義されます。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/masterVersions/<versionID>
形式
JSON、XML
HTTP メソッド
PATCH
54
Apex および REST API を使用した記事の管理
記事のマスタバージョンを削除する
認証
Authorization: OAuth accesstoken
パラメータ
パラメータ
説明
assigneeId
マスタ記事をユーザ ID に割り当てます。
dueDate
タスクの期日。
instruction
タスクに関する説明。
リクエストボディの例
{
"assigneeId":"05Dxx0000dsads"
"dueDate":"2012-04-19T07:00:00.000+0000"
"instruction":"Please review."
}
レスポンスボディの例
既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。
記事のマスタバージョンを削除する
記事のマスタバージョンを削除します。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/masterVersions/<versionID>
形式
JSON、XML
HTTP メソッド
DELETE
認証
Authorization: OAuth accesstoken
パラメータ
なし
リクエストボディの例
不要
レスポンスボディの例
既存のレコードが削除される場合、HTTP 状況コード 204 が返されます。
55
Apex および REST API を使用した記事の管理
記事の翻訳バージョンを削除する
記事の翻訳バージョンを削除する
記事の翻訳バージョンを削除します。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/translations/<versionID>
形式
JSON、XML
HTTP メソッド
DELETE
認証
Authorization: OAuth accesstoken
パラメータ
なし
リクエストボディの例
不要
レスポンスボディの例
既存のレコードが削除される場合、HTTP 状況コード 204 が返されます。
マスタ記事のオンラインバージョンを編集する
マスタ記事のオンラインバージョンのドラフトコピーを作成します。この操作でオンラインバージョンが非公
開になることはありません。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/masterVersions
形式
JSON、XML
HTTP メソッド
POST
認証
Authorization: OAuth accesstoken
パラメータ
パラメータ
説明
articleId
記事の ID。
56
Apex および REST API を使用した記事の管理
記事のマスタバージョンを公開する
リクエストボディの例
{
"articleId":<articleID>
}
記事のマスタバージョンを公開する
記事のマスタバージョンを公開します。公開の各アクションは、リソースで要求する項目変更によって定義さ
れます。マイナーバージョンを公開するには、"publishStatus":"Online" を使用します。メジャーバー
ジョンを公開するには、"publishStatus":"Online" および "versionNumber":"NextVersion" を使用
します。公開日をスケジュールするには、"publishScheduleDate" : <date> を使用します。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/masterVersions/<versionId>
形式
JSON、XML
HTTP メソッド
PATCH
認証
Authorization: OAuth accesstoken
パラメータ
パラメータ
説明
publishStatus
記事の公開の状況。online を使用します。
versionNumber
記事のバージョン。
publishScheduleDate
記事を公開する日付。
リクエストボディの例
マイナーバージョンの公開:
{
"publishStatus":"Online"
}
メジャーバージョンの公開:
{
"publishStatus":"Online"
"versionNumber":"NextVersion"
}
57
Apex および REST API を使用した記事の管理
記事のアーカイブバージョンを復元する
公開のスケジュール (GMT 日付形式を使用):
{
"publishScheduleDate" : "2012-05-19T07:00:00.000+0000"
}
レスポンスボディの例
既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。
記事のアーカイブバージョンを復元する
記事のアーカイブバージョンを復元します。versionNumber を指定しないと、アーカイブ済み記事の最新バー
ジョンが復元されます。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/masterVersions/
形式
JSON、XML
HTTP メソッド
POST
認証
Authorization: OAuth accesstoken
パラメータ
パラメータ
説明
articleId
記事の ID。
versionNumber
記事のバージョン。この項目を指定しないと、アーカイブ済み記事の
最新バージョンが復元されます。
リクエストボディの例
{
"articleId":<articleID>
("versionNumber":<number>)
}
記事のメタデータを取得する
記事のメタデータを取得します。
URI
/services/data/v25.0/knowledgeManagement/articles/<articleId>
58
Apex および REST API を使用した記事の管理
記事のバージョンを取得する
形式
JSON、XML
HTTP メソッド
GET
認証
Authorization: OAuth accesstoken
パラメータ
なし
リクエストボディの例
不要
記事のバージョンを取得する
記事のバージョン ID を取得します。
URI
/services/data/v25.0/knowledgeManagement/articleversions/masterVersions/<articleVersionId>
形式
JSON、XML
HTTP メソッド
GET
認証
Authorization: OAuth accesstoken
パラメータ
なし
リクエストボディの例
不要
マスタバージョンのメタデータ要素を検索する
記事のオンラインマスタバージョンのメタデータ要素を検索します。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/masterVersions?
filterArticleId=value1&FilterPublishStatus=value2
形式
JSON、XML
HTTP メソッド
GET
59
Apex および REST API を使用した記事の管理
翻訳バージョンのメタデータ要素を検索する
認証
Authorization: OAuth accesstoken
例
次の例では、マスタ記事「kA0x50000000jsh」のオンラインバージョンを検索します。
/services/data/v25.0/knowledgeManagement/articleVersions/masterVersions?
filterArticleId=kA0x50000000jsh&filterPublishStatus=online"
翻訳バージョンのメタデータ要素を検索する
記事の翻訳バージョンのメタデータ要素を検索します。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/translations?filterArticleId=value1&
filterLanguage=value2&FilterPublishStatus=value3";
形式
JSON、XML
HTTP メソッド
GET
認証
Authorization: OAuth accesstoken
例
次の例では、記事「kA0x50000000jsh」のドイツ語のオンライン翻訳を検索します。
/services/data/v25.0/knowledgeManagement/articleVersions/translations?filterArticleId=kA0x50000000jsh&
filterLanguage=de&filterPublishStatus=online"
翻訳記事のバージョンを完了に設定する
翻訳記事のバージョンを完了に設定します。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/translations/<translationVersionID>
形式
JSON、XML
HTTP メソッド
PATCH
認証
Authorization: OAuth accesstoken
60
Apex および REST API を使用した記事の管理
翻訳記事のバージョンを未完了に設定する
パラメータ
パラメータ
説明
complete
完了している翻訳に対して、この値を true に設定します。
リクエストボディの例
{
"complete":"true"
}
レスポンスボディの例
既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。
翻訳記事のバージョンを未完了に設定する
翻訳記事のバージョンを未完了に設定します。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/translations/<translationVersionID>
形式
JSON、XML
HTTP メソッド
PATCH
認証
Authorization: OAuth accesstoken
パラメータ
パラメータ
説明
complete
翻訳を未完了に設定するには、この値を false に設定します。
リクエストボディの例
{
"complete":"false"
}
レスポンスボディの例
既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。
61
Apex および REST API を使用した記事の管理
記事の翻訳を申請する
記事の翻訳を申請する
記事の翻訳を申請して、オンラインバージョンを保持します。指定した言語の翻訳がすでに存在する場合は、
コピーするか、新しいドラフト翻訳を作成します。公開の各アクションは、リソースで要求する項目変更に
よって定義されます。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/translations
形式
JSON、XML
HTTP メソッド
POST
認証
Authorization: OAuth accesstoken
パラメータ
パラメータ
説明
articleID
記事 ID。
language
言語の ISO コード。
リクエストボディの例
{
"articleId":<articleID>
"language":"fr"
}
記事のマスタバージョンを非公開にする
既存のドラフト記事がない場合、記事のオンラインマスタバージョンを非公開にします。公開の各アクション
は、リソースで要求する項目変更によって定義されます。マスタバージョンを非公開にするに
は、"publishStatus":"draft" を使用します。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/masterVersions/<versionId>
形式
JSON、XML
HTTP メソッド
PATCH
認証
Authorization: OAuth accesstoken
62
Apex および REST API を使用した記事の管理
翻訳記事のオンラインバージョンを非公開にする
パラメータ
パラメータ
説明
publishStatus
記事の公開の状況。draft を使用します。
リクエストボディの例
{
"publishStatus":"draft"
}
レスポンスボディの例
既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。
翻訳記事のオンラインバージョンを非公開にする
翻訳記事のオンラインバージョンを非公開にします。公開の各アクションは、リソースで要求する項目変更に
よって定義されます。オンライン状態から翻訳を編集および削除するには、"publishStatus":"draft" を
使用します。
URI
/services/data/v25.0/knowledgeManagement/articleVersions/translations/<translationVersionID>
形式
JSON、XML
HTTP メソッド
PATCH
認証
Authorization: OAuth accesstoken
パラメータ
パラメータ
説明
publishStatus
記事の公開の状況。draft を使用します。
リクエストボディの例
{
"publishStatus":"draft"
}
63
Apex および REST API を使用した記事の管理
Salesforce Object Query Language を使用して参照統計を
更新する
Salesforce Object Query Language を使用して参照統計を更新する
UPDATE VIEWSTAT 句は、Salesforce ナレッジの記事の検索および参照についてレポートするために SELECT ス
テートメントで使用します。開発者は、記事の参照統計を更新できます。
次の構文を使用して、オンラインでアクセスできるすべての記事の参照カウントを増加できます。
SELECT Title FROM FAQ__kav
WHERE PublishStatus='online' and
Language = 'en_US' and
KnowledgeArticleVersion = 'ka230000000PCiy'
UPDATE VIEWSTAT
Salesforce Object Search Language を使用して検索キーワードを追
跡する
UPDATE TRACKING 句は、Salesforce ナレッジの記事の検索および参照についてレポートするために使用しま
す。開発者は、Salesforce ナレッジの記事の検索で使用するキーワードを追跡できます。また、言語属性を使用
して、特定の言語 (ロケール) で検索することもできます。ただし、1 つのクエリで指定できるのは 1 つの言語
のみです。目的の言語ごとに、個別のクエリを行います。ロケールを指定するには、アンダースコアを使用す
る Java 形式 (fr_FR、jp_JP など) を使用します。サポートされているロケールのリストを取得するには、Web で
「java ロケールコード」を検索してください。
次の構文を使用して、Salesforce ナレッジの記事の検索で使用するキーワードを追跡できます。
FIND {Keyword}
RETURNING KnowledgeArticleVersion (Title WHERE PublishStatus="Online" and language="en_US")
UPDATE TRACKING
Salesforce Object Search Language を使用して記事の参照統計を更
新する
UPDATE VIEWSTAT 句 (省略可能) は、Salesforce ナレッジの記事の検索および参照についてレポートするために
使用します。開発者は、記事の参照統計を更新できます。また、言語属性を使用して、特定の言語 (ロケール)
で検索することもできます。ただし、1 つのクエリで指定できるのは 1 つの言語のみです。目的の言語ごとに、
個別のクエリを行います。ロケールを指定するには、アンダースコアを使用する Java 形式 (fr_FR、jp_JP など) を
使用します。サポートされているロケールのリストを取得するには、Web で「java ロケールコード」を検索し
てください。
次の構文を使用して、オンラインで英語でアクセスできるすべての記事の参照カウントを増加できます。
FIND {Title}
RETURNING FAQ__kav (Title WHERE PublishStatus="Online" and
language="en_US" and
KnowledgeArticleVersion = 'ka230000000PCiy')
UPDATE VIEWSTAT
64