Salesforce URL Hack in Lightning

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


+ [URL Hack in Lex 2](https://qiita.com/Keiji_otsubo/items/60024289107d0b101ad5)
+ [URL Hack in Lex 3](https://qiita.com/Keiji_otsubo/items/69a130e728f5a57a4025)
+ [URL Hack in Lex 4](https://qiita.com/Keiji_otsubo/items/972c79e7416732c2058c)
+ [URL Hack in Lex 5](https://qiita.com/Keiji_otsubo/items/6fb7202079c25a169a37)



LightningでもSpring 20で、URL Hack機能が正式に復活したようです。
以下に詳しい説明がありました。

https://newstechnologystuff.com/2020/06/03/salesforce-url-hack-in-lightning/

# URL Hacking on Lightning supports the creation of new records only.

+ [URL Hack for Email Send--how do I generate in Lightning and define sender?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007UsfMD)

:::note
URL Hacking on Lightning supports the creation of new records only.Reference:https://releasenotes.docs.salesforce.com/en-us/spring20/release-notes/rn_general_lex_navigate_to_record_dfv.htm

Lightning send email Hack
https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T4M1DSAV
:::

# 日本語訳

LightningのURLハック。Lightning Experienceの導入により、
最も欠けていた機能はLightning ExperienceのURLハックでした。
Spring 20では、この機能が正式に復活し、リリースごとに修正と更新が行われます。
今回はデフォルト値を設定するために、URLハックする方法を確認します。

# Lightning Experienceでのレコードの複製

以前はCloneレコードで、clone = 1を提供していました。したがって、Lightning ExperienceのURLボタンでも同じアプローチができます。
たとえば、取引先には[複製]ボタンはありません。そのため、Lightning Experienceで取引先の複製ボタンを作成します。
取引先に新しいURLボタンを作成し、以下のURLを入力します。

```
/{!Account.Id}/e?clone=1
```

これで、レイアウトにこのボタンを追加すると、複製ボタンの準備が整います。

![Clone-Record-1](https://newstechnologystuff.com/wp-content/uploads/2020/06/Clone-Record-1-1024x479.gif)


# フィールドのデフォルト値をセットする

別のボタンを作成します。たとえば、取引先からデータを渡して活動にデフォルト値をセットします。 
RecordTypeの設定方法、Date、DateTime、Boolean、その他のフィールドへの入力方法を確認します。
以下にサンプルコードを示します：

```
/lightning/o/Task/new?useRecordTypeCheck=1&defaultFieldValues=
WhatId={!Account.Id},
WhoId=null,
ActivityDate={!TEXT(Account.Meeting_Date__c)},
IsReminderSet=true,
Meeting_Time__c={!TEXT( DATEVALUE(Account.Activity_Date__c) )}T{!TEXT( TIMEVALUE(Account.Activity_Date__c) )}Z,
Subject={!URLENCODE('From Account')}&
backgroundContext=%2Flightning%2Fr%2FAccount%2F{!Account.Id}%2Fview
```

各属性について説明します。

+ **useRecordTypeCheck:** この属性を使用して、RecordType選択ページを表示します。
+ **recordTypeId:** recordType Idがある場合、直接渡すことができ、他の属性は同じままです。これは大文字と小文字が区別されます。
+ **DateTime Field:** 最初にDateTimeを日付と時刻に分離し、次にテキストを使用してそれを文字列に変換します。 TおよびZ形式もハードコーディングしています。
+ **Date Field:** 日付フィールドには、TEXTメソッドを使用します。
+ **Text and Other Field:** テキストおよびその他のフィールドについては、URLENCODEメソッドを使用して渡すことができます。
+ **backgroundContext:** これは戻り先を設定するために使用され、ユーザーがキャンセルをクリックすると、このページに遷移します。

![Lightning-2](https://newstechnologystuff.com/wp-content/uploads/2020/06/URL-Hack-in-Lightning-2-1024x479.gif)


お気づきのように、WhoIDフィールドにはnull値を渡します。 
Summer 20場合はこれはエラーをスローしましたが、現在修正されています。
組織がまだSpring 20の場合は、以下の回避策があります。

```
{!URLFOR('/lightning/o/Opportunity/new?defaultFieldValues=' + IF(ISBLANK(Contact.AccountId), ", ',AccountId='+Contact.AccountId) )} //use URLFOR to genrate dynamic URL and pass variable only when they have value
```


以上でLightningのURLハックを使って、さまざまなフィールドに値を設定できるようになりました。
以前は、このためのカスタムフォームを作成する必要がありましたが、今後はその必要はありません。


# レコードタイプをデフォルトで渡す場合

レコードタイプはこのパラメータとしてはデフォルト値の設定ができないようです。
解決策は「defaultFieldValues」パラメーターの外に「recordTypeId」を設定する必要があるようですね。

https://qiita.com/Keiji_otsubo/items/286d2a656f11dfe45023

# 依存するフィールドは機能しないようです。

![dependence.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/958c8c03-4680-80c1-cfb4-0b469a190d0d.png)

https://www.salesforceben.com/salesforce-url-hacking-for-lightning-tutorial/

With regards to your issue with the field dependencies, I’ve been able to replicate the issue and have played around for a few hours to no avail. I’m able to have the Master field populated, but not the dependent unfortunately. It looks like this is a restriction for some reason.
フィールドの依存関係に関する問題に関しては、問題を再現することができ、数時間遊んでみましたが、役に立ちませんでした。マスターフィールドにデータを入力することはできますが、残念ながら依存関係はありません。これは何らかの理由で制限のようです。

[Salesforce URL Hacking for Lightning – Tutorial](https://www.salesforceben.com/salesforce-url-hacking-for-lightning-tutorial/)


# 特定のユーザーに割り当てることができない

+ [URL hack for task button with prepopulated fields](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Bt3aX)

:::note
I know on Quick Actions you can't set the Assigned To field so suspect the same limitation applies here.

The API name of the field is OwnerId have you tried that value instead of Assigned_To?

クイック アクションでは [担当者] フィールドを設定できないことはわかっているので、同じ制限がここにも適用されると思われます。

フィールドの API 名は OwnerId ですが、Assigned_To の代わりにその値を試してみましたか?
:::


# 覚えておくべき重要なこと

+ [Salesforce URL Hacking for Lightning – Tutorial](https://www.salesforceben.com/salesforce-url-hacking-for-lightning-tutorial/)

--------------------

+ URL は改行を嫌い、正しく機能しません。ボタンからそれらを削除する必要があります。
+ URL はスペースを嫌います: 静的な値を設定する場合は、スペースの代わりにプラス (+) を使用します。動的に値を設定する場合は、ボタンに {!URLENCODE()} を追加してフォーマットすることを忘れないでください。正しく。
+ ボタンが正しく表示されるように、ボタンの [表示タイプ] 選択リストの値を [詳細ページ ボタン] に設定し、[ボタン] ボタンではなく [モバイルおよび Lightning アクション] ボタンを使用してページ レイアウトに追加することを忘れないでください。
+ 保存時に特定のフィールドにアクセスできないことを示すエラーが表示された場合は、改行が削除されていることを確認してください。かなりの悲しみを引き起こしたので、もう一度これについて言及します。
+ これはモバイルでは機能しないことを忘れないでください。将来的にはこれが更新されることを期待しています。


# 実際の適用例

+ [URL Hack for Case Comment](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007W5yEv)

:::note
/lightning/o/CaseComment/new?defaultFieldValues=ParentId={!Case.Id}
:::

+ [useRecordTypeCheck=1を指定した上でレポートタイプを選択したら、その内容でIF文を使いたい](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ajHOS)

:::note
＞これはまだBが作成されていない為、新規作成中のBからは情報が取れないということなのでしょうか?


はい、挙動から考えると原因は私も上記だと思います。
数式なので、保存された状態のレコードだけから参照できると思います。

ボタンをレコードタイプ別に２つ作れば実現可能ではないでしょうか？
:::