前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Salesforce学习 Lwc(十八)【如何自定义开发关联List】

Salesforce学习 Lwc(十八)【如何自定义开发关联List】

原创
作者头像
repick
修改2021-03-17 14:16:43
7050
修改2021-03-17 14:16:43
举报
文章被收录于专栏:SalesforceSalesforce

项目中,我们经常会用到关联List,标准ListView的做成这里就不多说了,今天我们使用Lwc自定义开发一个关联List,完成之后的效果请看下图,开发主要分为两部分,第一部分是使用【lightning-datatable】标签做成ListView,第二部分是使用【lightning-record-form】标签做成表单。

关于【lightning-datatable】,在之前的博客中也有提到过,请参照Salesforce学习 Lwc(十)【lightning-datatable】

效果展示:

lightingWebComponentContactList.html

代码语言:javascript
复制
<template>
    <div style="border: 1px solid #D8D8D8; border-radius: 5px;">
        <article class="slds-card">
            <div class="slds-card__header slds-grid ">
                <header class="slds-media slds-media_center slds-has-flexi-truncate">
                    <div class="slds-media__body">
                        <h2 class="slds-card__header-title">
                            <div class="slds-card__header slds-truncate " title="Contact">
                                <div class="slds-m-left_small slds-m-top_medium">
                                    <lightning-icon icon-name="standard:contact" size="small"></lightning-icon>
                                    <span class="slds-m-left_small" style="font-weight: bold">取引先責任者一覧</span>
                                </div>
                            </div>
                        </h2>
                    </div>
                    <!-- 「新規」ボタン -->
                    <div class="slds-text-align_right slds-m-top_x-small">
                        <lightning-button
                            label="新規"
                            title="新規取引先責任者を作成する"
                            onclick={openModal}
                            class="slds-m-right_x-small">
                        </lightning-button>
                    </div>
                </header>
            </div>
            <div class="slds-scrollable" >
                <!-- 取引先責任者リスト -->
                <lightning-datatable
                    key-field="Id"
                    data={contactList}
                    columns={columns}
                    show-row-number-column
                    hide-checkbox-column>
                </lightning-datatable>
            </div>

        </article>
    </div>

    <!-- 新規取引先責任者ダイアログ -->
    <template if:true={isShowModal}>
        <section role="dialog" tabindex="-1" aria-labelledby="modal-heading-01" aria-modal="true" aria-describedby="modal-content-id-1" class="slds-modal slds-fade-in-open">
            <div class="slds-modal__container">
                <!-- ヘッダー-->
                <header class="slds-modal__header">
                    <button class="slds-button slds-button_icon slds-modal__close slds-button_icon-inverse" title="Close" onclick={closeModal}>
                        <lightning-icon
                            icon-name="utility:close"
                            alternative-text="close"
                            variant="inverse"
                            size="small" >
                        </lightning-icon>
                        <span class="slds-assistive-text">Close</span>
                    </button>
                    <h2 class="slds-text-heading_medium slds-hyphenate">新規取引先責任者</h2>
                </header>
                <!-- 入力部分-->
                <div class="slds-modal__content slds-p-around_medium">
                    <lightning-record-form
                        object-api-name="Contact"
                        fields={createFields}
                        onsuccess={onSuccess}
                        columns="2"
                        oncancel={closeModal}
                        onsubmit={onSubmit}>
                    </lightning-record-form>
                </div>
            </div>
        </section>
        <div class="slds-backdrop slds-backdrop_open"></div>
    </template>
</template>

lightingWebComponentContactList.js

代码语言:javascript
复制
import { LightningElement, track, wire, api } from 'lwc';
/** トーストメッセージを表示する */
import { ShowToastEvent } from 'lightning/platformShowToastEvent'
import { refreshApex } from '@salesforce/apex';
import getContacts  from '@salesforce/apex/ContactListForLwcController.getContactsByAccountId';
/** カスタム表示ラベル:取引先責任者を取得でエラーが発生しました。 */
import ERROR_GETCONTACTS from '@salesforce/label/c.ErrMsg_GetContacts'
/** 新規取引先責任者作成用項目取得 */
import FIELD_LASTNAME from '@salesforce/schema/Contact.LastName';
import FIELD_FIRSTNAME from '@salesforce/schema/Contact.FirstName';
import FIELD_DEPARTMENT from '@salesforce/schema/Contact.Department';
import FIELD_TITLE from '@salesforce/schema/Contact.Title';
import FIELD_PHONE from '@salesforce/schema/Contact.Phone';
import FIELD_EMAIL from '@salesforce/schema/Contact.Email';

export default class LightingWebComponentContactList extends LightningElement {
    // 画面で表示しているレコードID
    @api recordId;
    // 取引先責任者リストヘッダー
    @track columns =  [
        {label:'取引先責任者名', fieldName:'Name' }
        ,{label:'部署', fieldName:'Department'}
        ,{label:'役職', fieldName:'Title' }
        ,{label:'電話', fieldName:'Phone', type:'phone'}
        ,{label:'メール', fieldName:'Email', type: 'email'}
    ];
    // 取引先責任者取得結果
    resultContact = [];
    // 取引先責任者リストデータ
    @track contactList = [];
    // 新規作成モーダルダイアログ表示フラグ
    @track isShowModal = false;
    // 新規ダイアログ表示項目
    createFields = [FIELD_LASTNAME, FIELD_FIRSTNAME, FIELD_DEPARTMENT, FIELD_TITLE, FIELD_PHONE, FIELD_EMAIL];

    /**
     * 取引先責任者取得
     */
    @wire ( getContacts, ( { 'accountId' : '$recordId' } ) )
        setContactList( result ){
            this.resultContact = result;
            if( result.data ){
                this.contactList = result.data;
            }else if( result.error ){
                // トーストでエラー表示
                this.showToast(ERROR_GETCONTACTS, result.error.details.body.message, 'error', 'sticky');
            }
        }

    /**
     * modalダイアログオープン
     */
    openModal(){
        this.isShowModal = true;
    }

    /**
     * modalダイアログクローズ
     */
    closeModal(){
        this.isShowModal = false;
    }

    /**
     * 新規 取引先責任者データ作成実行
     */
    onSubmit( event ){
        // 更新を止める
        event.preventDefault();
        let fields = event.detail.fields;
        // 取引先IDをセット
        fields.AccountId = this.recordId;
        console.log(JSON.stringify(fields));
        // 更新再開
        this.template.querySelector('lightning-record-form').submit(fields);
    }

    /**
     * 新規データ作成成功時メソッド
     * 更新データ画面描画
     */
    onSuccess(event) {

        // 確認用コード
        const contact = event.detail;
        console.log(JSON.stringify(contact));
        const updatedRecord = event.detail.id;
        console.log('onsuccess: ', updatedRecord);
        // @wireのキャッシュをクリアして、取引先責任者データを再取得する。
        refreshApex(this.resultContact);
        //ダイアログクローズ
        this.isShowModal = false;
        //データ作成報告
        this.showToast('SUCCESS','取引先責任者が作成されました。','success','pester');
    }
    /*
    *トーストによるメッセージ表示
    */
    showToast(title,message,varient,mode) {
        const event = new ShowToastEvent({
            title   : title
            ,message : message
            ,variant : varient //info/success/warning/error
            ,mode    : mode    //sticky クローズボタンを押すまで表示
                              //pester 3秒間表示
                              //dismissable sticky+pester
        });
        this.dispatchEvent(event);
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档