行動の被招集者をテキスト項目に一覧化するフロー詳細

2020/11/23に公開

https://sfblog.markhammer.net/entry/2020/08/01/234703
https://sfblog.markhammer.net/entry/2020/09/06/100000

フロー全体図

フロー全体図

リソース

オブジェクト、項目

  • オブジェクト:行動
    • 項目:同行者(API参照名:doukousya__c

変数

  • var_update_doukousya
    • 被招集者氏名を保存するための変数
    • データ型:テキスト
    • デフォルト値:{!$GlobalConstant.EmptyString}[1]

数式

  • var_eventAttendee_Name
    • 被招集者ユーザ氏名をvar_update_doukousyaにカンマ区切りで追加するための数式
    • データ型:テキスト
    • 数式:{!var_update_doukousya} & {!get_eventAttendee_record.Name} & ","
  • var_event_OwnerName
    • 行動所有者ユーザ氏名をvar_update_doukousyaに追加するための数式
    • データ型:テキスト
    • 数式:{!var_update_doukousya} & {!get_eventOwner_record.Name}
  • var_update_doukousya_100
    • var_update_doukousyaの内容を、同行者項目に最大100文字割り当てるための数式
    • データ型:テキスト
    • 数式:IF(LEN({!var_update_doukousya}) > 100, LEFT({!var_update_doukousya}, 100), {!var_update_doukousya})

EventRelationデータ取得ブロック

EventRelationデータ取得ブロック拡大図

1. 開始要素

行動レコードが新規作成または更新された場合に実行。

トリガ

  • フローをトリガする条件:レコードが作成または更新された
  • フローを実行:レコードが保存された後[2]

オブジェクトを選択

  • オブジェクト:行動
  • 条件の要件:すべての条件に一致(AND)
項目 演算子
IsChild[3] 次の文字列と一致する False
  • 更新されたレコードでフローを実行するタイミング:レコードを更新し、条件の要件に一致するたび

2. レコードを取得(行動の被招集者を取得)

トリガされた行動レコードに設定された被招集者を全て取得。

  • API参照名:get_event_attendee
  • オブジェクト:行動リレーション(EventRelation)
  • 行動の要件:すべての条件に一致(AND)
項目 演算子
EventId 次の文字列と一致する {!$Record.Id}
  • 並び替え順:並び替えなし
  • 保存するレコード数:すべてのレコード
  • レコードデータの保存方法:すべての項目を自動的に保存

被招集者ユーザ情報抽出処理ブロック

被招集者ユーザ情報抽出処理ブロック拡大図

3. ループ(被招集者ごとに処理)

2で取得した被招集者からユーザ氏名を取り出すためのループ。

  • API参照名:loop_eventAttendee
  • コレクション変数:{!get_event_attendee}
  • コレクションを反復処理するための方向:最初の項目から最後の項目へ[4]

矢印の方向

  • 項目ごと:4. 決定(ユーザか否か判定)
  • 最後の項目の後:7. 決定(被招集者有無チェック)

4. 決定(ユーザか否か判定)

被招集者にはユーザの他に取引先責任者、リード、リソースが設定可能なため、ユーザ以外を弾く処理をここで実施する。
結果として「ユーザあり」「ユーザなし」を用意。

  • API参照名:decision_UserRecord

ユーザあり

  • API参照名:yes_UserRecord
  • 結果を実行する条件の要件:すべての条件に一致(AND)
項目 演算子
{!loop_eventAttendee.RelationId} 次の文字列で始まる 005
  • 結果を実行するタイミング:条件の要件を満たす場合

ユーザなし

「ユーザあり」の条件を満たさない場合の結果。

矢印の方向

  • ユーザあり:5. レコードを取得(被招集者のユーザレコード取得)
  • ユーザなし:3. ループ(被招集者ごとに処理)

5. レコードを取得(被招集者のユーザレコード取得)

ユーザ氏名を取得するために、ユーザレコードIdからレコード情報を取得。

  • API参照名:get_eventAttendee_record
  • オブジェクト:ユーザ
  • 行動の要件:すべての条件に一致(AND)
項目 演算子
Id 次の文字列と一致する {!loop_eventAttendee.RelationId}
  • 並び替え順:並び替えなし
  • 保存するレコード数:最初のレコードのみ
  • レコードデータの保存方法:すべての項目を自動的に保存

6. 割り当て(被招集者名を同行者に追加)

被招集者ユーザ氏名をカンマ区切りで変数var_update_doukousyaに追加。

  • API参照名:assign_doukousya_from_Attendee
変数 演算子
var_update_doukousya 次の文字列と一致する {!var_eventAttendee_Name}

被招集者ユーザ情報抽出後処理ブロック

被招集者ユーザ情報抽出後処理ブロック

7. 決定(被招集者有無チェック)

被招集者ユーザ情報抽出処理ブロックにてユーザが1件以上取得できた場合と0件の場合で処理を分けるために配置。
結果として「同行者あり」「同行者なし」を用意。

  • API参照名:decision_eventAttendee

同行者なし

  • API参照名:No_Attendee
  • 結果を実行する条件の要件:すべての条件に一致(AND)
リソース 演算子
{!var_update_doukousya} 次の文字列で始まる {!$GlobalConstant.EmptyString}
  • 結果を実行するタイミング:条件の要件を満たす場合

同行者あり

「同行者なし」の条件を満たさない場合の結果。

矢印の方向

  • 同行者あり:8. レコードを取得(行動所有者のレコードを取得)
  • 同行者なし:10. 割り当て(同行者項目更新)

8. レコードを取得(行動所有者のレコードを取得)

行動リレーション(EventRelation)に被招集者ユーザが登録されている場合は同行者項目に行動所有者ユーザの氏名を追加する要件のため、行動所有者ユーザ氏名取得のために行動所有者のレコードを取得。

  • API参照名:get_eventOwner_record
  • オブジェクト:ユーザ
  • 行動の要件:すべての条件に一致(AND)
項目 演算子
Id 次の文字列と一致する {!$Record.OwnerId}
  • 並び替え順:並び替えなし
  • 保存するレコード数:最初のレコードのみ
  • レコードデータの保存方法:すべての項目を自動的に保存

9. 割り当て(同行者に行動所有者名追加)

行動所有者ユーザ氏名を変数var_update_doukousyaに追加。

  • API参照名:assign_doukousya_from_Owner
変数 演算子
{!var_update_doukousya} 次の文字列と一致する {!var_event_OwnerName}

10. 割り当て(同行者項目更新)

変数var_update_doukousyaの内容を、同行者項目に最大100文字割り当て。

  • API参照名:update_doukousya
変数 演算子
{!$Record.doukousya__c} 次の文字列と一致する {!var_update_doukousya_100}

11. レコードを更新(行動レコード更新)

トリガとなった行動レコードの同行者項目を更新。

  • 更新するレコードを検索してその値を設定する方法:レコードまたはレコードコレクションからの ID およびすべての項目値を使用
  • 更新するレコード:{!$Record}
脚注
  1. 空文字列 ↩︎

  2. 保存前更新の場合、EventRelationに更新後の被招集者が保存されない ↩︎

  3. 何らかの方法で子レコードが編集された際にフローが動作することを防ぐ ↩︎

  4. 任意 ↩︎

GitHubで編集を提案

Discussion