Chatter in Apxを利用してコメントをメンション付きで投稿する

タイトル通り。
ChatterのコメントをApex経由で@メンション付きで投稿する。

Chatterコメントは、FeedCommentというオブジェクト名で作成されているので、 このオブジェクトにレコードをインサートすればコメントは作成出来る。 しかしその場合はコメントにそのまま@ユーザ名とつけてもメンションとして認識されない。
そのため、メンションをapex経由でつけるには、Chatter in Apex、ConnectAipを使用する。

コメントの投稿

Chatter in Apexのドキュメントは以下。(英語)
Chatter in Apex

この中で、コメントの投稿には、postCommentToFeedElementメソッドを使う。
以下のサンプルがほぼそのまま。
Post a Comment with a Mention

以下、順番に組み立ててみる。

postCommentToFeedElement

postCommentToFeedElementの引数は以下となっている。

  1. communityId
    投稿するユーザーのコミュニティのID。null可。
  2. feedElementId
    親となる投稿(FeedItem)のSFID
  3. comment
    投稿するコメントの情報
  4. feedElementFileUpload
    投稿するファイルのバイナリ情報

(第二引数)comment

ConnectApi.CommentInput型。
ConnectApi.CommentInput Class

bodyメソッドに本文などの情報を入力する

body

ConnectApi.MessageBodyInput
ConnectApi.MessageBodyInput Class

メソッドは、mesageSegmentsのみ。

mesageSegments

List<ConnectApi.MessageSegmentInput>
ConnectApi.MessageSegmentInputクラスは、入力したい内容の型のクラスが継承している。
テキストの入力内容は、ConnectApi.TextSegmentInputクラスを使用する。
メンションの場合は、ConnectApi.MentionSegmentInputクラス、となっている。

ConnectApi.MessageSegmentInput Class

ConnectApi.TextSegmentInput

textメソッドのみ。ここに投稿する本文を入れる。
ConnectApi.TextSegmentInput Class

ConnectApi.MentionSegmentInput

idメソッドにメンションを送りたいユーザーのIDを入力する。 もしくは、APIバージョン38以降なら、usernameメソッドでユーザー名も利用出来るよう。
ConnectApi.MentionSegmentInput Class

コード

一通りのコード全文は以下。
引数で、入力内容、親の投稿ID、メンションをつけるユーザのIDを渡すようにしている。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
 * コメントを投稿する
 * 
 * @param body String 本文
 * @param feedId Id 親の投稿ID
 * @param userId Id メンションを付ける
 * @return ConnectApi.Comment コメントクラス
 */
public static void doPostComment(String body, Id feedId, Id userId){
  //子の投稿を作る
  ConnectApi.CommentInput commentInput = new ConnectApi.CommentInput();
  ConnectApi.MessageBodyInput messageBodyInput = new ConnectApi.MessageBodyInput();
  messageBodyInput.messageSegments = new List<ConnectApi.MessageSegmentInput>();
  
  //本文を作る
  ConnectApi.TextSegmentInput textSegmentInput = new ConnectApi.TextSegmentInput();
  textSegmentInput.text = body;
  messageBodyInput.messageSegments.add(textSegmentInput);
  //メンションを作る
  ConnectApi.MentionSegmentInput mentionSegmentInput = new ConnectApi.MentionSegmentInput();
  mentionSegmentInput.id = userId;
  messageBodyInput.messageSegments.add(mentionSegmentInput);

  //投稿として追加
  commentInput.body = messageBodyInput;
  
  //コメントを投稿
  ConnectApi.Comment comment = ConnectApi.ChatterFeeds.postCommentToFeedElement(null, feedId, commentInput, null);
  return comment;
}

返却されるConnectApi.Commentクラスは以下。
ConnectApi.Comment Class

参考

   このエントリーをはてなブックマークに追加