メールドラフト機能を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(送信済み)になってしまうようです。
↓は公式リファレンスから失敬したキャプチャ
「参照のみ」なんて書いてあるもんだから代入できないと思って、ずっと違うとこ調べていました。
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です((+_+))
テストも成功です~