見出し画像

AURAサンプル(お問い合わせ画面)

作成者:SUMKING@李
この投稿は私個人の練習メモです。 ご利用は自己責任でお願いいたします。

画面イメージ

aura

<!--
  @description       : お問い合わせAURA画面
  @author            : SUMKING@李
  @last modified on  : 05-24-2022
-->
<aura:component implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId" 
                access="global" 
                controller="sendMailApex">

    <aura:attribute name="errorflg" type="Boolean" default="true" />
    <aura:attribute name="errorMassage" type="String" />
    <aura:attribute name="SuppliedName" type="String" />
    <aura:attribute name="Subject" type="String" />
    <aura:attribute name="SuppliedPhone" type="String" />
    <aura:attribute name="SuppliedEmail" type="String" />
    <aura:attribute name="Description" type="String" />
    
    <aura:if isTrue="{!v.errorflg}">
        <div class="row" style="width: 400px;" >
            <lightning:input name="SuppliedName" label="名前" style="width: 400px;" aura:id="SuppliedNameId" value="{!v.SuppliedName}"/>
            <lightning:input name="Subject" label="件名" style="width: 400px;" aura:id="SubjectId" value="{!v.Subject}"/>
            <lightning:input name="SuppliedPhone" label="件名" style="width: 400px;" aura:id="SuppliedPhoneId" value="{!v.SuppliedPhone}"/>
            <lightning:select name="SuppliedPhone" label="電話" required="true" aura:id="SuppliedPhoneId" value="{!v.SuppliedPhone}">
                <option value="">問題...</option>
                <option value="問題1">問題1</option>
                <option value="問題2">問題2</option>
                <option value="問題3">問題3</option>
            </lightning:select>
            <lightning:input name="SuppliedEmail" label="メール" style="width: 400px;" aura:id="SuppliedEmailId" value="{!v.SuppliedEmail}"/>
            <lightning:textarea name="Description" label="説明" style="width: 400px;" aura:id="DescriptionId" value="{!v.Description}"/>

            <lightning:button variant="brand" label="送信" title="Brand action" onclick="{! c.sendMail }" value=""/>
            <lightning:button label="キャンセル" title="cancel action" onclick="{! c.handleClickB }" value=""/>
        </div>
    <aura:set attribute="else">
        {!v.errorMassage}
    </aura:set>
  </aura:if> 
</aura:component>
({
    //メール送信メゾンド
    sendMail : function(component, event, helper) {
        //helperメール送信呼び出し
        helper.sendMailHelper(component);
    }

})
({
    //メール送信メゾンド
    sendMailHelper : function(component) {
        //画面側に入力した内容を取得します(方法1:通过aura:id来取)
        // var SuppliedName = component.find("SuppliedNameId").get("v.value");
        // var Subject = component.find("SubjectId").get("v.value");
        // var SuppliedPhone = component.find("SuppliedPhoneId").get("v.value");
        // var SuppliedEmail = component.find("SuppliedEmailId").get("v.value");
        // var Description = component.find("DescriptionId").get("v.value");

        //画面側に入力した内容を取得します(方法2:通过前端变量来取,这种方法更常用)
        var SuppliedNameV = component.get("v.SuppliedName");
        var SubjectV = component.get("v.Subject");
        var SuppliedPhoneV = component.get("v.SuppliedPhone");
        var SuppliedEmailV = component.get("v.SuppliedEmail");
        var DescriptionV = component.get("v.Description");

        //logで取得した値を確認します
        console.log("SuppliedName=="+SuppliedNameV);
        console.log("Subject=="+SubjectV);
        console.log("SuppliedPhone=="+SuppliedPhoneV);
        console.log("SuppliedEmail=="+SuppliedEmailV);
        console.log("Description=="+DescriptionV);

        //sendMailApexのsendMailメゾンドを呼び出し
        var action = component.get("c.sendMailMethod2");
        //画面側取得した値はsendMailメゾンドのパラメータに設定します
        action.setParams({
            SuppliedName:SuppliedNameV,
            Subject:SubjectV,
            SuppliedPhone:SuppliedPhoneV,
            SuppliedEmail:SuppliedEmailV,
            Description:DescriptionV
        });
        action.setCallback(this, function(response){
            var state = response.getState();
            console.log("state=="+state);
            //メッセージ表示フラグを設定します
            component.set("v.errorflg", false);

            if(state === "SUCCESS"){
                //取得apex后台回调的值 true:メール送信成功 false:メール送信失敗
                var errorReturnValue=response.getReturnValue();
                if(errorReturnValue){
                    //成功メッセージは画面に設定します
                    component.set("v.errorMassage", "メール送信成功しました。");
                }else{
                    //失敗メッセージは画面に設定します
                    component.set("v.errorMassage", "メール送信失敗しました。");
                }
            }else{
                //失敗メッセージは画面に設定します
                component.set("v.errorMassage", "メール送信失敗しました。");
            }

        });
        $A.enqueueAction(action);
    }
})

