カスタムボタンを利用した新規登録画面への初期値設定
Salesforceでは、関連リストから親レコードに紐づく形で子レコードを作成することができますが、
カスタムボタン(URL)を利用することで、親レコードの情報を引き継いだり、動的な初期値を設定した状態で新規登録画面に遷移することができます。
初期値設定時には、テキストや数値、参照項目など様々な項目の初期値設定を行うことができますが
今回はその中でも「日付」項目についての注意点を記載します。
日付型項目への初期値設定時の注意点
下記にサンプルを用意しました。
/lightning/o/[作成する子レコードのAPI参照名]/new?recordTypeId=[作成する子レコードのレコードタイプID]
&defaultFieldValues=childDate__c={!Account.StartDate__c}
1行目はLEX環境にて初期値設定された新規登録画面を呼び出す際の一般的な記述です。
2行目は子オブジェクトで管理している日付項目に対して、親オブジェクトの取引先を引き継ぐための記述です。
※本来であれば子オブジェクトから親オブジェクトを参照する項目への値設定なども行いますが、
今回の説明には関係ないため割愛します。
一見、問題がないように見えますがこのままだと、初期値設定後に保存を押下してもエラーになってしまいます。
エラーの内容としては「「Invalid Date format YYYY/MM/DD」」
なぜ発生するかというと・・・
受け取る側ほしいフォーマット:YYYY-MM-DD
渡している側のフォーマット :YYYY/MM/DD
これによって想定しているフォーマットではないとエラーが起きている状態です。
解決するには「TEXT()」で囲うか「SUBSTITUTE(TEXT([対象の日付],'/','-'))」のような形で
求められているフォーマットに変換する必要があります。
上記を踏まえて修正したURLがこちらです。
/lightning/o/[作成する子レコードのAPI参照名]/new?recordTypeId=[作成する子レコードのレコードタイプID]
&defaultFieldValues=childDate__c={!TEXT(Account.StartDate__c)}
こちらのエラーですが、
想定している項目への初期値の設定までは正常に行われており、保存するタイミングで形式に関するエラーが発生します。
そのため新規登録画面に値がプリセットされていることのみ確認してしまうと保存時にエラーが発生することに気が付けません。
初期値設定を行うボタンやアクションを作成する際は必ず保存まで確認することを推奨します。
最後に
Classicの時にはこれらの問題は起きていなかったと認識していますが、
LEX環境になるにあたりURLハックの方法も変わっているため、項目の型も厳密に指定する必要が出来ていたのかもしれません。
今回紹介は省きましたが「通貨型」同士の項目についても「ABS()」関数を利用する必要があるなど
初期値設定に関してはまだまだ継続して調査が必要そうです。
何かの参考になれば幸いです。