Salesforce URL Hack in Lightning　4

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)

# URL　HACKでクローンを作成する時に　レコードタイプを指定する方法。

```
/lightning/r/Opportunity/{!Opportunity.Id}/clone?recordTypeId={Insert Record Type Id here without the braces}&count=1
```

私が無理ですって回答したら、気合で質問者さんが探した（たぶん試行錯誤した）結果です。

すばらしいねぇ。忘れちゃいかん。

[Opportunity clone URL Hack - Set Record type](https://trailblazers.salesforce.com/answers?id=9064S000000DtDP)

# レコードタイプの選択画面を表示する方法

```
/lightning/o/Account/new?useRecordTypeCheck=1
```

[URLボタンを使用してレコードを作成するときにデフォルトのレコードタイプが選択されないようにするにはどうすればよいですか？](https://forcepanda.wordpress.com/2020/04/23/how-to-prevent-default-record-type-selection-when-using-a-url-button-to-create-a-record/)

続けてデフォルト値を設定する場合は & で続けるといいようです。

# Dateフィールドに値を設定する

[How to set value in Date and DateTime fields when using ‘defaultFieldValues’ Spring 20 feature?](https://forcepanda.wordpress.com/2020/04/28/how-to-set-value-in-date-fields-when-using-defaultfieldvalues-spring-20-feature/)

一旦Text型に変換すれば機能するみたい。

```
/lightning/o/Opportunity/new?defaultFieldValues=
Name=Test Opp,
CloseDate={!TEXT(TODAY() + 3)}
```

# Time型のフィールドに値をセットする。

残念ながらDateみたいにTextだけではできないです。数式フィールドを別途作成してその数式フィールドを使います。

[「時間型」をカスタムボタンのパラメータで渡す方法](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000H24Ds)

# DateTime型

Textで変換すればいいかと思ってましたがちょっと違うみたいですね。

```
{!SUBSTITUTE(TEXT(NOW()), "Z",".000")},
```
とすると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/c7cac0c2-9715-759c-100c-04e159332653.png)
何故か。日付だけしか入力できてません。
ここで強引に保存すると次のエラーになります。フォーマットが違う？

Value for field 'Field3__c' is not in ISO 8601 format, Value: 2022-06-02 02:52:10.000, Runtime class: java.lang.String

調べてみると以下がそのフォーマットみたいです。

2022-06-02T19:30+02:00
2022-06-02T19:30+02:00
2022-06-02T19:30+02:00
2022-06-02T19:30Z

一番簡単に変換できる　2022-06-02T19:30Z　に変換します。

この式でうまく機能しました。またTEXT関数を使うとGMTになると思っていましたが、ちゃんと日本時間で入力できています。
```
Field3__c={!SUBSTITUTE(TEXT(NOW()), " ","T")},
```

# アドレスや名前などの復号フィールドでの回避策

[Prepopulate field values using defaultFieldValues](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000Hjacr)

# 回答例

+ [リードの変換でキャンセルしたら元のレコードに戻るようにしたい](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000A9BfTSAV)

# URL Hackをauraコンポーネントから呼び出す。

おお、出来ますね。

カスタムボタンが使えるならこの方法で参照フィールドのIdも直接セットできると思います。
数式フィールドは不要になりますね。しかし、クイックアクションから呼ぶにはどうしたものか...
やっぱり一瞬コンポーネントが出るんですよねぇ。いい方法がない。

```
  url_hack : function (component, event, helper) {
        var urlEvent = $A.get("e.force:navigateToURL");      
        var myUrl = "/lightning/o/JucyuMeisai__c/new?defaultFieldValues=Account__c=0016D00000O9czcQAB";
                    urlEvent.setParams({
                        "url": myUrl
                    });
                    urlEvent.fire();
    },
```

[機能実現](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HDcRoSAL)

# 新しい方法？グローバルアクションを利用する

[カスタムボタンから新規レコードを作成し、保存後、ページ遷移しないようにしたい](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000IQzagSAD)

グローバルアクションとしてもURLとして使えます。

本物の新規商談ボタンはIdを18桁でハードコーディングしていますが、CASESAFEIDを使って18桁のIdにすれば変数でも対応できます。 

/lightning/action/quick/Global.NewTask?objectApiName=Task&context=RECORD_DETAIL&recordId={!CASESAFEID(CustomObject1__c.Id)}&backgroundContext=%2Flightning%2Fr%2FCustomObject1__c%2F{!CASESAFEID(CustomObject1__c.Id)}%2Fview

しかし、グローバルアクションの設定自体では開いている画面からの情報を参照することはできないようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/351cb077-aef0-c073-bfc3-c5e8e96ab444.png)