[Power Automate][Salesforce]親子オブジェクトの最新の子を複製してレコードを作成する

やりたいこと

Salesforceでレコードを作成するときに、最新のログを複製だけすればよいという場合がある。
ちなみに、Salesforceのレコード複製機能は権限が割り当てられていないため使えないものとする(´・ω・`)

やりたいことは、

  1. 親オブジェクトを何らかの条件で特定する
  2. 特定した親オブジェクトに紐づく子のうち、最新の子のオブジェクトを取得する。
  3. 取得したオブジェクトと同じ内容のレコードを作成する。

 

オブジェクト関係図

商談Aに複数の会話履歴が含まれる。

 

全体フロー

 

 

手順1.ユーザー情報の取得

Power Automate上でレコードを作成するとき、所有者ID(ユーザーの18桁ID)の入力が求められる。
そのため、ユーザーテーブルからメールアドレスを条件にユーザーIDを取得している。

 

 

GUI上ではbodyでしか選択できないため、以下のようにidをピンポイントで取得する。

@{body('SOQL:ユーザーの取得')['records'][0]['id']}

 

手順2.最新の子オブジェクトを取得する

Where句の「wojjyto42jy__c」は子オブジェクト(会話履歴)から親オブジェクト(商談ID)へのルックアップ項目であるが、
エラーを吐いて項目名が変更できなくなってしまったため放置をしている。

Order By と LIMITで最新の1件を取得している。

 

 

手順3.子オブジェクトの詳細情報取得 + 複製レコードの作成まで

手順2.では会話履歴のIDしか取得していないため、全項目取得のため、改めてアクション「レコードの取得」を投げている。
レコードの作成で、取得した情報をどんどこぶちこんでいる。

 

 

アクション数が冗長ではないかというツッコミに対して

SOQLをきちんと使えばアクション「商談の取得」「会話履歴の取得」「会話履歴の詳細取得」を1つにすることができる。
できるが、そうしない理由は4つ

  1. SOQLの実行結果はGUI上「body」でしか選択できないため、レコードの作成時の項目の選択が出来ない。
    (自分で式を立てなければいけない)
  2. 非エンジニアにとってはSQLの存在自体知らない場合も。ゆえになるべくシンプルに記述したい。
  3. SOQLの場合、SELECT句の項目を明示しなければいけないため、特にオブジェクトマネージャーを参照できない場合、項目名(アルファベット表記の方の)を調べるのが面倒くさい。また項目数が多くなるほど記述量が増えるため、面倒くさい。
  4. このフローを子フローにすることで呼び出す側の親フローから見れば1アクションには変わらないので、多少冗長になる分には問題ないかと。