salesforce...
Post on 12-Apr-2018
263 Views
Preview:
TRANSCRIPT
Version 31.0: Summer ’14
Salesforce ナレッジ開発者ガイド
最終更新日: 2014/9/24
© Copyright 2000–2014 salesforce.com, inc. All rights reserved. Salesforce.com およびその他の名称や商標は、salesforce.com, inc. の登録商標です。本ドキュメントに記載されたその他の商標は、各社に所有権があります。
目次
第 1 章: Salesforce ナレッジでの開発の概要........................................................................................1Salesforce ナレッジ API オブジェクト ................................................................................................................................2
第 2 章: 開発組織の設定......................................................................................................................7
第 3 章: Visualforce タグを使用した検索ページの作成......................................................................12Visualforce を使用して記事リストを作成する...................................................................................................................13
ページネーションを Visualforce 記事リストに追加する..................................................................................................15
検索項目を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する.........................................................18
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する.........................................................21
[Last Updated Promotions (最後に更新されたプロモーション)] ボックスを [Visualforce Article Search (Visualforce
記事検索ページ)] に追加する........................................................................................................................................31
第 4 章: Apex および REST API を使用した記事の管理....................................................................35PublishingService クラス.......................................................................................................................................................37
PublishingService メソッド........................................................................................................................................37archiveOnlineArticle(String, Datetime)..........................................................................................................39assignDraftArticleTask(String, String, String, Datetime, Boolean)................................................................39assignDraftTranslationTask(String, String, String, Datetime, Boolean)........................................................40cancelScheduledArchivingOfArticle(String)...................................................................................................41cancelScheduledPublicationOfArticle(String).................................................................................................41completeTranslation(String)............................................................................................................................42deleteArchivedArticle(String)..........................................................................................................................42deleteArchivedArticleVersion(String, Integer)................................................................................................42deleteDraftArticle(String)...............................................................................................................................43deleteDraftTranslation(String)........................................................................................................................43editArchivedArticle(String).............................................................................................................................44editOnlineArticle(String, Boolean).................................................................................................................44editPublishedTranslation(String, String, Boolean)..........................................................................................45publishArticle(String, Boolean).......................................................................................................................45restoreOldVersion(String, Integer)..................................................................................................................46scheduleForPublication(String, Datetime)......................................................................................................47setTranslationToIncomplete(String)...............................................................................................................47submitForTranslation(String, String, String, Datetime).................................................................................48
記事のマスタバージョンをアーカイブする......................................................................................................................48
翻訳に関連するタスクを割り当てる.................................................................................................................................49
マスタ記事に関連するタスクを割り当てる......................................................................................................................50
記事のマスタバージョンを削除する.................................................................................................................................51
記事の翻訳バージョンを削除する.....................................................................................................................................52
マスタ記事のオンラインバージョンを編集する..............................................................................................................52
記事のマスタバージョンを公開する.................................................................................................................................53
i
目次
記事のアーカイブバージョンを復元する..........................................................................................................................54
記事のメタデータを取得する.............................................................................................................................................55
記事のバージョンを取得する.............................................................................................................................................55
マスタバージョンのメタデータ要素を検索する..............................................................................................................56
翻訳バージョンのメタデータ要素を検索する..................................................................................................................56
翻訳記事のバージョンを完了に設定する..........................................................................................................................57
翻訳記事のバージョンを未完了に設定する......................................................................................................................58
記事の翻訳を申請する.........................................................................................................................................................59
記事のマスタバージョンを非公開にする..........................................................................................................................59
翻訳記事のオンラインバージョンを非公開にする..........................................................................................................60
Salesforce Object Query Language を使用して参照統計を更新する.................................................................................61
Salesforce Object Search Language を使用して検索キーワードを追跡する.....................................................................61
Salesforce Object Search Language を使用して記事の参照統計を更新する.....................................................................61
ii
目次
第 1 章Salesforce ナレッジでの開発の概要
Salesforce ナレッジは、ユーザが内容 (記事とも呼ばれる) を簡単に作成および管理でき、必要な記事の検索と表示をすばやく実行できる知識
トピック:
• Salesforce ナレッジ API オブジェクト ベースです。組織内のSalesforce ナレッジの設定が完了したら、ユーザ
は [記事の管理] タブを使用して記事の書き込み、編集、公開、アーカイブを行ったり、[記事] タブを使用して公開記事の検索と表示を行ったりできます。カスタマーポータルまたはパートナーポータルでSalesforce ナレッジが有効になっている場合、顧客およびパートナーは記事にアクセスできます。Web サイト訪問者が記事を参照できるよう、公開知識ベースを作成することもできます。このガイドは、会社のニーズに応じてSalesforce ナレッジをカスタマイズする開発者を対象としています。Visualforce タグを使用した記事の検索ページを理解して作成できるようにいくつかの例が記載されています。
1
Salesforce ナレッジ API オブジェクトSalesforce ナレッジでは、記事およびデータカテゴリを使用します。記事には、知識ベースで入手できるようにする会社の商品およびサービスに関する情報が取り込まれます。Salesforce ナレッジでは、データカテゴリは、階層的にカテゴリグループにまとめられた一連の条件です。知識ベースの記事は、複数のカテゴリにしたがって分類できます。ユーザは必要な記事を見つけやすくなります。たとえば、営業地域や事業単位で記事を分類するには、「営業地域」と「事業単位」という 2 つのカテゴリグループを作成します。「営業地域」カテゴリグループでは、「全営業地域」を最上位として、第 2 レベルに「北米」、「アジア」というように、地理的階層を最大 5レベルに構成することができます。作成者がカテゴリを記事に割り当てます。管理者は、データカテゴリを使用して記事へのアクセスを制御します。データカテゴリは、システム管理者が定義した値で、記事を知識ベース内で論理サブグループに整理するときに役立ちます。たとえば、[記事] タブから、最も関連性の高いデータカテゴリを選択して、記事のリストを絞り込むことができます。このセクションでは、記事およびデータカテゴリのSalesforce ナレッジAPIオブジェクトと、それらを操作するリソースをリストします。
記事記事には、知識ベースで入手できるようにする会社の商品およびサービスに関する情報が取り込まれます。知識ベースの記事を 1 つ以上のデータカテゴリに分類することにより、ユーザは必要な記事を見つけやすくなります。管理者は、データカテゴリを使用して記事へのアクセスを制御します。記事は記事タイプに基づいており、記事タイプは次に依存しています。• セクションの内容を整理する記事タイプ。• 記事を表示する記事タイプのテンプレート。どの記事も公開サイクルで管理されます。記事タイプ
Salesforce ナレッジのすべての記事は 1 つの記事タイプに割り当てられます。記事のタイプは、記事が含むコンテンツのタイプ、外観、および記事にアクセスできるユーザを特定します。たとえば、単純な FAQ の記事タイプには、[質問]および [回答]の 2 つのカスタム項目があり、記事マネージャが FAQ の記事の作成または更新時にそこにデータを入力します。より複雑な記事タイプでは、複数のセクションに分かれた多数の項目が必要な場合があります。レイアウトおよびテンプレートを使用することで、管理者は特定のコンテンツに対して最も効果的な方法で記事タイプを構築できます。記事タイプへのユーザのアクセスは権限によって制御されます。各記事タイプについて、管理者は「作成」、「参照」、「編集」、または「削除」権限をユーザに与えることができます。たとえば、記事マネージャが内部ユーザには FAQ を参照、作成、編集できるようにするけれども、パートナーユーザには FAQ の参照のみを可能にする場合などです。
記事タイプレイアウト記事タイプレイアウトを使用して、管理者は記事に表示される項目を構成するセクションを作成し、ユーザが表示および編集可能な項目を選択できます。記事タイプごとに 1 つのレイアウトが使用可能です。管理者は、記事タイプの詳細ページからレイアウトを変更します。
記事タイプテンプレート記事タイプテンプレートでは、記事タイプレイアウトでのセクションの表示方法を指定します。記事タイプは、その 4 つのチャネルそれぞれに異なるテンプレートを使用できます。たとえば、FAQ の記事タイプの [カスタマーポータル] チャネルをタブテンプレートに割り当てると、FAQ のレイアウトのセクションが、顧客が FAQ の記事を表示するときにタブとして表示されます。目次テンプレートの場合は、レイアウ
2
Salesforce ナレッジ API オブジェクトSalesforce ナレッジでの開発の概要
トで定義したセクションが、記事が表示されたときに 1 つのページにハイパーリンクと共に表示されます。Salesforce は、タブと目次の 2 つの標準記事タイプテンプレートを提供します。カスタムテンプレートはVisualforce で作成できます。
チャネルチャネルとは、記事を利用可能にする媒体を指します。Salesforce ナレッジでは、記事を利用可能にできるチャネルを 4 つ提供しています。• 内部アプリケーション: Salesforce のユーザが、ロールの表示設定に応じて [記事] タブで記事にアクセス
できます。• 顧客: [記事] タブがポータルで使用可能な場合、顧客が記事にアクセスできます。カスタマーポータル
ユーザは、取引先でのマネージャのロール表示設定を継承します。• パートナー: [記事] タブがパートナーで使用可能な場合、パートナーが記事にアクセスできます。パート
ナーポータルユーザは、取引先でのマネージャのロール表示設定を継承します。• 公開知識ベース: 記事は、AppExchangeからSalesforce ナレッジのサンプル公開知識ベースアプリケーショ
ンを使用して公開知識ベースを作成することで、匿名ユーザに公開できます。公開知識ベースの作成には、サイトおよび Visualforce が必要です。
• 自分の Web サイト。会社の Web サイト経由でユーザが記事を使用できます。
公開サイクルSalesforce ナレッジ記事は公開サイクルの作成から削除までの段階を移行していきます。公開サイクルには、3 つの異なる状況があります。Draftは、新しい記事が作成されるか既存の記事が更新される段階です。状況がOnlineである記事は、公開済みで、他のチャネルで利用できるようになったドラフト記事です。最後に、公開記事がサイクルの最終段階になると、Archived状況に移行するか、または Draftに戻り後続のバージョンで更新されます。
次の表に、記事を操作する API リソースのリストを示します。
説明型名前記事を分類するデータカテゴリを表します。Object記事タイプ
__DataCategorySelection
バージョンとは関係なく特定の記事タイプの記事へのアクセスを提供します。このオブジェクトは参照のみであるた
Object記事タイプ__ka
め、SOQL 句または WITH DATA CATEGORYDataCategorySpec SOSL 句では使用できません。詳細は、「KnowledgeArticle」を参照してください。バージョンに応じて特定の記事タイプのすべての記事へのアクセスを提供します。このオブジェクトは、
Object記事タイプ__kav
KnowledgeArticleVersion で使用可能な項目へのアクセスを提供します。詳細は、「KnowledgeArticleVersion」を参照してください。記事の詳細ページに表示されるフィード内の単一フィード項目を表します。
Object記事タイプ __Feed
特定の記事タイプの記事の参照回数の統計情報を提供します。詳細は、「KnowledgeArticleViewStat」を参照してください。
Object記事タイプ__ViewStat
3
Salesforce ナレッジ API オブジェクトSalesforce ナレッジでの開発の概要
説明型名前特定の記事タイプの記事の加重評価を 1 - 5 のスケールで提供します。詳細は、「KnowledgeArticleVoteStat」を参照してください。
Object記事タイプ__VoteStat
Case と KnowledgeArticle との間の関連を表します。ObjectCaseArticle
ユーザがフィードに追加したコメントを表します。 ユーザがフィードに追加したコメントを表します。
ObjectFeedComment
FeedItem は、レコードフィードの変更 (テキスト投稿、リンク投稿、およびコンテンツ投稿を含む) などのフィードのエントリを表します。
ObjectFeedItem
バージョンとは関係なく記事へのアクセスを提供します。このオブジェクトは参照のみであるため、SOQL 句または
ObjectKnowledgeArticle
WITH DATA CATEGORY DataCategorySpec SOSL 句では使用できません。バージョンに応じて、すべての記事タイプを対象に記事の標準項目のグローバルな参照を提供します。
ObjectKnowledgeArticleVersion
すべての記事タイプを対象に指定記事の参照回数に関する統計情報を提供します。
ObjectKnowledgeArticleViewStat
すべての記事タイプを対象に指定記事の加重評価を 1 - 5のスケールで提供します。
ObjectKnowledgeArticleVoteStat
ユーザのホームの単一フィード項目を表します。Chatterフィードでは、ユーザがフォローするレコードに対する最新の変更が表示されます。
ObjectNewsFeed
ユーザプロファイルフィードを表します。このフィードは、フィード内で追跡可能なレコードに対するユーザによ
ObjectUserProfileFeed
るすべてのアクションを追跡します。 このフィードは、ユーザプロファイルページに表示されます。公開サイクルおよびデータカテゴリの状況に応じて記事を分類します。詳細は、『Salesforce SOQLおよびSOSLリファレンスガイド』を参照してください。
SOQL 句WITH DATA CATEGORYfilteringExpression
カテゴリに基づいて記事を検索します。詳細は、『SalesforceSOQL および SOSL リファレンスガイド』を参照してください。
SOSL 句WITH DATA CATEGORYDataCategorySpec
KnowledgeArticleVersion での SOQL および SOSL
• クエリで 1 つ以上の主キー ID を指定する場合を除き、必ず PublishStatusの値は 1 つだけ指定します。セキュリティをサポートするために、PublishStatusの値がDraftの記事は「記事の管理」権限を持つユーザにのみ表示されます。
• アーカイブ済み記事のバージョンは、articletype_kav オブジェクトに保存されます。アーカイブ済み記事のバージョンをクエリするには、記事の Idを指定し、sLatestVersion='0'を設定します。
• 必ず Languageの値は 1 つだけ指定します。ただし、SOQL では、Idまたは KnowledgeArticleIdに対する条件がある場合、複数の Languageを指定できます。
4
Salesforce ナレッジ API オブジェクトSalesforce ナレッジでの開発の概要
データカテゴリデータカテゴリは、カテゴリグループ別に編成され、次のことを実行できます。• ユーザによるレコードの分類および検索。• システム管理者によるレコードへのアクセスの管理。データカテゴリは、Salesforce ナレッジ (記事) およびアンサーコミュニティ (質問) で使用できます。データカテゴリと記事
Salesforce ナレッジでは、各カテゴリグループ内の 5 段階階層のデータカテゴリをサポートします。知識ベースの記事は、複数のカテゴリに従って分類できます。ユーザは必要な記事を見つけやすくなります。たとえば、営業地域や事業単位で記事を分類するには、「営業地域」と「事業単位」という 2 つのカテゴリグループを作成します。「営業地域」カテゴリグループでは、「全営業地域」を最上位として、第 2 レベルに「北米」、「アジア」というように、地理的階層を構成することができます。
次の図は、[記事] タブで公開されている同じ記事を検索するエージェントを示します。エージェントは、Productsおよび Geographyドロップダウンリストで、それぞれ Laptopsおよび USAを選択します。
5
Salesforce ナレッジ API オブジェクトSalesforce ナレッジでの開発の概要
次の表に、データカテゴリを操作する API リストを示します。
説明型名前記事カテゴリへのアクセスを許可します。Object記事タイプ
__DataCategorySelection
質問カテゴリへのアクセスを許可します。ObjectQuestionDataCategorySelection
公開サイクルおよびデータカテゴリの状況に応じて記事を分類します。詳細は、『Salesforce SOQLおよびSOSLリファレンスガイド』を参照してください。
SOQL 句WITH DATA CATEGORYfilteringExpression
カテゴリに基づいて記事を検索します。詳細は、『SalesforceSOQL および SOSL リファレンスガイド』を参照してください。
SOSL 句WITH DATA CATEGORYDataCategorySpec
要求で指定されたオブジェクトで使用できるカテゴリグループを取得します。
コールdescribeDataCategoryGroups()
要求で指定されたオブジェクトで使用できるカテゴリグループとそのデータカテゴリ構造を返します。
コールdescribeDataCategoryGroupStructures()
指定したオブジェクトに関連するカテゴリグループのリストを返します。『Force.com Apexコード開発者ガイド』を参照してください。
Apex メソッドdescribeDataCategoryGroups
要求で指定されたオブジェクトのデータカテゴリ構造と共に使用可能なカテゴリグループを返します。『Force.comApex コード開発者ガイド』を参照してください。
Apex メソッドdescribeDataCategoryGroupStructures
6
Salesforce ナレッジ API オブジェクトSalesforce ナレッジでの開発の概要
第 2 章開発組織の設定
このガイドのサンプルでは、特定のカテゴリグループ、カテゴリ、および記事タイプを参照します。これらのサンプルを変更せずに使用す
トピック:
るには、以下に示す記事タイプ、データカテゴリ、記事、カスタムアプリケーションのパラメータを使用して開発組織を作成する必要があります。自分の開発組織のカテゴリや記事タイプでサンプルを更新することもできます。
記事タイプ次の表では、サンプルで使用される 2 つの記事タイプについて説明します。サンプルを変更せずに使用するには、これらの記事タイプを開発組織に追加します。記事タイプを追加する方法についての詳細は、Salesforceオンラインヘルプの「記事タイプの定義」を参照してください。
プロモーション提示パラメータPromotion (プロモーション)
Offer (提示)表示ラベル
Promotion__kavOffer__kavAPI 名カスタム項目 1 • 項目表示ラベル:
Start Date (開始日)• 項目表示ラベル:
Reference (リファレンス) • API 名:
Start_Date__c• API 名:Reference__c • 型: date/time
• 型: text
カスタム項目 2 • 項目表示ラベル:End Date (終了日)
• 項目表示ラベル:Description (説明)
• API 名:Description__c
• API 名:End_Date__c
•• 型: date/time型: rich text area
カスタム項目 3 • 項目表示ラベル:Description (説明)
• 項目表示ラベル:Launch Date (開始日) • API 名:
Description__c• API 名:Launch_Date__c • 型: rich text area
7
プロモーション提示パラメータ• 型: date
なしカスタム項目 4 • 項目表示ラベル:Size (サイズ)
• API 名: Size__c• 型: picklist• 値は次のとおりで
す。◊ XS◊ S◊ M◊ L◊ XL◊ XXL
なしカスタム項目 5 • 項目表示ラベル:Data Sheet (データシート)
• API 名:Data_Sheet__c
• 型: file
データカテゴリコードサンプルのカスタマイズされた検索ページでは、[Fashions (ファッション)]、[Stores (店舗)]、および [Products (商品)] カテゴリグループを使用します。次の表に、これらのカテゴリグループで使用されるカテゴリの詳細を示します。API を使用すると、一意の名前でカテゴリを選択できます。これらのカテゴリをサンプルの組織に追加する際は、括弧内に記載された一意のカテゴリ名を設定してください。
Products (商品)Stores (店舗)Fashions (ファッション)
All (All)All (All)All (All)• Men (Men)• Online store
(Online_Store)• Rockers (Rockers)• Late 50's/early 60's
(Late_50_s_early_60_s)◊ Shoes (Shoes_m)
• US (US)◊ Jackets
(Jackets_m)• Futuristic (Futuristic) ◊ San Francisco(San_Francisco)• Grunge (Grunge) ◊ Trousers
(Trousers_m)• Old Hollywood(Old_Hollywood)
◊ New-York(New_York) ◊ Shirts (Shirts_m)
• The 80's (The_80_s) ◊ Hats (Hats_m)• Asia (Asia)• French Chic(French_Chic) • Women (Women)◊ Hong-Kong
(Hong_Kong)• Flashy Disco(Flashy_Disco) ◊ Shoes (Shoes_w)
◊ Tokyo (Tokyo)
8
開発組織の設定
Products (商品)Stores (店舗)Fashions (ファッション)
◊ Jackets(Jackets_w)
•• Europe (Europe)Gothic (Gothic)
◊ Paris (Paris)◊ Trousers
(Trousers_w)◊ London(London)
◊ Skirts (Shirts_w)◊ Hats (Hats_w)
• Children (Children)
◊ 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
9
開発組織の設定
• Launched_Date__c• Size__c• Data_Sheet__c
Aviator Jacket,5Zippers,,The_80_s+Grunge,San_Francisco+Paris+London,Jackets_m,,,,,,Army Jacket,Men's Grenade jacket forsnowboarding,,Grunge,US,Jackets_m,,,,,,Futuristic Boots,Integrates state-of-the-artbiotechnics,,Futuristic,All,Shoes_w,,,,,,60s Mini Skirt,Go back with this miniskirt,,Late_50_s_early_60_s,All,Skirts_w,,,,,,Dotted 80's Skirt,Who said you were a materialgirl?,,The_80_s,All,Skirts_w,,,,,,80's Punk Skirts,LondonCalling!,,The_80_s+Grunge,US,Skirts_w,,,,,,French Designshoes,Magnifique!,,French_Chic,All,Shoes_w,,526398,,,,Vintage Platform Shoes,Gethigh!,,The_80_s,All,Shoes_w,,,,,,Metallic Jacket,We need you for vintagearmy!,,The_80_s+Futuristic,All,Jackets_m,,,,,,Gothic Boots,Are you from the Adam'sfamily?,,Gothic,All,Shoes_w,,,,,,Motorcycle Jacket,Live to ride, ride tolive!,,Rockers,US,Jackets_m,,,,,,Men's Leather Pants,Heyman!,,Late_50_s_early_60_s,US+Europe,Trousers_m,,,,,,Retro Disco Jacket,Saturday's nightfever!,,Flashy_Disco,US+Europe,Jackets_m,,,,,,French Beret,Redberet,,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'sPants,,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 GogoBoots,,The_80_s+Futuristic,All,Shoes_k,,,,Dark Shirts,,Gothic,All,Shirts_m,,,,Christmas TreeSkirts,,Late_50_s_early_60_s,US,Skirts_w,,,,Leather Rocker Jacket,,Rockers,US,Jackets_m,,,,
10
開発組織の設定
ナレッジのカスタムアプリケーションSalesforce 知識ベースのカスタムアプリケーションを作成する手順は、次のとおりです。1. [設定] で、[作成] > [アプリケーション] をクリックします。2. 内容を紹介するスプラッシュページが表示される場合は、[次へ]を
クリックします。3. [新規] をクリックします。
新規カスタムアプリケーションウィザードが表示されます。
4. [アプリケーションの表示ラベル]項目に「Knowledge」(ナレッジ)と入力します。
5. [説明]項目に「My Custom Knowledge Base」(私のカスタム知識ベース) と入力します。
6. [次へ] をクリックします。7. [次へ] をクリックします。8. [ホーム]、[記事]、[記事の管理]タブを選択して、[次へ] をクリッ
クします。9. [プロファイルへの割り当て]ページで、標準ユーザプロファイルお
よびシステム管理者プロファイルの横にある [参照可能]チェックボックスをオンにします。
10. [保存] をクリックします。ブラウザの右上隅にあるアプリケーションメニューにナレッジカスタムアプリケーションが表示されます。このアプリケーションを選択して、コードサンプルを実行します。
11
開発組織の設定
第 3 章Visualforce タグを使用した検索ページの作成
本番組織へのリリース時にテストクラスを含めるこのセクションの一部のコードサンプルには、対応するテストクラスがあります。本番組織にリリースする場合、コードにこのテストクラスを含めます。
トピック:
• Visualforce を使用して記事リストを作成する
• ページネーションを Visualforce 記事リストに追加する テストクラスには、Apexクラスおよびトリガの動作を検証する単体テ
ストが含まれます。単体テストは、コード内の特定の部分が正しく機• 検索項目を [Visualforce ArticleSearch (Visualforce 記事検索)] ページに追加する
能していることを確認するクラスメソッドです。単体テストのメソッドは引数を取らず、データベースへのデータのコミットを行うこともなく、メソッド定義に testMethod キーワードのフラグが立てられます。
• 検索条件を [Visualforce ArticleSearch (Visualforce 記事検索)] ページに追加する 正確性やコードカバー率を確認し、また回帰テストを行う意味も含め
て、Apexコードが本番組織にリリースされるときには、毎回、組織内• [Last Updated Promotions (最後に更新されたプロモーション)] ボック のすべてのテストメソッドが実行されます。本番組織にリリースする
には、すべての Apex クラスで 75% 以上のコードカバー率が必要になスを [Visualforce Article Searchります。また、すべてのトリガについてもある程度のコードカバー率が必要です。(Visualforce 記事検索ページ)] に追
加する@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 記事検索ページ)] に追加する
12
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記事リス
トのコードサンプル」 (ページ 13)に表示されているマークアップに置き換えます。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,
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>
13
Visualforce を使用して記事リストを作成するVisualforce タグを使用した検索ページの作成
</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ページの新しいカスタムタブを作成します。このページを [VisualforceArticle 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 記事検索)] タブが自動的にページ上部のアプリケーションタブに追加されます。
これまでの作業を確認する[Visualforce Article Search (Visualforce 記事検索)] タブを選択して、記事リストを表示します。リスト内の各項目には、記事のタイトル、記事タイプ、および記事の概要が表示されます。現時点では、Visualforceリストのコードサンプルの knowledge:articleListタグで設定したように、リストにはページごとに 10 個の記事しか表示されません。
14
Visualforce を使用して記事リストを作成するVisualforce タグを使用した検索ページの作成
ページネーションを Visualforce 記事リストに追加する[Visualforce Article Search (Visualforce 記事検索)] タブに、ページ間を移動するための [次へ] および [前へ] リンクを追加します。
1. [Visualforce Article Search (Visualforce 記事検索)] タブの下部にあるフッターで、[ArticleList] をクリックしてVisualforce 開発モードのページエディタを表示します。
2. Visualforce開発モードのページエディタで既存のマークアップをすべて削除し、「Visualforce記事リストページネーションのコードサンプル」 (ページ 16)に表示されているマークアップに置き換えます。
3. [保存] ( ) をクリックします。新しい Visualforce コードは、Apex クラスおよびメソッドを参照しているため、後でエラーメッセージが表示されて、想定されるクラスまたはメソッドを宣言するように求められます。これらの項目を 1 つずつ宣言する代わりに、適切なコントローラを作成します。
4. [設定] から、[開発] > [Apex クラス] をクリックします。5. [新規] をクリックします。6. Visualforce ページネーションコントローラのコードサンプル (ページ 17)の内容をコピーして貼り付けます。7. [保存] をクリックします。8. ステップ 1 ~ 3 を繰り返します。
15
ページネーションを Visualforce 記事リストに追加するVisualforce タグを使用した検索ページの作成
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></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"/>
16
ページネーションを Visualforce 記事リストに追加するVisualforce タグを使用した検索ページの作成
Visualforce ページネーションコントローラのコードサンプル太字の行については、コードサンプルの後に説明があります。
public with sharing class vfListPaginationController {
//Page Sizeprivate Static Final Integer PAGE_NUMBER = 10;
public vfListPaginationController() {String qryString = 'SELECT Id, title, UrlName, LastPublishedDate,LastModifiedById FROMKnowledgeArticleVersion 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 listInteger currentPage = 1;Integer maxSize = 1;
// Returns whether we need to see previous button or notpublic boolean getPrevRequired() {return currentPage > 1;}
// Returns whether we need to see next button or notpublic boolean getNextRequired() {return currentPage * PAGE_NUMBER < maxSize;}
//Returns current page numberpublic Decimal getCurrentPageNumber() {return this.currentPage;}
//action for next clickpublic PageReference next() {if(maxSize > this.currentPage * PAGE_NUMBER) {this.currentPage = this.currentPage + 1;}return null;}
//action for previous clickpublic PageReference previous() {if(this.currentPage > 1)this.currentPage = this.currentPage - 1;return null;}
}
次のコードフラグメントは、記事情報を取得してリストに表示する SOQL 句です。WHERE句では、公開記事のみが記事リストに表示されるように指定しています。
SELECT Id, title, UrlName, LastPublishedDate,LastModifiedById FROM KnowledgeArticleVersionWHERE (PublishStatus = \'online\' and Language = \'en_US\')
これまでの作業を確認する作業内容を保存すると、[Visualforce Article Search (Visualforce 記事検索)] ページが更新されて、[次へ] リンクがリストの下部に表示されます。[次へ] をクリックすると、ページに [前へ] リンクが表示されます。
17
ページネーションを Visualforce 記事リストに追加するVisualforce タグを使用した検索ページの作成
検索項目を [Visualforce Article Search (Visualforce 記事検索)]ページに追加する記事リストの上にキーワード検索項目を作成します。この項目にテキストを入力すると、リストが更新されて、そのキーワードを含む記事のみが表示されます。検索項目を使用する場合、検索文字列を設定および取得する新しいメソッドが必要になります。そのため、[Visualforce Article Search (Visualforce 記事検索)] ページのコードを変更する前に新しいコントローラを追加します。
1. [設定] で、[開発] > [Apex クラス] をクリックします。2. [新規] をクリックします。3. Visualforce キーワード検索コントローラのコードサンプル (ページ 19)の内容をコピーして貼り付けます。4. [保存] をクリックします。5. [Visualforce Article Search (Visualforce 記事検索)] タブのフッターで、[ArticleList] をクリックして Visualforce 開
発モードのページエディタを表示します。6. Visualforce開発モードのページエディタで既存のマークアップをすべて削除し、「Visualforceキーワード検索
のコードサンプル」 (ページ 18)に表示されているマークアップに置き換えます。
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"/>
18
検索項目を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
<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><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 Sizeprivate Static Final Integer PAGE_NUMBER = 10;
//Search String used in ArticleList tagpublic String searchstring { get; set; }
public vfKeywordSearchController() {String qryString = 'SELECT Id, title, UrlName, LastPublishedDate,LastModifiedById FROMKnowledgeArticleVersion WHERE (PublishStatus = \'online\' and Language = \'en_US\')';List<KnowledgeArticleVersion> articleList= Database.query(qryString);maxSize = articleList.size() ;}
19
検索項目を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
//Keeps track of current page & max size of article listInteger currentPage = 1;Integer maxSize = 1;
// Returns whether we need to see previous button or notpublic boolean getPrevRequired() {return currentPage > 1;}
// Returns whether we need to see next button or notpublic boolean getNextRequired() {return currentPage * PAGE_NUMBER < maxSize;}
//Returns current page numberpublic Decimal getCurrentPageNumber() {return this.currentPage;}
//action for next clickpublic PageReference next() {if(maxSize > this.currentPage * PAGE_NUMBER) {this.currentPage = this.currentPage + 1;}return null;}
//action for previous clickpublic PageReference previous() {if(this.currentPage > 1)this.currentPage = this.currentPage - 1;return null;}
}
次のコードフラグメントで、検索キーワードが設定および取得されます。
public String searchstring { get; set; }
これまでの作業を確認する[Visualforce Article Search (Visualforce 記事検索)] ページの記事リストの上に検索項目が表示されます。
20
検索項目を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
検索条件を [Visualforce Article Search (Visualforce 記事検索)]ページに追加する検索項目に加えて、ユーザが店舗、国、またはファッションで検索結果を絞り込むことができるように、記事リストを絞り込むデータカテゴリを表示します。検索条件をVisualforceページに追加する場合、データカテゴリをリスト、取得、および挿入するメソッドを設定する必要があります。また、適切なメソッドをコールしてページを処理する新しいコントローラを追加する必要もあります。
1. [設定] で、[開発] > [Apex クラス] をクリックします。2. 次のコードサンプルを追加します。
a. データカテゴリ情報のコードサンプルb. データカテゴリグループ情報のコードサンプルc. データカテゴリユーティリティのコードサンプルd. Visualforce 検索コントローラのコードサンプル
3. [Visualforce Article Search (Visualforce 記事検索)] タブの下部にあるフッターで、[ArticleList] をクリックしてVisualforce 開発モードのページエディタを表示します。
4. Visualforce開発モードのページエディタで既存のマークアップをすべて削除し、Visualforce検索のコードサンプル (ページ 28)のマークアップに置き換えます。
5. [保存] ( ) をクリックします。
データカテゴリ情報のコードサンプル
/*** This class holds the Data Category Info. from* the describe result
21
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
*/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;}}
データカテゴリ情報のテスト次に、データカテゴリ情報のコードサンプル (ページ 21)のテストクラスを示します。
@isTestprivate 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*/public class DataCategoryGroupInfo {
private String name;private String label;private String description;private 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;
22
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
}
public String getLabel(){return this.label;}
public String getDescription(){return this.description;}
public DataCategoryInfo[] getGroupStructure(){return this.groupStructure;}
}
データカテゴリグループ情報のテスト次に、データカテゴリグループ情報のコードサンプル (ページ 22)のテストクラスを示します。
@isTestprivate 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());}
}
データカテゴリユーティリティのコードサンプル
/*** 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 = ' ';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())));
23
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
}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,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 DescribedatacategorygroupstructureresultgetDescribeDataCategoryGroupStructureResults(String categoryGroupName) {Datacategorygroupsobjecttypepair pair = new Datacategorygroupsobjecttypepair();pair.setSobject(ARTICLE_TYPE);pair.setDataCategoryGroupName(categoryGroupName);return Schema.describeDataCategoryGroupStructures(new Datacategorygroupsobjecttypepair[]{ pair }, false)[0];}}
データカテゴリユーティリティのテスト次に、データカテゴリユーティリティのコードサンプル (ページ 23)のテストクラスを示します。
@isTestprivate 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());}
24
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
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++) {
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 Sizeprivate Static Final Integer PAGE_NUMBER = 10;
//Search String used in ArticleList tagpublic String searchstring { get; set; }
//Is new List reqdprivate boolean isRefRequired = true;//Exclude filter criteria for UI onlyprivate static final String EXCLUDE_CRITERIA_FILTER = 'All';
//Keeps track of current page & max size of article listInteger currentPage = 1;Integer maxSize = 1;
//Returns array of Category Groupspublic 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){categoryCondition=categoryCondition+categoryGroup.getName() + ':' +
System.currentPageReference().getParameters().Get('categoryType_'+categoryGroup.getName());
}else {categoryCondition=categoryCondition + ',' +categoryGroup.getName() + ':' +
System.currentPageReference().getParameters().Get('categoryType_'+categoryGroup.getName());
25
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
}}}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 wherePublishStatus =\'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\') WITHDATA 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 );
}if(categoryFilter =='') {
// maxSize = 0;categoryCondition = 'Fashions:All,Stores:All,Products:All' ;}return categoryCondition;}
// Action call when the new list needs to be fetchedpublic PageReference refreshSearchResult() {maxSize = currentPage = 1;return null;}
// Returns whether we need to see previous button or notpublic boolean getPrevRequired() {return currentPage > 1;}
// Returns whether we need to see next button or notpublic boolean getNextRequired() {return currentPage * PAGE_NUMBER < maxSize;
26
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
}
//Returns current page numberpublic Decimal getCurrentPageNumber() {return this.currentPage;}
//action for next clickpublic PageReference next() {if(maxSize > this.currentPage * PAGE_NUMBER) {this.currentPage = this.currentPage + 1;}return null;
}
//action for previous clickpublic PageReference previous() {if(this.currentPage > 1)this.currentPage = this.currentPage - 1;return null;}
}
次のコードフラグメントでは、検索条件で選択したカテゴリを取得します。
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){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検索コントローラのコードサンプル (ページ 25)のテストクラスを示します。
@isTestprivate 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();
27
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
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() + ':' +
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,' ')}" />
{!category.label}
28
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
</option></knowledge:categoryList></select></apex:column></apex:dataTable></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;} "/> <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>
次のコードフラグメントでは、<apex:dataTable>タグで、(Visualforce検索コントローラのコードサンプルで宣言した) getdataCategoryGroupInfoメソッドを使用して、各カテゴリグループを反復処理します。
<apex:dataTable value="{!dataCategoryGroupInfo}" var="dataCategory" id="dataCategory"><apex:column width="20%"><apex:outputLabel
29
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
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,' ')}" />{!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 (検索結果)] ボックスが更新されます。選択したカテゴリに一致する記事のみが表示されます。
30
検索条件を [Visualforce Article Search (Visualforce 記事検索)] ページに追加する
Visualforce タグを使用した検索ページの作成
[Last Updated Promotions (最後に更新されたプロモーション)]ボックスを [Visualforce Article Search (Visualforce記事検索ページ)] に追加する最後に、[Last Updated Promotions (最後に更新されたプロモーション)] ボックスを追加します。
1. [Visualforce Article Search (Visualforce 記事検索)] タブの下部にあるフッターで、[ArticleList] をクリックしてVisualforce 開発モードのページエディタを表示します。
2. Visualforce開発モードのページエディタで既存のマークアップをすべて削除し、「Visualforceボックスのコードサンプル」 (ページ 31)に表示されているマークアップに置き換えます。
3. [保存] ( ) をクリックします。
Visualforce ボックスのコードサンプル太字の行については、コードサンプルの後に説明があります。
<apex:page controller="VfSearchController" sidebar="false" title="Knowledge Search"><style>td{vertical-align : top;text-align: left;}</style><apex:form >
31
[Last Updated Promotions (最後に更新されたプロモーション)] ボックスを [Visualforce Article Search (Visualforce 記
事検索ページ)] に追加する
Visualforce タグを使用した検索ページの作成
<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,' ')}"
/>{!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;} "/> <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>
32
[Last Updated Promotions (最後に更新されたプロモーション)] ボックスを [Visualforce Article Search (Visualforce 記
事検索ページ)] に追加する
Visualforce タグを使用した検索ページの作成
<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></li></knowledge:articleList>
これまでの作業を確認する[Visualforce Article Search (Visualforce 記事検索)] ページの左ペインに [Last Updated Promotions (最後に更新されたプロモーション)] ボックスが表示されています。このボックスには、新しいプロモーションまたは最近更新されたプロモーションが表示されます。
33
[Last Updated Promotions (最後に更新されたプロモーション)] ボックスを [Visualforce Article Search (Visualforce 記
事検索ページ)] に追加する
Visualforce タグを使用した検索ページの作成
34
[Last Updated Promotions (最後に更新されたプロモーション)] ボックスを [Visualforce Article Search (Visualforce 記
事検索ページ)] に追加する
Visualforce タグを使用した検索ページの作成
第 4 章Apex および REST API を使用した記事の管理
Apex または REST API を使用した記事の管理このセクションでは、記事や記事翻訳で実行可能な多くの主要なアクション (下記参照) にプログラムでアクセスできるようにする API について説明します。
トピック:
• PublishingService クラス• 記事のマスタバージョンをアーカ
イブする• 公開• 翻訳に関連するタスクを割り当て
る • 更新• 取得• マスタ記事に関連するタスクを割
り当てる • 削除• 記事のマスタバージョンを削除す
る• 翻訳の申請• 翻訳を完了または未完了の状況に設定
• 記事の翻訳バージョンを削除する この章の最初のトピックでは、Apex ナレッジ管理公開サービスクラスについて説明します。その後のトピックでは、REST API を使用して実行できる公開アクションについて説明します。
• マスタ記事のオンラインバージョンを編集する
• 記事のマスタバージョンを公開する Apex を使用して記事を管理する方法についての詳細は、『Force.com
Apexコード開発者ガイド』を参照してください。REST を使用して記• 記事のアーカイブバージョンを復
元する事を管理する方法についての詳細は、『Force.com REST API 開発者ガイド』を参照してください。
• 記事のメタデータを取得する• 記事のバージョンを取得する• マスタバージョンのメタデータ要
素を検索する• 翻訳バージョンのメタデータ要素
を検索する• 翻訳記事のバージョンを完了に設
定する• 翻訳記事のバージョンを未完了に
設定する• 記事の翻訳を申請する• 記事のマスタバージョンを非公開
にする• 翻訳記事のオンラインバージョン
を非公開にする• Salesforce Object Query Language を
使用して参照統計を更新する
35
• Salesforce Object Search Language を使用して検索キーワードを追跡する
• Salesforce Object Search Language を使用して記事の参照統計を更新する
36
Apex および REST API を使用した記事の管理
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)
ドラフト記事に関連するレビュータスクを割り当てます。assignDraftTranslationTask(String, String, String, Datetime, Boolean)
ドラフト翻訳に関連するレビュータスクを割り当てます。cancelScheduledArchivingOfArticle(String)
スケジュールされたオンライン記事のアーカイブをキャンセルします。
37
PublishingService クラスApex および REST API を使用した記事の管理
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 を返します。
38
PublishingService メソッドApex および REST API を使用した記事の管理
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, Stringinstructions, Datetime dueDate, Boolean sendEmailNotification)
パラメータarticleId
型: String
assigneeID
型: String
instructions
型: String
dueDate
型: Datetime
39
archiveOnlineArticle(String, Datetime)Apex および REST API を使用した記事の管理
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';String instructions = 'Please review this draft.';Datetime dueDate = Datetime.newInstanceGmt(2012, 12,1);
40
assignDraftTranslationTask(String, String, String, Datetime,Boolean)
Apex および REST API を使用した記事の管理
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
例
String articleId = 'Insert article ID';KbManagement.PublishingService.cancelScheduledPublicationOfArticle (articleId);
41
cancelScheduledArchivingOfArticle(String)Apex および REST API を使用した記事の管理
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
例
String articleId = 'Insert article ID';KbManagement.PublishingService.deleteArchivedArticle(articleId);
deleteArchivedArticleVersion(String, Integer)
アーカイブされた記事の特定のバージョンを削除します。
42
completeTranslation(String)Apex および REST API を使用した記事の管理
署名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
例
String articleId = 'Insert article ID';KbManagement.PublishingService.deleteDraftArticle(articleId);
deleteDraftTranslation(String)
ドラフト翻訳を削除します。
署名public static Void deleteDraftTranslation(String articleVersionId)
43
deleteDraftArticle(String)Apex および REST API を使用した記事の管理
パラメータarticleVersionId
型: String
戻り値型: Void
例
String articleVersionId = 'Insert article ID';KbManagement.PublishingService.deleteDraftTranslation (articleVersionId);
editArchivedArticle(String)
アーカイブされたマスタバージョンからドラフト記事を作成し、記事の新しいドラフトマスタバージョン ID を返します。
署名public static String editArchivedArticle(String articleId)
パラメータarticleId
型: String
戻り値型: String
例
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
44
editArchivedArticle(String)Apex および REST API を使用した記事の管理
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, Booleanunpublish)
パラメータarticleId
型: String
language
型: String
unpublish
型: Boolean
戻り値型: String
例
String articleId = 'Insert article ID';String language = 'fr';String id = KbManagement.PublishingService.editPublishedTranslation(articleId, language,true);
publishArticle(String, Boolean)
記事を公開します。flagAsNewが trueに設定されている場合は、記事をメジャーバージョンとして公開します。
45
editPublishedTranslation(String, String, Boolean)Apex および REST API を使用した記事の管理
署名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)
パラメータarticleId
型: String
versionNumber
型: Integer
戻り値型: String
例
String articleId = 'Insert article ID';String id = KbManagement.PublishingService.restoreOldVersion (articleId, 1);
46
restoreOldVersion(String, Integer)Apex および REST API を使用した記事の管理
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)
公開準備完了のドラフト翻訳を「処理中」状況に戻します。
署名public static Void setTranslationToIncomplete(String articleVersionId)
パラメータarticleVersionId
型: String
戻り値型: Void
例
String articleVersionId = 'Insert article ID';KbManagement.PublishingService.setTranslationToIncomplete(articleVersionId);
47
scheduleForPublication(String, Datetime)Apex および REST API を使用した記事の管理
submitForTranslation(String, String, String, Datetime)
指定された言語への記事の翻訳を申請します。さらに、指定されたユーザと期日も申請に割り当て、ドラフト翻訳の新しい ID を返します。
署名public static String submitForTranslation(String articleId, String language, StringassigneeID, Datetime dueDate)
パラメータarticleId
型: String
language
型: String
assigneeID
型: String
dueDate
型: Datetime
戻り値型: String
例
String articleId = 'Insert article ID';String language = 'fr';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>
48
submitForTranslation(String, String, String, Datetime)Apex および REST API を使用した記事の管理
形式JSON、XML
HTTP メソッドPATCH
認証Authorization: OAuth accesstoken
パラメータ
説明パラメータ記事の公開の状況。archivedを使用します。publishStatus
記事をアーカイブする日付。archiveScheduleDate
リクエストボディの例アーカイブ:
{"publishStatus":"Archived"}
アーカイブのスケジュール (GMT 日付形式を使用):
{"archiveScheduleDate" : "2012-04-19T07:00:00.000+0000"}
レスポンスボディの例既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。
翻訳に関連するタスクを割り当てる期日や説明を含む、翻訳記事のタスクをユーザに割り当てます。各アクションは、リソースで要求する項目変更によって定義されます。URI
/services/data/v25.0/knowledgeManagement/articleVersions/translations/<translationVersionId>
形式JSON、XML
49
翻訳に関連するタスクを割り当てるApex および REST API を使用した記事の管理
HTTP メソッドPATCH
認証Authorization: OAuth accesstoken
パラメータ
説明パラメータマスタ記事をユーザ ID に割り当てます。assigneeId
タスクの期日。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
認証Authorization: OAuth accesstoken
50
マスタ記事に関連するタスクを割り当てるApex および REST API を使用した記事の管理
パラメータ
説明パラメータマスタ記事をユーザ ID に割り当てます。assigneeId
タスクの期日。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 が返されます。
51
記事のマスタバージョンを削除する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
52
記事の翻訳バージョンを削除するApex および REST API を使用した記事の管理
パラメータ
説明パラメータ記事の ID。articleId
リクエストボディの例
{"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
パラメータ
説明パラメータ記事の公開の状況。onlineを使用します。publishStatus
記事のバージョン。versionNumber
記事を公開する日付。publishScheduleDate
53
記事のマスタバージョンを公開するApex および REST API を使用した記事の管理
リクエストボディの例マイナーバージョンの公開:
{"publishStatus":"Online"}
メジャーバージョンの公開:
{"publishStatus":"Online""versionNumber":"NextVersion"}
公開のスケジュール (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
パラメータ
説明パラメータ記事の ID。articleId
54
記事のアーカイブバージョンを復元するApex および REST API を使用した記事の管理
説明パラメータ記事のバージョン。この項目を指定しないと、アーカイブ済み記事の最新バージョンが復元されます。
versionNumber
リクエストボディの例
{"articleId":<articleID>("versionNumber":<number>)}
記事のメタデータを取得する記事のメタデータを取得します。URI
/services/data/v25.0/knowledgeManagement/articles/<articleId>
形式JSON、XML
HTTP メソッドGET
認証Authorization: OAuth accesstoken
パラメータなし
リクエストボディの例不要
記事のバージョンを取得する記事のバージョン ID を取得します。URI
/services/data/v25.0/knowledgeManagement/articleversions/masterVersions/<articleVersionId>
55
記事のメタデータを取得するApex および REST API を使用した記事の管理
形式JSON、XML
HTTP メソッドGET
認証Authorization: OAuth accesstoken
パラメータなし
リクエストボディの例不要
マスタバージョンのメタデータ要素を検索する記事のオンラインマスタバージョンのメタデータ要素を検索します。URI
/services/data/v25.0/knowledgeManagement/articleVersions/masterVersions?filterArticleId=value1&FilterPublishStatus=value2
形式JSON、XML
HTTP メソッドGET
認証Authorization: OAuth accesstoken
例次の例では、マスタ記事「kA0x50000000jsh」のオンラインバージョンを検索します。
/services/data/v25.0/knowledgeManagement/articleVersions/masterVersions?filterArticleId=kA0x50000000jsh&filterPublishStatus=online"
翻訳バージョンのメタデータ要素を検索する記事の翻訳バージョンのメタデータ要素を検索します。
56
マスタバージョンのメタデータ要素を検索するApex および REST API を使用した記事の管理
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
パラメータ
説明パラメータ完了している翻訳に対して、この値を trueに設定します。complete
57
翻訳記事のバージョンを完了に設定するApex および REST API を使用した記事の管理
リクエストボディの例
{"complete":"true"}
レスポンスボディの例既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。
翻訳記事のバージョンを未完了に設定する翻訳記事のバージョンを未完了に設定します。URI
/services/data/v25.0/knowledgeManagement/articleVersions/translations/<translationVersionID>
形式JSON、XML
HTTP メソッドPATCH
認証Authorization: OAuth accesstoken
パラメータ
説明パラメータ翻訳を未完了に設定するには、この値を falseに設定します。complete
リクエストボディの例
{"complete":"false"}
レスポンスボディの例既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。
58
翻訳記事のバージョンを未完了に設定するApex および REST API を使用した記事の管理
記事の翻訳を申請する記事の翻訳を申請して、オンラインバージョンを保持します。指定した言語の翻訳がすでに存在する場合は、コピーするか、新しいドラフト翻訳を作成します。公開の各アクションは、リソースで要求する項目変更によって定義されます。URI
/services/data/v25.0/knowledgeManagement/articleVersions/translations
形式JSON、XML
HTTP メソッドPOST
認証Authorization: OAuth accesstoken
パラメータ
説明パラメータ記事 ID。articleID
言語の ISO コード。language
リクエストボディの例
{"articleId":<articleID>"language":"fr"}
記事のマスタバージョンを非公開にする既存のドラフト記事がない場合、記事のオンラインマスタバージョンを非公開にします。公開の各アクションは、リソースで要求する項目変更によって定義されます。マスタバージョンを非公開にするには、"publishStatus":"draft"を使用します。URI
/services/data/v25.0/knowledgeManagement/articleVersions/masterVersions/<versionId>
59
記事の翻訳を申請するApex および REST API を使用した記事の管理
形式JSON、XML
HTTP メソッドPATCH
認証Authorization: OAuth accesstoken
パラメータ
説明パラメータ記事の公開の状況。draftを使用します。publishStatus
リクエストボディの例
{"publishStatus":"draft"}
レスポンスボディの例既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。
翻訳記事のオンラインバージョンを非公開にする翻訳記事のオンラインバージョンを非公開にします。公開の各アクションは、リソースで要求する項目変更によって定義されます。オンライン状態から翻訳を編集および削除するには、"publishStatus":"draft"を使用します。URI
/services/data/v25.0/knowledgeManagement/articleVersions/translations/<translationVersionID>
形式JSON、XML
HTTP メソッドPATCH
認証Authorization: OAuth accesstoken
60
翻訳記事のオンラインバージョンを非公開にするApex および REST API を使用した記事の管理
パラメータ
説明パラメータ記事の公開の状況。draftを使用します。publishStatus
リクエストボディの例
{"publishStatus":"draft"}
Salesforce Object Query Language を使用して参照統計を更新するUPDATE VIEWSTAT句は、Salesforce ナレッジの記事の検索および参照についてレポートするためにSELECTステートメントで使用します。開発者は、記事の参照統計を更新できます。次の構文を使用して、オンラインでアクセスできるすべての記事の参照カウントを増加できます。
SELECT Title FROM FAQ__kavWHERE PublishStatus='online' andLanguage = 'en_US' andKnowledgeArticleVersion = 'ka230000000PCiy'UPDATE VIEWSTAT
Salesforce Object Search Language を使用して検索キーワードを追跡するUPDATE TRACKING句は、Salesforce ナレッジの記事の検索および参照についてレポートするために使用します。開発者は、Salesforce ナレッジの記事の検索で使用するキーワードを追跡できます。次の構文を使用して、Salesforce ナレッジの記事の検索で使用するキーワードを追跡できます。
FIND {Keyword}RETURNING KnowledgeArticleVersion (Title WHERE PublishStatus="Online" and language="en_US")UPDATE TRACKING
Salesforce Object Search Language を使用して記事の参照統計を更新するUPDATE VIEWSTAT句 (省略可能) は、Salesforce ナレッジの記事の検索および参照についてレポートするために使用します。開発者は、記事の参照統計を更新できます。
61
Salesforce Object Query Language を使用して参照統計を更新する
Apex および REST API を使用した記事の管理
次の構文を使用して、オンラインで英語でアクセスできるすべての記事の参照カウントを増加できます。
FIND {Title}RETURNING FAQ__kav (Title WHERE PublishStatus="Online" andlanguage="en_US" andKnowledgeArticleVersion = 'ka230000000PCiy')UPDATE VIEWSTAT
62
Salesforce Object Search Language を使用して記事の参照統計を更新する
Apex および REST API を使用した記事の管理
top related