Salesforce: UnofficialSFのConvertToFlowを試してみた

この記事は [Salesforce Advent Calendar 2021 - Qiita](https://qiita.com/advent-calendar/2021/salesforce) 第7日目の投稿です。

## 背景
2021年9月ある日のSalesforce主催でフローのWebセミナー「開発者向けフロー徹底攻略ウェビナー 〜ローコードで広がるSalesforce開発の世界〜」に参加した時、ワークフローをフローに置き換える便利なツール*ConvertToFlow*の存在を知りました。

ワークフローやプロセスビルダーが大量に存在する組織を見たことあるため、これ需要あるのでは？どうやって使うんだろうな！って思ったので試してみました。

今回の記事は、UnofficialSF が開発しているConvertToFlowツールの使い方やサポートされていないこと、使った結果の感想など報告しようと思います。UnofficialSFのConvertToFlowって気になるなー。使えるのかな？実際に使い心地はどうなんだろうって思ってるニッチな人向けとなってます。


## そもそもConvertToFlowってどんなツール？
UnofficialSFが開発した、ワークフロールールやプロセスビルダーをフローに変換してくれる便利なツールです。
（UnofficialSFとは、私の偏見ですがSalesforceの中の人たちが考えたあったら良いなと思うフローコンポーネントやアイデアなどを紹介しております。名前の通り、非公式Salesforceですのでサポートはされておりません。ただ非常に参考になる情報がたくさんありますので、見ていて楽しいサイトです）

ConvertToFlowの解説ページ：
https://unofficialsf.com/the-new-converttoflow-app-migrates-most-of-your-process-builder-processes/


#### ConvertToFlowでサポートされていない機能
ConvertToFlowでは、一部のワークフロールールやプロセスビルダーの機能がサポートされていないです。
2021年12月7日時点ではサイト上に以下のように記載あります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/f1679689-6ed9-84b7-f64e-cce7776bc8e0.png)

雑な日本語翻訳の結果は以下の通り

* generate Before-Save Triggers. [保存前トリガーの生成]
* convert PB Processes that have more than one set of Scheduled Actions on a single row [1つの行に複数のスケジュールされたアクションのセットがあるプロセスビルダーのプロセスを変換]
* convert Workflow Rules that use Outbound Messages or Recursion. [アウトバウンドメッセージまたは、再帰を使用するワークフロールールの変換]
* respect the Notify Assignee checkbox on the New Task action in Workflow Rules [ワークフロールールの[新しいタスク]アクションの[担当者に通知]チェックボックスを尊重する機能の変換]

#### ConvertToFlowの注意事項
* 変換直後はフローは有効になってない。
    * 有効にする際は要注意。既存のワークフロールールやプロセスビルダーが有効のままであるため、二重に動き混乱の下になる

* 新しく作成されたフローには、「converted_」が前に付いたAPI名があり、元のプロセスと同じラベルが付いている。

* サイトには書いてないけど私なりに感じた注意事項
    * デプロイ中に[次へ]を押してはいけない。
    * 実行する前に、「フローの Lightning ランタイムを有効化」にチェックがあるか確認（この記事にかいてるトラブルシューティングの①）
    * 実行する前に、「リモートサイトの設定」をチェック（この記事にかいてるトラブルシューティングの②）


## ConvertToFlowの使い方
1. パッケージConvertToFlowをインストールすると、[設定]-[プロセスの自動化]-[フロー]を選択したときに、リスト内にConvertToFlowが存在しているため、選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/c325e6b0-4334-cdf5-a1ac-ac6d12f8020f.png)

2. フロービルダー上で、[実行]する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/51111d8e-6e88-ce1a-a52b-3b8ab5d69121.png)

3. プロセスビルダーもしくはワークフローをいずれかを選択して、変換する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/32915d27-022a-9b3b-21f0-67ff928c2db2.png)

4. 変換したい対象を選択して[次へ]を選択
※リストアップに数秒待つ必要があり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/6ac8b9cb-a3fb-99e5-6972-4dd54f136c89.png)

