Chatterへの投稿
前回はレポートを取得するワークフローについてご紹介しました。もし見逃したという方は「レポートの実行と結果の取得」も併せてご覧ください。
見積書作成などSalesforceの情報を基にした事務では、定型の依頼書が添付されていなかったり内容に不備がみつかることがあるため、予めチェックし不備が見つかるとChatterで担当者に通知をしている。こうしたチェックや連絡は、事務の効率を下げ時間のロスにつながっている・・・。
こういった「定型的な不備チェックと担当者へのChatter通知」に悩まれたことはないでしょうか。
開発コストとの兼ね合いでSalesforceにチェック機能を実装せず、手作業で補うケースもよく耳にします。
基本機能による不備チェックと組合せれば、前捌き作業から解放されると思います。
Chatterのオブジェクト構造
Chatter(FeedItem) のオブジェクト構造を確認しておきましょう。
Chatterは様々な場面で「コミュニケーション手段」「履歴の記録手段」として利用できるよう提供されており、様々なオブジェクトと関連づけられるようになっています。 図の「関連先オブジェクト」や添付ファイルなどがその例です。
オブジェクトの世界ではChatterは「フィード(FeedItem)」と呼ばれます。
オブジェクトの構造からフィードを投稿するには、"関連オブジェクト"のIDを先に特定する必要があることがわかります。またファイルを添付するには、先にフィードを投稿しておく必要があることもわかります。
以降でお届けするChatterの操作方法は、これまでお届けしてきたオブジェクトへの直接操作方法(登録、更新など)とは、一部異なる部分がありますので、合わせてご紹介します。
メッセージの投稿
商談に関連付けてChatterを投稿するワークフロー作成します。
投稿するメッセージとワークフローの全体像は次の通りです。
なお、商談は予めSalesforceに登録されている必要がありますので、ない場合はWeb画面から準備してください。
Activityの設定方法を中心にお届けしているため、Salesforceアプリケーションスコープの設定やエラー制御は含まれておりませんのでご了承ください。
個別にプロパティの設定内容を見てみます。
①Chatterを関連付ける商談レコードのIDを特定します。
-
SOQL詳細:
SELECT Id,Name FROM Opportunity WHERE Name = 'サンプル商談' AND Account.Name = 'サンプル株式会社'
- Id,Name(商談名)を商談(Opportunity)オブジェクトから取得するSOQLです
- レコードの絞込条件として、
- 特定の商談名であること
- 特定の取引先名であること
- Salesforceステータスは必要に応じて設定します。
※本例では設定していますが、後続では使用しません。 - SOQLの結果を格納するため変数を設定します。
- 変数の型はDataTableです。
- DataTable内の列はSELECTの項目名になるため、Id,Nameの2列になります。
②Chatterに投稿するメッセージを変数に編集します。
- メッセージ雛型を変数にセットします。
左辺:
sfdcChatterBody
右辺:JObject.Parse("{ body : { messageSegments : [ { type : 'Text', text : '' } ] }, feedElementType : 'FeedItem', subjectId : '' }")
- 左辺の変数名は任意のものでOKです
- 右辺はメッセージ内容によらず共通ですので、コピーしてご利用ください
- 関連付ける商談レコードのIDをメッセージ雛型に差し込みます。
左辺:
sfdcChatterBody("subjectId")
右辺:sfdcOpportunityList(0)("Id").ToString()
- ②-1メッセージ雛型にある「subjectId : '' 」の''内に、商談レコードのIDを差し込んでいます
- 左辺の「("subjectId")」は常に固定です
- 右辺は商談レコードのIDを指定しています
- メッセージ本文を雛型に差し込みます。
左辺:
sfdcChatterBody("body")("messageSegments")(0)("text")
右辺:" こんにちは。¥nテストです。"
- ②-1メッセージ雛型にある「text : ''」の''内に、メッセージ本文を差し込んでいます。
- 左辺の「("body")("messageSegments")(0)("text")」は固定です
- 右辺は投稿したい任意のメッセージです。メッセージ本文に改行を含める場合は改行の位置に「¥n」を入れる必要があります
③Chatterにメッセージを投稿します
- ②で編集したメッセージを設定します。
sfdcChatterBody.ToString()
- メッセージを格納した変数名に「.ToString()」を付けます
- 固定値「"application/json"」を設定します。
- 固定値「Post」を選択します。
- 固定値「"/services/data/v46.0/chatter/feed-elements"」を設定します。
- 固定値「JSON」を選択します。
- 必要に応じて設定します。
※本例では設定していますが、後続では使用しません。
これで完成です。ワークフローを実行してみてください。商談のChatterにメッセージが登録されていれば成功です。
メンションの入れ方
メンションつきのメッセージをChatterに投稿するワークフロー作成します。 投稿するメッセージとワークフローの全体像は次の通りです。
なお、本節は前節の続きとなっておりますので、以降で説明していない部分は前節をご参照ください。
個別にプロパティの設定内容を見てみます。
①メンションするユーザのIDを特定します。
-
SOQL詳細:
SELECT Id,UserName FROM User WHERE Name = 'テスト 一郎'
- Id,ユーザ名(UserName)をユーザ(User)オブジェクトから取得するSOQLです
- レコードの絞込条件として、 氏名を指定しています。他の条件でもOKです。
例1(従業員コードから絞り込みむ場合):
WHERE EmployeeNumber = '123456'
例2(ユーザ名から絞り込む場合):
WHERE UserName = 'sample@example.com'
- SELECTの項目「UserName」は後続で使用しませんが、デバッグ時に確認の補助となるため入れています
- Salesforceステータスは必要に応じて設定します。
※本例では設定していますが、後続では使用しません。 - SOQLの結果を格納するため変数を設定します。
- 変数の型はDataTableです。
- DataTable内の列はSELECTの項目名になるため、Id,UserNameの2列になります。
②メンション付きのメッセージを編集します。
- メッセージ雛型を変数にセットします。
左辺:
sfdcChatterBody
右辺:JObject.Parse("{ body : { messageSegments : [ { type: 'Mention', id: '' }, { type : 'Text', text : '' } ] }, feedElementType : 'FeedItem', subjectId : '' }")
- 左辺の変数名は任意のものでOKです
- 右辺は前節の共通設定内容に「{ type: 'Mention', id: '' },」が加わります
- 関連付ける商談レコードのIDをメッセージ雛型に差し込みます。詳細は前節ご参照ください。
- メンションするユーザのIDを差し込みます。
左辺:
sfdcChatterBody("body")("messageSegments")(0)("id")
右辺:sfdcMentionUserList(0)("Id").ToString()
- ②-1メッセージ雛型にある「id: ''」の''内に、ユーザのIDを差し込んでいます。
- 左辺の「("body")("messageSegments")(0)("id")」は固定です
- 右辺はユーザレコードのIDを指定しています
- メッセージ本文を雛型に差し込みます。
左辺:
sfdcChatterBody("body")("messageSegments")(1)("text")
右辺:" こんにちは。¥nテストです。"
- ②-1メッセージ雛型にある「text : ''」の''内に、メッセージ本文を差し込んでいます。
- 左辺の「("body")("messageSegments")(1)("text")」は固定です。前節と「(1)」が異なります。
- 右辺は前節と同じです。
これで完成です。ワークフローを実行してみてください。メンション付きメッセージがChatterに投稿されていれば成功です。
ファイルの関連付け
ファイルを添付したメッセージをChatterに投稿するワークフロー作成します。
ワークフローの全体像は次の通りです。
なお、本節は前節の続きとなっておりますので、以降で説明していない部分は前節をご参照ください。
個別にプロパティの設定内容を見てみます。
①ファイルをアップロードします。
- Salesforce上でのフィアルのタイトルを設定します。
- タイトルは任意でOKです。本例では"サンプルファイル_20201221-100500"といった名称になるよう「String.Format("サンプルファイル_{0:yyyyMMdd-hhmmss}", DateTime.Now)」を設定しています
- アップロードするファイルのパスを設定します。
- パスは任意でOKです。
- 必要に応じて変数を設定します。
※本例では設定していますが、後続では使用しません。 - アップロードしたファイルバージョンのIDを格納する変数を設定します。
- アップロードしたファイルのIDを格納する変数を設定します。
②ファイルを商談に関連付けます。
- アップロードしたファイルのIDが納された変数を設定します。
- 関連付ける商談レコードのIDを設定します。
sfdcOpportunityList(0)("Id").ToString()
- 公開範囲を設定します。
- 例は「AllUsers」を設定しています。選択肢は次の通りです。
AllUsers: ファイル参照権限を持つ全ユーザ
InternalUsers:ファイル参照権限を持つ内部ユーザ
SharedUsers:フィードを表示できる全ユーザ
- 例は「AllUsers」を設定しています。選択肢は次の通りです。
- 公開ユーザの編集権限を設定します。
- 例は「V」を設定しています。選択肢は次の通りです。
V: 閲覧者権限
C: 共同作業
I: 関連レコードに対するユーザの許可から推測
- 例は「V」を設定しています。選択肢は次の通りです。
- 必要に応じて変数を設定します。
※本例では設定していますが、後続では使用しません。
③アップロードしたファイルとChatterに投稿したメッセージを関連付けます。
- 登録対象のオブジェクト「FeedAttachment」を選択します。
- 登録対象の項目を選択する子ウインドウを開き、次の項目を選択します。 RecordId(添付レコードID)、Type(フィード添付種別)、FeedEntityId(フィードエンティティID)
- 各項目に登録する値を設定します。
- RecordId(添付レコードID)は、アップロードしたファイルバージョンのIDを設定します
- Type(フィード添付種別)は、固定値「"Content"」を設定します
- FeedEntityId(フィードエンティティID)は、Chatterに投稿したメッセージのIDで「Ctype(JObject.Parse(sfdcResponse)("id"), String)」を設定します
これで完成です。ワークフローを実行してみてください。添付ファイル付きメッセージがChatterに投稿されていれば成功です。
まとめ
今回はChatterにメッセージを投稿するワークフローをお届しました。
皆様のワークフロー開発の一助になれば幸いです。
Activityの公開先 (UiPatマーケットプレイス):
Salesforce連携ソリューションご案内:
その他連携ソリューションご案内:
https://www.uipath.com/ja/solutions/application-cooperation-solutions
次回は「メール操作」をおこなうワークフローをお届けします。お楽しみに。
