D365 Customer Insights を自社営業チーム(Customer Zero)で使う②セグメントを作る の続きです。
Customer0で過去90日以上、接触活動がない顧客を抽出をして活動推奨を送ることも想定していて、そのような顧客をセグメントするために D365 Sales をカスタマイズする - 自社営業チーム(Customer Zero)向け①準備で最終活動日という項目を追加していました。
しかし、Power Automateは実行されておらず、以下のことが分かりました。
「activitypointer」エンティティに対してトリガー登録(callback registration)を行うことはDataverseの仕様上できません。
これはactivitypointerが実体を持つ通常のテーブルではなく、task(タスク)・phonecall(電話)・email(メール)・appointment(予定)など複数の活動テーブルを横断して見せるための抽象・集約ビューだからです。Power AutomateのDataverseトリガー(「行が追加、変更、削除された場合」)は、こうした抽象エンティティの変更を直接検知する仕組みには対応していません。「テーブル:活動(activitypointers)」と指定していましたが、これ自体がそもそも実装不可能な設計だった、ということになります。
対処方法
activitypointer1本ではなく、具体的な活動テーブルごとに個別のトリガーを用意する必要があります。
C-6フローを編集画面で開く
現在の「行が追加、変更、削除された場合」トリガーの対象テーブルを、activitypointerから実体のあるテーブル(例:タスク(task))に変更
同じロジック(statecode=1で関連Accountを更新)を、必要な活動種別の数だけ複製する
タスク(task)
電話(phonecall)
Eメール(email)
予定(appointment)
正
1つフローを追加します。

Opportunityテーブルで行IDはregarding(値)を選択
3つ目のフローも書き換えが必要、行IDをPotential Customerにします。

テストしてみましたが、きちんと反映されているので成功です。

C-6(タスク版)が正しく動いているので、これを土台に複製していきましょう。
複製の手順(電話・Eメール・予定 共通)
C-6フロー一覧で、動作確認済みの「C-6 最終活動日書き戻し」(タスク版)を開く
右上の「…」(その他のオプション)→「名前を付けて保存」(Save As)で複製
フロー名を命名規則に合わせて変更
C-6 最終活動日書き戻し(電話)
C-6 最終活動日書き戻し(Eメール)
C-6 最終活動日書き戻し(予定)
トリガー「行が追加、変更、削除された場合」のテーブル名だけを変更
電話(phonecall)
電子メール(email)
予定(appointment)
「ID で行を取得する」(Opportunity取得)と「行の更新」(Account書き戻し)のロジックはそのまま流用(変更不要)
保存してテスト実行
一点だけ注意してほしいこと
今回のロジックは「その活動の関連先(Regarding)がOpportunityであること」を前提にしています。ただ、電話・Eメール・予定は、タスクよりも直接AccountやContactに関連付けられるケースが多い可能性があります。もし関連先がOpportunityではなくAccount自体だった場合、「ID で行を取得する」ステップが「営業案件」テーブルで検索しようとしてエラーになります(以前と同様のEntity Not Foundパターン)。
テーブル名とテーブルの論理名が正しく設定されているかが大切ですので注意してください。