5. メタデータの解析が始まるので次の内容が表示されるまで待機してから[次へ]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/aaa19297-04ea-b099-e797-e022234b78c0.png)

6.放置（デプロイ待ち）
※この時注意すべきことがあるとしたら、「次へ」ボタンが押せちゃうので画面が自動的に切り替わるまで押さないように気をつけることです。なぜならば、ずっと、JobStatusがWaiting..とChecking status...と繰り返し動くため不安になります。つい[次へ]を押したくなりますが、この処理が終わるまで我慢することが重要です。不安な場合はブラウザの開発者ツールを開きコンソールを確認するとデバッグログが出てるので少し安心するかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/73c86569-94e8-b736-20a4-5f3a919370fd.png)


7.以下の画面に切り替わりフロー変換完成[次へ]を選択すると最初の画面に戻る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/1df884d0-dbd3-3974-e50c-6204a46d44c1.png)

以上です。サンプルを使ったデモでしたが、実際に出来上がったら以下のような名前でフローが出来上がります。
これみてAPI参照名などは書き直すことになるだろうな・・・と感じました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/f2c4aa87-53d6-8f1a-dea2-b01cf1394b3f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/a3c83cbe-da94-f989-28a8-5b2cbb6b1580.png)


## インストール方法
[ConvertToFlow](https://unofficialsf.com/the-new-converttoflow-app-migrates-most-of-your-process-builder-processes)のInstallに詳細が記載されているの手順のとおりです。Salesforceのパッケージをインストールするのと同じようにインストールします。

### 1.ConvertToFlowに必要なパッケージをインストール
#####_[FlowActionsBasePack] (https://unofficialsf.com/flow-action-and-screen-component-basepacks/) Version 2.33_

* 本番組織へのインストールURL: https://login.salesforce.com/packaging/installPackage.apexp?p0=04t4W0000034L7VQAU
* sandboxへのインストールURL : https://test.salesforce.com/packaging/installPackage.apexp?p0=04t4W0000034L7VQAU


##### _[FlowScreenComponentsBasePack] (https://unofficialsf.com/flow-action-and-screen-component-basepacks/) Version 2.5.9_

* 本番組織へのインストールURL: https://login.salesforce.com/packaging/installPackage.apexp?p0=04t5G000003rUipQAE
* sandboxへのインストールURL :https://test.salesforce.com/packaging/installPackage.apexp?p0=04t5G000003rUipQAE

### 2.ConvertToFlowパッケージのインストール
_*[ConvertToFlow] (https://unofficialsf.com/the-new-converttoflow-app-migrates-most-of-your-process-builder-processes/#comment-5430221914)* Version 1.2.3_

* 本番組織へのインストールURL: https://login.salesforce.com/packaging/installPackage.apexp?p0=04t5G000003rUesQAE
* sandboxへのインストールURL :https://test.salesforce.com/packaging/installPackage.apexp?p0=04t5G000003rUesQAE


## トラブルシューティング
以下は、私自身がサポートされていないことに気づかずチャレンジした時に出てきたメッセージや原因不明の変換失敗したときに出てくるメッセージです。
原因が分かっているケース、原因が分かっていないケース双方を出します。
### ① コンポーネント「c:flowPickerFSC」は、Classic ランタイムではサポートされていないため表示できません。代わりに Lightning ランタイムでこのフローを配布するように Salesforce システム管理者に依頼してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/4bbaad2f-3e95-9b17-3109-6daf4b7ee729.png)

#### 解決策
プロセスの自動化設定を開き、「*フローの Lightning ランタイムを有効化*」にチェックを入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/3bb572c4-ee51-c7ad-a467-55567d2cf60d.png)

### ② This page has an error. You might just need to refresh it. [LWC component's @wire target property or method threw an error during value provisioning. Original error: [error returning from _getWFRDataApexIO Exception: Unauthorized endpoint, please check Setup->Security->Remote site settings. endpoint = https://XXXXXXXXXXXXXXXXXXXX.visualforce.com/services/Soap/m/42.0]] Failing descriptor: {markup://c:flowPickerFSC}というメッセージがでて選べない 

#### 解決策
こちらは[ConvertToFlowの解説ページ](https://unofficialsf.com/the-new-converttoflow-app-migrates-most-of-your-process-builder-processes)のTroubleshootingの「Remote Site Settings issues」に解決方法の記載あります。

具体的にはConvertToFlowインストール直後のリモートサイト設定をきちんと見直せばOKです。

まず、ConvertToFlowフローを実行した時のURLを確認してメモする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/b8ad450c-5a54-696e-6660-057d478385cd.png)
[設定]-> [セキュリティ]→ [リモートサイトの設定]-[MyLoopBackSetting]を開き、
登録されているURLを変更する。

```
https://saas-force-2107-dev-ed--c.visualforce.com
↓
https://XXXXXXXXXXXXXXXXXXXX.visualforce.com
```

### ③ This page has an error. You might just need to refresh it. [PromiseRejection: [object Object]]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/4f42eb9e-a1ad-fce5-adb7-4380a57582c1.png)

#### 解決策
こちらは[ConvertToFlowの解説ページ](https://unofficialsf.com/the-new-converttoflow-app-migrates-most-of-your-process-builder-processes)のTroubleshootingの「Deployment Never Completes Issue」に解決方法の記載ありますが・・・私が試したところ、それが解決策となるケースとならないケースがあります。

解決策となるケースは、組織内に存在するApexコード・・・Apexテストケースにエラーがあるケースです。
そちらは、ApexコードをApexテストケースをきちんと修正し、コンパイルし直した版があれば解決するとのことです。

なお、私はSandbox環境下で試した時は、そもそもこのエラーが発生せず、
Trailheadで作成可能なDE組織上では、こちらのエラーメッセージが出たことを確認できましたが、この時はTroubleshootingに記載の方法では解決できませんでした。ConvertToFlowのコメント欄をのぞいても解決できていない人が、ちらほらいるため今後に情報が出てくることに期待したいところです。

### ④ This rule has action with reevaluateOnChange
#### 解決策
再帰処理がONになっているケースで発生します。このメッセージが出たらサポートされていないケースと思い諦めましょう。

<font color="DarkGray">なお、ワークフロールールが実行後に他のワークフロールールと連動してほしくて再評価してほしい・・・という理由で「再帰」にチェックを入れるワークフロールールは結構あるのでは？と思ってます、再帰を利用しているワークフロールールの変換が全滅というのは、個人的にかなり致命的な未サポートでした。。。気になる組織のSandbox上で試しましたが、やっと動くようになったのに・・・どれを使っても、このエラーメッセージばかりが出てきて何一つまとものうごかねぇ・・・という諦めに似た感情が生まれるくらいでした。</font>

### ⑤ Job Status: Cannot create a new component with the namespace: converted_XXXXXXXX. Only components in the same namespace as the organization can be created through the API
#### 解決策
こちら原因不明です。もし原因わかればこちらは更新します。
[ConvertToFlowの解説ページ](https://unofficialsf.com/the-new-converttoflow-app-migrates-most-of-your-process-builder-processes)のコメント欄で、以下のように開発者に相談している人がチラホラおりますが、解決したという話題を確認できておりません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504068/183fb919-4592-37d0-85f0-dc8a5da7e560.png)
成功した奴とこのエラーが発生する奴をじっくり見比べれば、もしかするとサポート外など原因が判明するかもしれないですが、今回はこれ以上の調査はしませんでした。

#### ⑥ フローの API 参照名: フロー定義 API 名に使用できるのは、アンダースコアと英数字のみです。一意である必要があり、文字から始まり、空白を含まず、アンダースコアで終わったり、連続するアンダースコアを含んだりできません。
#### 解決策
このエラーメッセージが出たときは、日本語のワークフロールールで試した時でしたが、名前を全て英語に変更したらエラーなく変換成功しました。
日本語が含まれたプロセスビルダーのやつは問題なく更新できた後だったので、ワークフロールールのときだけに発生するようです。

<font color="DarkGray">そもそもワークフロールールはAPI参照名という存在がないため、ルール名がAPI参照名のようになっているのかもしれません。</font>



## 結論…
今回、ConvertToFlowツールを使って感じたのは、（思ったより使えないかも…）という感想でした。当初わたしが思っている期待値が高かったようです。

1つ目は、私が活用したい組織では、ConvertToFlowツールでサポートされていない再帰の機能を使っているワークフローが思っている以上に多かった。使えるもの、使えないものを整理する時間が必要になる。

2つ目は、非公式Salesforceですので正式にConvertToFlowツールを動かした時の結果はサポートされておりません。当たり前ですが変換されたフローが正しく想定どおりに変換されているか確認する作業が必要です。なお、闇雲に変換することは可能です。ただそのままにすると、フローの保守性が下がる要因であるため、同じオブジェクトに対してワークフローやプロセスビルダーがどれだけ混在しているか 複数存在しているときは、きちんと紐解いてまともに機能してもらうためにも統合してあげる必要があります。ただ・・そこまで考えたら、自分の目で整理して自分の手でフローを一から書き直した方が早そう。

・・・と思ったからです。

ただ否定しましたが、サポートされている範囲においては、とても使えそうなのも事実であるため使ってみるのもありなのかもしれません。

なお、2021年10月4日Salesforceのブログで、ワークフロールールとプロセスビルダーの将来についての記事が公開されました。
 --> [Go with the Flow: What's Happening with Workflow Rules and Process Builder? - Salesforce Admins] (https://admin.salesforce.com/blog/2021/go-with-the-flow-whats-happening-with-workflow-rules-and-process-builder)

こちら…いろいろ書いていますが、フローに移行するツールが来年正式リリースされるそうです。
ワークフロールールをフローに移行するツールが来年の春(Spring ‘22)に、プロセスビルダーをフローに移行するツールが来年の夏(Summer’ 22)に正式リリースされ、そして、再来年の冬(Winter ’23)にワークフロールール/プロセスビルダーの新規作成機能が廃止されるそうです。

現時点では、ワークフロールール/プロセスビルダーの保守終了(EOL)の発表はないけどEOLの発表に取り組んでいるため詳細は近日中に発表される予定があるとかないとか。

これを考えると…放置して良いなら、来年、正式に移行ツールが出るまで待った方が良いかもしれないですね。
特にワークフロールールとプロセスビルダーの数の多さでごちゃごちゃして、苦しんでいる人にとって、移行ツールはかなりのお助けツールになると思います。
このツールの場合、自動生成されたフロー内のAPI参照名は、機械的に連番で生成されているため、変換直後は修正したくなる感情も大きいです。よって、フロー変換後の状態に問題ないかAPI参照名を書き直しながら、仕組みを改めて理解するのは変換手順としてありと感じました。

最後に・・・
ワークフロールールやプロセスビルダー、フローが大量に存在・混在により、想定した通りに自動化が動かなくなってしまった組織も存在するのではないでしょうか。
様々な方々がフローにおけるベストプラクティスを紹介しています。最終的に動かなくなってしまった自動化プロセスは、一つ一つ丁寧に紐解くしか方法はないと感じておりますが、その作業をする前にベストプラクティスを確認するのをお勧めします。
参考文献として、私のおすすめを紹介し最後にします。

* 公式:プロセスのベストプラクティス
    * https://help.salesforce.com/s/articleView?id=process_considerations_design_bestpractices.htm&type=5&language=ja
* 公式:フローのベストプラクティス
    * https://help.salesforce.com/s/articleView?id=sf.flow_prep_bestpractices.htm&type=5
* _*小坂様が書いて下さった記事*_：フローのAPI参照名の命名規則ベストプラクティス
    * https://shunkosa.github.io/lightning-flow-recipes-jp/design-guideline/
* _*Amit Chaudhary様が書いて下さった記事*_:Salesforce Flow Best Practices
    * https://www.apexhours.com/salesforce-flow-best-practices/

以上です。
ではでは！