LWCボタンの作成

### 要件
・Lightning画面でLWCのコンポーネントボタンを配置する
・親オブジェクトの関連子オブジェクトを作成する（デフォルト値を設定）
・親が特定のタイプの場合、子れコートを作成する画面へ、そうではない場合、エラーメッセージを表示
#### 参照資料
・Lwcサンプル　https://github.com/trailheadapps/lwc-recipes#readme
・ボタン作成 https://www.greytrix.com/blogs/salesforce/2022/02/24/how-to-create-quick-action-button-using-lightning-web-component/
・ToastMessage　https://www.sfdcpoint.com/salesforce/lightning-web-component-lwc-toast-messages/
### ポイント
①Lwcの宣言に<font color="Red">Lightning__RecordAction</font>用に追記してから、RecordPageのアクションとして選べられる(navToNewRecordWithDefaults.js-meta.xml)
```
<?xml version="1.0" encoding="UTF-8" ?>
<LightningComponentBundle
    xmlns="http://soap.sforce.com/2006/04/metadata"
    fqn="navToNewRecordWithDefaults">
    <apiVersion>55.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordAction</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
    </targets>
    <targetConfigs>
        <targetConfig targets="lightning__RecordAction">
            <actionType>ScreenAction</actionType>
        </targetConfig>
    </targetConfigs>
</LightningComponentBundle>
```
※Headlessアクションの場合、TargetConfigは下記<font color=red>(ScreenAction -> Action)</font>
```
   <targetConfig targets="lightning__RecordAction">
     <actionType>Action</actionType>
   </targetConfig>
```

②親RecordIdと関連値を取得する
```
 @api recordId; // parent id
```
LDSのgetRecordと取得項目を定義

```
import { getRecord } from 'lightning/uiRecordApi';

const fields = [
        'Account.Name',
        'Account.Type'
    ];
```
取得したAccountIdを新規ContactにDefault設定（navToNewRecordWithDefaults.js）

```
import { LightningElement, api, wire } from 'lwc';
import { NavigationMixin } from 'lightning/navigation';
import { encodeDefaultFieldValues } from 'lightning/pageReferenceUtils';

import { getRecord } from 'lightning/uiRecordApi';

const fields = [
        'Account.Name',
        'Account.Type'
    ];
export default class NavToNewRecordWithDefaults extends NavigationMixin(
    LightningElement
) {
    @api recordId; // parent id

    @wire(getRecord, { recordId: '$recordId', fields })
    account;

    get type() {
        // !!! it neccessory to judge data wheather it is null
        if (!this.account.data){ return false; }
        return this.account.data.fields.Type.value;
    }


    navigateToNewContactWithDefaults() {
        const defaultValues = encodeDefaultFieldValues({
            FirstName: 'Morag',
            LastName: this.type,
            LeadSource: 'Other',
            AccountId: this.recordId
        });

 
        this[NavigationMixin.Navigate]({
            type: 'standard__objectPage',
            attributes: {
                objectApiName: 'Contact',
                actionName: 'new'
            },
            state: {
                defaultFieldValues: defaultValues,
                // !!! When finish, return to ralated list
                navigationLocation: 'RELATED_LIST'
            }
        });
    }
}

```

navToNewRecordWithDefaults.html

```
<template>
    <lightning-card
        title="NavToNewRecordWithDefaults"
        icon-name="custom:custom96"
    >
        <lightning-button
            name="new-with-defaults"
            label="Go to New Contact with Defaults"
            class="slds-var-m-around_medium"
            onclick={navigateToNewContactWithDefaults}
        ></lightning-button>

        <c-view-source source="lwc/navToNewRecordWithDefaults" slot="footer">
            Navigate to a new recordxx page5 {type} with default values. In this example,
            a new contact page.
        </c-view-source>
    </lightning-card>
</template>
```