tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:プロセスビルダーでChatter投稿機能を実装するときのポイント

Salesforceのプロセスビルダーを利用するとChatterに投稿する機能を簡単に実装できます。
f:id:tyoshikawa1106:20170709211214p:plain


例えばカスタム項目Chatter共有にチェックをつけて保存したときにセールスのグループに共有する機能を実装しました。
f:id:tyoshikawa1106:20170709211649p:plain


こんな感じです。
f:id:tyoshikawa1106:20170709211749p:plain


Chatter投稿の実行条件を作成したタイミングではなく、項目が特定の値で更新されたらとすることで、一度必須項目のみ入力して時間のあるときに詳細を入力しChatterに共有するといったオペレーションが可能になります。


特定の条件が無い場合はチェックボックス型にしておくのがわかりやすくていいと思います。
f:id:tyoshikawa1106:20170709212124p:plain


自動投稿した内容にコメントを入れたりすることで情報共有がやりやすくなります。
f:id:tyoshikawa1106:20170709212547p:plain


ここで注意点です。Chatter共有にチェックをつけて保存するとセールスグループに自動投稿する仕組みが追加してみました。そんな組織でデータの一括更新が行われます。
f:id:tyoshikawa1106:20170709212801p:plain


その結果・・・こんなことになります。
f:id:tyoshikawa1106:20170709212858p:plain


過去に登録された取引先をChatter投稿する必要はなかったのですが、Chatter共有にチェックがある状態で保存すると実行の条件があるせいで大量に不要な投稿が行われてしまいました。


数十件程度だったら笑い話ですが、数百件、数千件でこれをやってしまうと悲しいことになると思います。こんな悲しい事態を発生させないためには、実行条件にある「レコードに指定の変更が行われた場合にのみアクションを実行しますか?」のオプションで「はい」にチェックを付けます。
f:id:tyoshikawa1106:20170709213527p:plain


このチェックをつけることでChatter共有のチェックがFalseからTrueになったタイミングでのみ実行されるようになります。データの一括更新作業に影響がでることはありません。
f:id:tyoshikawa1106:20170709213808p:plain

f:id:tyoshikawa1106:20170709213914p:plain


チェックが付いていたら更新してはいけないなどのルールで回避しようといった方法を考える場合もあるかもしれませんが、管理の引き継ぎなどでそのルールが引き継がれずデータの一括更新が行われてしまうといったリスクが考えられます。


特定の条件で自動実行する処理を実装するときはこの値変更の有無までチェックすることでより安全で使いやすいシステムにできると思います。これはプロセスビルダーだけではなくApexトリガでも同じだと思います。システムを運用していると新しい項目が追加されたりして過去データの更新が必要になることがかならずでてきます。そうしたときに自動実行機能があるから実施できませんということにならないように考慮しておく必要があります。

Chatterグループへの誤投稿の修復方法

残念なことにChatterグループへの大量誤投稿が行われてしまった場合、それを削除する必要があります。1人の作業者が手動で1件ずつ削除していった場合、2時間ぐらいで100〜200件ぐらいは削除できる...かもしれません。なので500件ぐらいなら4〜5時間ぐらいで削除できると思います。ですが実際の所そんな時間と気力がある人はあまりいないと思います。。そこで思いつくのはSOQLとApexをつかって一括削除する方法です。実際に試したことは無いのですがこれは絶対に辞めたほうがいいと思います。もしWHERE条件に失敗して組織のすべての投稿が削除された場合、取り返しがつきません。


カスタムレポートタイプを作成することでChatterグループの誤投稿を抽出するレポートを作成できます。
f:id:tyoshikawa1106:20170709215854p:plain


グループの名前、作成者、作成日などで絞り込むことで絞り込みができると思います。
f:id:tyoshikawa1106:20170709220251p:plain


自動投稿の場合は特定のキーワードが含まれています。それを条件に入れると絞り込みの精度が向上します。
f:id:tyoshikawa1106:20170709220441p:plain


これでレポートを用意できました。
f:id:tyoshikawa1106:20170709220622p:plain



削除するにはレコードIDが必要ですが、必要なのは『フィード投稿 ID』ではなく『フィード項目ID』の項目になります。(※ここまで『フィード投稿 ID』の方でキャプチャを取っていましたが、このタイミングで間違いに気づきました。。)


『0D5』で始まるIDが必要になります。
f:id:tyoshikawa1106:20170709222237p:plain


SOQLクエリでFeedItemオブジェクトの値を見てみるとこちらがレコードIDであることを確認できると思います。
f:id:tyoshikawa1106:20170709222329p:plain


また、フィード項目IDの値はレコードIDになりますのでURLに直接指定すると投稿ページに移動できます。
f:id:tyoshikawa1106:20170709222438p:plain


対象レコードIDを抽出できるレポートを作成できたら後はエクスポートしてデータローダで削除するだけです。
f:id:tyoshikawa1106:20170709222556p:plain


データローダでどのオブジェクトを指定するかはこちらが参考になります。

Salesforce Help - データローダで Chatter の投稿および添付ファイルを削除する方法


FeedItemを削除すればいいのですが、間違いが無いか一度にエクスポートなどで検証を行ってください。Chatter投稿を削除することはほぼありませんが、削除後復元は難しいと思いますので念入りに検証してからが良いと思います。


レポートで抽出すると対象の件数を確認できます。なので関係のないレコードが含まれていないかの確認ができますし、万が一過ちがあってもすべてが消えるといったことは回避できるはずです。


長くなりましたがChatterの大量誤投稿を行ってしまった場合はこんな感じで修復が行えます。

より便利なChatter投稿を行うために

最後にChatterの自動投稿でやっておきたい設定を紹介します。Chatterグループに自動で投稿したい場合は次の設定になると思います。
f:id:tyoshikawa1106:20170709223548p:plain


この場合、Chatterフィードから対象のレコードに移動することができません。なので投稿先を「このレコード」に指定して本文の中にグループメンションを追加します。
f:id:tyoshikawa1106:20170709223803p:plain


これでChatterグループにレコードへのリンクがある状態で投稿することが可能になります。
f:id:tyoshikawa1106:20170709224014p:plain


プロセスビルダーでChatter投稿機能を実装するときはこのあたりを押させておくといいと思います。

参考