Apex

/***********************************************
 * @description       : メール送信APEX
 * @author            : sumking@李
 * @last modified on  : 05-24-2022
************************************************/
public with sharing class sendMailApex {
    /**
    * @description メール送信メゾンド *方法1:メールテンプレートの使用しない場合
    * @author sumking@李
    * @param SuppliedName   :名前
    * @param Subject        :件名
    * @param SuppliedPhone  :電話
    * @param SuppliedEmail  :メール
    * @param Description    :説明
    * @return errorflg      : true:メール送信成功 false:メール送信失敗
    **/
    @AuraEnabled
    public static boolean sendMailMethod(String SuppliedName,String Subject, String SuppliedPhone, String SuppliedEmail,String Description){
        //logで引数確認します
        System.debug('SuppliedName=='+SuppliedName);
        System.debug('Subject=='+Subject);
        System.debug('SuppliedPhone=='+SuppliedPhone);
        System.debug('SuppliedEmail=='+SuppliedEmail);
        System.debug('Description=='+Description);
        boolean errorflg;
        try {

            Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
            List<String> mailList = new List<String>();

            // 送信先のメールアドレスはListに追加 这里把邮箱写死了,这里一般不写死,使用方法1或者方法2
            //mailList.add('xu951124@gmail.com');
            
            //方法1:【表示ラベル】からメールを取得します。
            // String mail = System.Label.mail;
            //送信先のメールアドレスはListに追加
            // mailList.add(mail);
            // 送信先(String[])設定します。
            // mail.setToAddresses(mailList); 

            //方法2:【組織のアドレス】からメールを取得します。
            OrgWideEmailAddress org =  [SELECT
                                                Id,
                                                Address,
                                                DisplayName
                                            FROM
                                                OrgWideEmailAddress
                                            WHERE
                                                DisplayName = 'お問い合わせメール'
                                            LIMIT 1
                                        ];

                                        // 送信元になるようセット
            mail.setOrgWideEmailAddressId(org.id);

            // 送信先(String[])
            List<String> AddressList=new List<String>();
            AddressList.add(org.Address);
            mail.setToAddresses(AddressList);

            // 件名(String)
            mail.setSubject(Subject); 

            // 本文(String)
            mail.setPlainTextBody(Description); 

            // 返信先メールアドレス(String)
            mail.setReplyTo(SuppliedEmail); 

            //メール送信します
            List<Messaging.SendEmailResult> results = Messaging.sendEmail(new List<Messaging.Email> {mail}, false);

            //メール送信成功した場合
            if (results[0].isSuccess()) {
                errorflg=false;
                // お問い合わせ内容を登録します
                Case caseIns = new Case();
                caseIns.SuppliedName = SuppliedName;
                caseIns.Subject = Subject;
                caseIns.SuppliedPhone = SuppliedPhone;
                caseIns.SuppliedEmail = SuppliedEmail;
                caseIns.Description = Description;
                insert caseIns;

            } else {
                //メール送信失敗場合
                errorflg=true;
            }

        } catch (Exception e) {
            errorflg=true;
        }
        return errorflg;
    }
    
    
    /**
    * @description メール送信メゾンド *方法2:メールテンプレート使用の場合
    * @author XXXXXXX@李
    * @param SuppliedName   :名前
    * @param Subject        :件名
    * @param SuppliedPhone  :電話
    * @param SuppliedEmail  :メール
    * @param Description    :説明
    * @return errorflg      : true:メール送信成功 false:メール送信失敗
    **/
    @AuraEnabled
    public static boolean sendMailMethod2(String SuppliedName,String Subject, String SuppliedPhone, String SuppliedEmail,String Description){
        boolean errorflg;
        try {
            Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();

            // 「メール:組織のアドレス」に登録したメールアドレスを取得
            ID orgWideEmailAddressId = [SELECT
                                                Id,
                                                Address 
                                            FROM 
                                                OrgWideEmailAddress 
                                            WHERE 
                                                DisplayName = 'お問い合わせメール' 
                                            LIMIT 1
                                         ].Id;

            // 送信元設定
            mail.setOrgWideEmailAddressId(orgWideEmailAddressId);

            // 送信先設定(取引先責任者から取得する)
            // Contact contactInfo = [SELECT Id, Name, Account.Name FROM Contact WHERE Id=:contactId];
            // mail.setTargetObjectId(contactInfo.Id);

            // メールの添付ファイルを設定
            // ContentVersion cVer = [SELECT Title, FileExtension, FileType, VersionData FROM ContentVersion WHERE ContentDocumentId = :contentDocumentId AND IsLatest = true];
            // List<Messaging.Emailfileattachment> fas = new List<Messaging.Emailfileattachment>();
            // Messaging.Emailfileattachment fa = new Messaging.Emailfileattachment();
            // fa.setFileName(cVer.Title + '.' + cVer.FileExtension);
            // fa.setBody(cVer.VersionData);
            // fas.add(fa);
            // mail.setFileAttachments(fas);

            // メールテンプレートからメール送信内容を設定する
            EmailTemplate et = [SELECT 
                                        Id, 
                                        Subject, 
                                        Body, 
                                        HtmlValue 
                                    FROM EmailTemplate 
                                    WHERE name = 'お問い合わせ2'
                                ];

            et.Subject=et.Subject.replace('#Subject#', Subject);
            et.HtmlValue=et.HtmlValue.replace('#SuppliedName#', SuppliedName);
            et.HtmlValue=et.HtmlValue.replace('#SuppliedPhone#', SuppliedPhone);
            et.HtmlValue=et.HtmlValue.replace('#SuppliedEmail#', SuppliedEmail);
            et.HtmlValue=et.HtmlValue.replace('#Description#', Description);
            mail.setSubject(et.Subject);
            mail.setHtmlBody(et.HtmlValue);

            //メール送信します
            List<Messaging.SendEmailResult> results = Messaging.sendEmail(new List<Messaging.Email> {mail}, false);
            //メール送信成功した場合
            if (results[0].isSuccess()) {
                errorflg=false;
                // お問い合わせ内容を登録します
                Case caseIns = new Case();
                caseIns.SuppliedName = SuppliedName;
                caseIns.Subject = Subject;
                caseIns.SuppliedPhone = SuppliedPhone;
                caseIns.SuppliedEmail = SuppliedEmail;
                caseIns.Description = Description;
                insert caseIns;

            } else {
                //メール送信失敗場合
                errorflg=true;
            }
        } catch (Exception e) {
            errorflg=true;
        }
        return errorflg;
    }
}


株式会社SUMKING(サムキン)
〒113-0034東京都文京区湯島2丁目4-1 TOURYUお茶の水ビル 201
ホーム:https://sumking.co.jp/



この記事が気に入ったらサポートをしてみませんか?