Salesforceで参照項目の参照先を変更するときに考えたこと
やりたいこと
Salesforce案件での開発中、おおよそ実装も終盤に入り打鍵テストやバグ取りするフェーズまで進んでいましたが、神の一声により作成した新規オブジェクトを既存のオブジェクトに置き換えることが決まりました。 既存オブジェクトと新規オブジェクトを比較して、既存オブジェクト側に該当する項目がないものだけ、新規オブジェクトに作成した項目と同じ項目を作成しました。 ApexやFlowで使用しているオブジェクトかつ、既存オブジェクトはパッケージ側のオブジェクトだったので思いの外手間のかかる作業でした。 この記事では、その作業において、参照項目の参照オブジェクトを変更する作業について、失敗したことと今のところよさそうだと考えている進め方を整理します。 同じように参照項目の変更で迷っている人の参考になれば幸いです。
困っていること
今回困ったのは、新規オブジェクトを参照している他オブジェクトの参照項目を既存オブジェクトに変更するということでした。 内容的に向き先を変えるだけだから楽勝だろと高を括っていたら、えらい目にあいました。
まず、参照項目の参照先は直接変更することはできません。UI上からはもちろんメタデータを修正してデプロイもエラーが発生します。
そのため新しく項目を作成することになるのですが、API参照名は元のものを使う(あらかじめ設計したもの)ということなので、ややこしくなりました。
試した方法
参照先オブジェクトを直接変更できない以上、新しい参照項目を追加して段階的に移行する方法しかありません。 ここでAPI参照名を変更しないという条件が面倒になります。 つまり、一度項目を置き換えた後に、元の参照項目を削除して、本命の項目を作成するという流れがなります。
段階的に移行する場合は、次のような流れを考えています。
- Apexで使用しているクラスの中身を全てコメントアウトする
- 移行前オブジェクトで適当な参照項目を作成する
- フローで参照項目を置き換える
- 置き換えた項目を削除して、既存オブジェクトを参照先にして同名のAPI参照名で項目を作成
- フローを再度項目を入れ替える。
- Apexクラスのコメントアウトを解除して、オブジェクトを入れ替える
なんというか普通な置き換えなので、面白味はないですね、、、 元々は新しく別のスクラッチ環境構築し、参照先を変更した参照項目と一緒に他資産もまとめてデプロイするみたいな方法を検討しましたが、あまり短縮にならず無駄に複雑化するので中止しました。 フローや項目を作成、削除するのに毎回10秒近くかかるので作業内容以上に時間がかかってしまいました。
まとめ
あまり面白味やテクニカルなことをしないシンプルな方法での解決となりました。 せっかくのメタデータなので、もっと上手く活用して作業を効率化できるといいのですが、、、 今後、何かいい方法が思いついたら手順や注意点を追記していきます。