見出し画像

【Salesforce】ApexからChatter投稿

こんにちは!
最近、ApexからChatterへ投稿、コメントする機会があったので、その際に学んだことを綴っておきます!

Chatterへの投稿方法

今回僕が学んだのは、新規投稿する方法と、既存の投稿にコメントする方法です!
ポイントは「ConnectApi
そして新規投稿かコメントするのかによってソースの書き方が変わってきます!

新規投稿

Chatterへ新規投稿する際の基本的なソースは以下の通りです!

    FeedItem post = new FeedItem();   // 新規作成
    post.IsRichText = True;           // Trueの場合HTMLタグが使用できます。
    post.Body = 'This is New Post';      // 投稿内容
    post.Body += '<p>&nbsp;</p>Hello';// ※1
    post.ParentId = '投稿先のId';        // ChatterグループのId、オブジェクトのレコードId等
    post.Title = 'New Title';         // 件名(省略可)
    insert post;                      // 投稿

post.IsRichText = 'True'; とすることで投稿にリッチテキストを含めることができ、いくつかのHTMLタグがサポートされるようになります!

※1では改行のために「<p>&nbsp;</p>」を使用しています。
リッチテキストでは<br/>が使用できないため、<p>タグの中に改行コードを記載して代用しています!

<br> タグはサポートされませんが、<p>&nbsp;</p> を使用して行を作成できます。

投稿先のIdをオブジェクトのレコードIdに指定すると、レコードページのChatterに投稿されます!

スクリーンショット 2021-11-14 18.37.42

また、トピックを加えた投稿をしたい場合、post.Bodyに’#’を加えることで可能になります!

    FeedItem post = new FeedItem();   // 新規作成
    post.IsRichText = True;           // Trueの場合HTMLタグが使用できます。
    post.Body = 'This is New Post';      // 投稿内容
    post.Body += '<p>&nbsp;</p>';          // ※1
    post.Body += '#' + 'トピック';       // トピックにしたい内容
    post.ParentId = '投稿先のId';        // ChatterグループのId、オブジェクトのレコードId等
    post.Title = 'New Title';         // 件名(省略可)
    insert post;                      // 投稿

スクリーンショット 2021-11-14 18.49.39

コメント

既存の投稿にコメントしたい場合の基本的なソースは以下の通りです!

    String communityId = null;                // 宣言しなくても大丈夫
    String feedElementId = '000XXXXX・・・';           // コメントしたいChatterのId
    
    ConnectApi.CommentInput commentInput = new ConnectApi.CommentInput();
    ConnectApi.MessageBodyInput messageBodyInput = new ConnectApi.MessageBodyInput();
    ConnectApi.TextSegmentInput textSegmentInput = new ConnectApi.TextSegmentInput();
    
    messageBodyInput.messageSegments = new List<ConnectApi.MessageSegmentInput>();
    
    textSegmentInput.text = 'コメント1';
    messageBodyInput.messageSegments.add(textSegmentInput);
    
    commentInput.body = messageBodyInput;
    
    ConnectApi.Comment commentRep = ConnectApi.ChatterFeeds.postCommentToFeedElement(communityId, feedElementId, commentInput, null);
    
}

postCommentToFeedElement(・・・)でコメント先やコメントの中身を指定します。

communityIdは「null」とすることも可能です!
postCommentToFeedElement(null, feedElementId, commentInput, null);

コメントのBodyはListになっているので、複数の内容をコメントに含めることが可能です!
ですが、ここで新規投稿とコメントで僕が苦戦した点があります!
それはコメントの改行です!

コメント時は新規投稿とは異なりConnectApi.TextSegmentInputにおいてHTMLタグが考慮されません。
<p>&nbsp;</p>と記載しても改行されず、文字列そして表示されてしまいました。。。

そのため、下記のようにして改行をしました!

ConnectApi.TextSegmentInput comment01 = new ConnectApi.TextSegmentInput();
ConnectApi.TextSegmentInput comment2 = new ConnectApi.TextSegmentInput();
ConnectApi.TextSegmentInput Kaigyo = new ConnectApi.TextSegmentInput();

messageBodyInput.messageSegments = new List<ConnectApi.MessageSegmentInput>();
    
comment01.text = 'コメント1';
comment02.text = 'コメント2';
Kaigyo.text = '\n';

messageBodyInput.messageSegments.add(comment01);
messageBodyInput.messageSegments.add(Kaigyo);
messageBodyInput.messageSegments.add(comment02);

'\n'を2個連続でaddすれば空白の1行を挿入することも可能です!

スクリーンショット 2021-11-14 19.35.42

まとめ

Chatterへの新規投稿とコメントではソースの書き方が大きく変わってきます。僕は新規投稿の方がソースがスッキリしてるので書きやすいです!笑

今回は一番ベーシックな投稿、コメントの仕方でしたが、他にも画像を添付したコメント、コードブロックを追加したコメントなど複数やり方はあるようです!!

インライン画像を含むリッチテキストコメントの投稿
コードブロックを含むリッチテキストフィード要素の投稿

Chatterを使用する機会は多いと思うので、これらを覚えればいろんなところで活用できそうです!


ではまた次の記事でお会いしましょう😎

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ここまで見てくださりありがとうございます。

♡をくださると、次の記事の励みになります!!

こんな内容で困っている、こんなこと知りたいなどご意見があれば
是非是非コメントお待ちしています☆

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


この記事が気に入ったらサポートをしてみませんか?