プログラマ38の日記

主にプログラムメモです。

Salesforce:Lightning showToastイベント(e.force:showToast)のメモ(メッセージの改行など)

データ保存時にメッセージを表示するのに、showToastイベント(e.force:showToast)を使うことがあります。

showToastイベントについて調べたことの備忘メモです。

1.mode (画面の表示の仕方)  は 3 種類

dismissible : ×クリックで消える。durationで指定した時間経過で消える。

f:id:crmprogrammer38:20190903193244p:plain
sticky : ×クリックで消える。時間経過では消えない。

f:id:crmprogrammer38:20190903193255p:plain
pester : ×クリックできない(表示がない)。durationで指定した時間経過で消える。

f:id:crmprogrammer38:20190903193316p:plain

2.type (色やアイコン) は 5 種類

f:id:crmprogrammer38:20190903194049p:plain : info

f:id:crmprogrammer38:20190903194107p:plain : success

f:id:crmprogrammer38:20190903194121p:plain  : warning

f:id:crmprogrammer38:20190903194131p:plain : error

 f:id:crmprogrammer38:20190903194138p:plain : other

3.一度に表示できるのは 3個 のメッセージ

連続してshowToastイベントを実行しても一度の画面表示は3つまでのようです。
同時に3つ以上実行しても、表示されているメッセージが消えてから次のメッセージを表示するという動きをします。

f:id:crmprogrammer38:20190903194603p:plain

4.タイトルを指定すると、メッセージのフォントが小さくなる

f:id:crmprogrammer38:20190903194919p:plain

5.メッセージを改行するには別途スタイルシートが必要

次のような改行区切りのメッセージをToastで表示しようとすると、うまく改行されません。
メッセージ内容:
 表示メッセージ1
 表示メッセージ2
 表示メッセージ3

画面表示: 

f:id:crmprogrammer38:20190911122550p:plain

Toast内で改行する場合は、スタイルシートの指定が必要です。

1.次のスタイルシートを静的リソースに登録します。

.toastMessage.forceActionsText{
     white-space : pre-line !important;
}

2.Lightning Componentのcmpで、外部CSS リソースを読み込みます。

<ltng:require styles="{!$Resource.MultiLineToast}" />

 ※静的リソースには「MultiLineToast」として登録しました。


上記1,2を実施後の画面表示は次の通りとなります。

f:id:crmprogrammer38:20190911123514p:plain

 

最後に

この調査をするにあたって作成したLightning Componentのサンプルは次になります。

cmp:

<aura:component implements="lightning:isUrlAddressable,force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes,force:lightningQuickAction" access="global" >
  <ltng:require styles="{!$Resource.MultiLineToast}" />
    
    <lightning:layout multipleRows="true">
        <lightning:layoutItem  size="4" padding="around-small" largeDeviceSize="4" smallDeviceSize="12">

    <lightning:card title="Toastイベントサンプル">
        <table class="slds-table slds-table_bordered slds-table_cell-buffer">
            <thead>
              <th>#</th>
              <th>mode</th>
              <th>type</th>
              <th></th>
              
            </thead>
            <tbody>
                <tr><td>1</td><td>dismissible</td><td>info</td><td><lightning:button aura:id="dismissible info" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
                <tr><td>2</td><td>dismissible</td><td>success</td><td><lightning:button aura:id="dismissible success" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
                <tr><td>3</td><td>dismissible</td><td>warning</td><td><lightning:button aura:id="dismissible warning" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
                <tr><td>4</td><td>dismissible</td><td>error</td><td><lightning:button aura:id="dismissible error" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
                <tr><td>5</td><td>dismissible</td><td>other</td><td><lightning:button aura:id="dismissible other" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>

                <tr><td>6</td><td>sticky</td><td>info</td><td><lightning:button aura:id="sticky info" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
                <tr><td>7</td><td>sticky</td><td>success</td><td><lightning:button aura:id="sticky success" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
                <tr><td>8</td><td>sticky</td><td>warning</td><td><lightning:button aura:id="sticky warning" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
                <tr><td>9</td><td>sticky</td><td>error</td><td><lightning:button aura:id="sticky error" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
                <tr><td>10</td><td>sticky</td><td>other</td><td><lightning:button aura:id="sticky other" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>

                <tr><td>11</td><td>pester</td><td>info</td><td><lightning:button aura:id="pester info" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
                <tr><td>12</td><td>pester</td><td>success</td><td><lightning:button aura:id="pester success" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
                <tr><td>13</td><td>pester</td><td>warning</td><td><lightning:button aura:id="pester warning" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
                <tr><td>14</td><td>pester</td><td>error</td><td><lightning:button aura:id="pester error" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
                <tr><td>15</td><td>pester</td><td>other</td><td><lightning:button aura:id="pester other" variant="brand" label="showToast" onclick="{!c.showMyToast}" /></td></tr>
            </tbody>
        </table>
    
    </lightning:card>
            </lightning:layoutItem>
        </lightning:layout>
</aura:component>

 js:

({
  showMyToast : function(component, event, helper) {
        
        var modestr = event.getSource().getLocalId().split(' ')[0];
        var typestr = event.getSource().getLocalId().split(' ')[1];
        
        
        var toastEvent = $A.get("e.force:showToast");
        toastEvent.setParams({
            mode: modestr,
            type : typestr,
            //title: '表示タイトル',
            message: '表示メッセージ1\n表示メッセージ2\n表示メッセージ3'
        });
        toastEvent.fire();
  }
})