1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Salesforce】【Apex】メール承認をApexで申請するときの注意点

Posted at

メールドラフト機能をONにして、メールメッセージの承認プロセスを使用している組織で
Apexから申請を出すときの注意点です。
見事にハマったのと検索しても出ないエラーなので書き残しておきます。

大前提

  • メール-to-ケースの有効化

  • メールドラフトの有効化

メールドラフトはメール-to-ケースのメールをすぐに送信せず下書きに残して
上長などの承認が得られた際に送信できる機能です。
それぞれの設定方法については以下の記事をご参考ください。

【Salesforce】メール-to-ケースを設定してみた
【Salesforce】メールドラフトを設定してみた

Apexで申請を出す

メールドラフトを使用するために、メールメッセージの承認プロセスを作成しました。
今回は画面からではなく、Apexで申請を出そうとしました。

仕様:ケース情報でメールメッセージを作成し、メールドラフトの申請を出す

public class MailDraftApprovalLogic {
    public static boolean Submit(Case ca) {
        EmailMessage em = new EmailMessage(
            ParentId = ca.Id,
            ToAddress = ca.SuppliedEmail,
            Subject = '[' + ca.CaseNumber + ']' + ca.Subject,
            TextBody = 'お問い合わせありがとうございます。'
        );
        insert em;
               
        Approval.ProcessSubmitRequest submit =  new Approval.ProcessSubmitRequest();
        submit.setObjectId(em.id);
        submit.setComments('メールドラフト自動生成');
        submit.setProcessDefinitionNameOrId('MailDraftApproval');
        Approval.ProcessResult result = Approval.process(submit);
        return result.isSuccess();
    }
}

とまあ、こんな感じで
テストクラスは普通にSubmit()呼んでやります。

@isTest
private class MailDraftApprovalLogicTest {
    @isTest
    private static void SubmitTest(){
        Case ca = new Case(
            Origin = 'Web',
            Subject = 'テストケース',
            SuppliedName = 'ぴえ太郎',
            SuppliedPhone = '090-1234-5678',
            SuppliedEmail = 'test@piepie.co.jp'
        );
        insert ca;
        
        Test.startTest();
        system.assert(MailDraftApprovalLogic.Submit(ca));
        Test.stopTest();
    }
}

いざ実行!、、

発生したエラー

(´・ω・`)チーン

System.DmlException: Process failed. First exception on row 0; first error: INVALID_OPERATION, Submit for approval not allowed.: []

Class.MailDraftApprovalLogic.Submit: line 15, column 1 Class.MailDraftApprovalLogicTest.SubmitTest: line 15, column 1

原因はStatusでした

もうわかったのでアッサリ書きますが
どうやらメールメッセージのステータスを指定していないと3(送信済み)になってしまうようです。
↓は公式リファレンスから失敬したキャプチャ
image.png
「参照のみ」なんて書いてあるもんだから代入できないと思って、ずっと違うとこ調べていました。

public class MailDraftApprovalLogic {
    public static boolean Submit(Case ca) {
        EmailMessage em = new EmailMessage(
            ParentId = ca.Id,
            Status = '5',
            ToAddress = ca.SuppliedEmail,
            Subject = '[' + ca.CaseNumber + ']' + ca.Subject,
            TextBody = 'お問い合わせありがとうございます。'
        );
        insert em;
               
        Approval.ProcessSubmitRequest submit =  new Approval.ProcessSubmitRequest();
        submit.setObjectId(em.id);
        submit.setComments('メールドラフト自動生成');
        submit.setProcessDefinitionNameOrId('MailDraftApproval');
        Approval.ProcessResult result = Approval.process(submit);
        return result.isSuccess();
    }
}

ドラフトなのでStatusに'5'を代入してあげればOKです((+_+))
image.png
テストも成功です~

参考

承認プロセス
メールメッセージ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?