良カテゴリ:Force.com皆さんこんにちは、第一ソリューション部の石川です。Apexに関する記事となります。外部のお客様・エキスパートとのコミュニケーションにも使えてとても便利ですね。新バージョンのリリースがある度に様々な機能が追加されるChatterですが、ご要望によってはコメントのやりとりだけに機能制限したい場合や、ちょっとUIをいじりたいという方もいらっしゃるかと思います。Apexを利用することでカスタマイズが可能です。出来ることはいっぱいあるのですがChatterをカスタマイズするなら間違いなく使うであろう「メンション」と「フィードの取得」に絞って説明していきます。APIという名称もありまして、公式ドキュメントでも両方の名称で使われています。1.メンションChatterの標準画面では「@ユーザ名」で出来る機能ですね。日本語など全角入力の文字では途中で半角スペースを入れないと宛先の候補が出来なかったり、敬称がデフォルトで付かないのでカスタマイズしたい人は多いのではないでしょうか?今回のサンプルでは選択リストより、ユーザを選択してメンション出来るようにしています。feedItemInput);}}19行目postFeedItemメソッドからはChatterに投稿する為のフィードアイテムを作成しています。見慣れないクラスのインスタンスを作っていますが、説明は以下となります。ConnectApi.FeedItemInput・・・このクラスのプロパティに値を設定してフィードアイテムを作成します。ConnectApi.MessageBodyInput・・・Chatterの入力部にあたるクラスです、プロパティであるmessageSegmentsは入力用クラスのスーパークラスのListです。31行目、36行目にて画面で入力したメンション先・本文の要素を追加しています。ConnectApi.MentionSegmentInput・ConnectApi.TextSegmentInput・・・messageSegmentsに追加している要素です。メンション先にはユーザID、本文にはテキストを入れています。40行目にConnectApi.FeedItemInputのプロパティとしてsubjectIdがありますが、これは投稿先となります。今回はChatterのデフォルトのフィードに投稿しますのでログインユーザのIDを設定しています。ConnectApi.FeedItemInputのプロパティに諸々の値を代入したらConnectApi.ChatterFeeds.postFeedElementのメソッドを使い投稿完了です。引数のNetwork.getNetworkId()は投稿先を組織の中かコミュニティかを指定する為の引数となります。次はフィードの取得とパースによって必要な情報を抽出する処理となります。サンプルソースではChatterのデフォルトのフィードを取得していますが、取得用のメソッドはいくつかあるので自由に取得出来ます。パースのやり方は取得方法が変わっても基本的には同じはずなので参考になるかと思います。それからフィードとフィードアイテムの違いが分かりにくいかも知れませんが、フィードアイテムが集まったものがフィードと呼ばれています。サンプルソースは以下のようになっています。mentionSeg.Name;}}}}9行目ConnectApi.ChatterFeeds.getFeedElementsFromFeedでフィードを取得しています。ここは引数に違和感がありますね。ConnectApi.FeedTypeはフィードの種別を表します、サンプルでは「New」でログインユーザが標準のChatterで見れるフィードを表しています。次の引数の'me'ですが、この引数にはどのフィードかを表すIDが本来入ります。レコードのフィードでしたらレコードIDです。今回はログインユーザのフィードの取得なので'me'を入れる必要がありました。ちなみにユーザIDでもOKです。次に取得したフィードの要素をパースしています。75行目のConnectApi.MessageSegmentはフィードアイテムの入力部の要素なのでinstanceofを使って本文かメンションなのかを判別しています。フィードアイテムのプロパティの中にはコメント要素も入っていますので50行目からはコメントをパースしています。3.動き殺風景ですが実際のVFはこのようになっています。文章入力して送信するとこうなります。実際のChatterだとこうなっています。Apexで取得できるのはChatterにならった情報になるということです。Apexでも同じ取得結果になります。今回のフィードの取得を画面表示したものが以下となります。1枚目のキャプチャと同じでコメントが3件しか入っていないのが確認出来ます。標準のChatterで詳細を見えるということは詳細を取得するメソッドもあります。いいね!なども同様にまず省略されて取得されます。4.まとめSalesforceのエンハンスとしてユーザ間のコミュニケーションを促したいという話をよく耳にします。Chatterをカスタマイズは手が出にくいイメージが結構あると思うので今回記事にしてみました。開発の手助けになれば幸いです。最後に、冒頭にも述べましたがChatterはどんどんバージョンアップしていく機能なのでAPIバージョンにはお気を付け下さい。本記事ではver.38で作成しています。検索クラウドやるならテラスカイ。求む!Salesforce開発エンジニア。