QuickActionDefaultsHandler インターフェース
名前空間
使用方法
ケースフィードの標準の [メール] アクションのデフォルト値を指定するには、QuickAction.QuickActionDefaultsHandler を実装するクラスを作成します。
QuickAction.QuickActionDefaultsHandler インターフェースは、Salesforce Classic と Lightning Experience で機能します。
- このインターフェースでは、定義済みの ID を使用して設定されたメールの値が上書きされます。
- このインターフェースは、ケースの標準の [メール] アクションと連動します。また、このインターフェースは、ケースオブジェクトのカスタム [メール] アクションでも使用できます。
- Lightning Experience のこのインターフェースでは、次の操作はサポートされていません。
- メールの添付ファイル
- カスタムメール項目
- Visualforce メールテンプレート。これは Salesforce Classic で使用できるメールテンプレートの種別です。
- [送信元アドレス] 選択リストは、[送信者] 項目によって決定されます。QuickActionDefaultsHandler インターフェースでは [メールを送信] アクション種別のこの選択リストをカスタマイズできませんが、[送信元アドレス] 項目はカスタマイズできます。この項目をカスタマイズするには、SendEmail クイックアクションレイアウトから [送信者] 項目を削除し、代わりに [送信元アドレス] 項目を追加します。次に、検証済みの有効な送信元アドレスを QuickActionDefaultsHandler コードに指定します。このアドレスは、現在のユーザーのアドレス、現在のユーザーがアクセスできる組織のメールアドレス、またはメール-to-ケースルーティングアドレスでなければなりません。
- Apex インターフェースによってメール本文にコンテンツが追加される場合、差し込み項目は未解決として表示されます。差し込み項目は、プレビューおよび送信時に解決されます。
このインターフェースを実装する場合は、パラメーターのない空のコンストラクターを用意します。
QuickActionDefaultsHandler のメソッド
QuickActionDefaultsHandler のメソッドは次のとおりです。
onInitDefaults(actionDefaults)
署名
public void onInitDefaults(QuickAction.QuickActionDefaults[] actionDefaults)
パラメーター
- actionDefaults
- 型: QuickAction.QuickActionDefaults[]
- この配列には、QuickAction.SendEmailQuickActionDefaults 型の 1 つの項目のみが含まれます。
戻り値
型: void
QuickActionDefaultsHandler の実装例
次に、QuickAction.QuickActionDefaultsHandler インターフェースの実装例を示します。
この例では、onInitDefaults メソッドを使用して、配列で渡された要素がケースフィードの標準の [メール] アクション用であるかどうかを確認します。次に、クエリを実行してコンテキスト ID に対応するケースを取得します。次に、対応するメールメッセージの BCC アドレスの値をデフォルト値に設定します。デフォルト値はケースの原因に基づきます。最後に、メールテンプレートのプロパティのデフォルト値を設定します。onInitDefaults メソッドは、2 つの条件に基づいてデフォルト値を決定します。1 つ目の条件は、メールメッセージの返信アクションでメソッドへのコールが開始されたかどうか、2 つ目の条件は、ケースに関連付けられた以前のメールがコールに関連付けられているかどうかです。
1global class EmailPublisherLoader implements QuickAction.QuickActionDefaultsHandler {
2 // Empty constructor
3 global EmailPublisherLoader() {
4 }
5
6 // The main interface method
7 global void onInitDefaults(QuickAction.QuickActionDefaults[] defaults) {
8 QuickAction.SendEmailQuickActionDefaults sendEmailDefaults = null;
9
10
11 // Check if the quick action is the standard case feed Send Email action
12 for (Integer j = 0; j < defaults.size(); j++) {
13 if (defaults.get(j) instanceof QuickAction.SendEmailQuickActionDefaults &&
14 defaults.get(j).getTargetSObject().getSObjectType() ==
15 EmailMessage.sObjectType &&
16 defaults.get(j).getActionName().equals('Case.Email') &&
17 defaults.get(j).getActionType().equals('Email')) {
18 sendEmailDefaults =
19 (QuickAction.SendEmailQuickActionDefaults)defaults.get(j);
20 break;
21 }
22 }
23
24 if (sendEmailDefaults != null) {
25 Case c = [SELECT Status, Reason FROM Case
26 WHERE Id=:sendEmailDefaults.getContextId()];
27
28 EmailMessage emailMessage = (EmailMessage)sendEmailDefaults.getTargetSObject();
29 // Set BCC address to make sure each email goes for audit
30 emailMessage.BccAddress = getBccAddress(c.Reason);
31
32 /*
33 Set Template related fields
34 when the In Reply To Id field is null we know the interface
35 is called on page load. Here we check if
36 there are any previous emails attached to the case and load
37 the 'New_Case_Created' or 'Automatic_Response' template.
38 When the In Reply To Id field is not null we know that
39 the interface is called on click of reply/reply all
40 of an email and we load the 'Default_reply_template' template
41 */
42 if (sendEmailDefaults.getInReplyToId() == null) {
43 Integer emailCount = [SELECT count() FROM EmailMessage
44 WHERE ParentId=:sendEmailDefaults.getContextId()];
45 if (emailCount!= null && emailCount > 0) {
46 sendEmailDefaults.setTemplateId(
47 getTemplateIdHelper('Automatic_Response'));
48 } else {
49 sendEmailDefaults.setTemplateId(
50 getTemplateIdHelper('New_Case_Created'));
51 }
52 sendEmailDefaults.setInsertTemplateBody(false);
53 sendEmailDefaults.setIgnoreTemplateSubject(false);
54 } else {
55 sendEmailDefaults.setTemplateId(
56 getTemplateIdHelper('Default_reply_template'));
57 sendEmailDefaults.setInsertTemplateBody(false);
58 sendEmailDefaults.setIgnoreTemplateSubject(true);
59 }
60 }
61 }
62
63 private Id getTemplateIdHelper(String templateApiName) {
64 Id templateId = null;
65 try {
66 templateId = [select id, name from EmailTemplate
67 where developername = : templateApiName].id;
68 } catch (Exception e) {
69 system.debug('Unble to locate EmailTemplate using name: ' +
70 templateApiName + ' refer to Setup | Communications Templates '
71 + templateApiName);
72 }
73 return templateId;
74 }
75private String getBccAddress(String reason) {
76 if (reason != null && reason.equals('Technical'))
77 { return 'support_technical@mycompany.com'; }
78 else if (reason != null && reason.equals('Billing'))
79 { return 'support_billing@mycompany.com'; }
80 else { return 'support@mycompany.com'; }
81 }
82
83
84}この例では、onInitDefaults メソッドを使用して、配列で渡された要素がケースフィードの標準の [メール] アクション用であるかどうかを確認します。次に、クエリを実行してケース優先度が [高] に設定されているかどうかを判断します。優先度が [高] に設定されている場合、メールアドレス managers@acme.com が [BCC] 項目に追加されます。
1global class EmailPublisherForHighPriorityCases implements QuickAction.QuickActionDefaultsHandler {
2 // Empty constructor
3 global EmailPublisherForHighPriorityCases() {
4 }
5
6 // The main interface method
7 global void onInitDefaults(QuickAction.QuickActionDefaults[] defaults) {
8 QuickAction.SendEmailQuickActionDefaults sendEmailDefaults = (QuickAction.SendEmailQuickActionDefaults)defaults.get(0);
9 EmailMessage emailMessage = (EmailMessage)sendEmailDefaults.getTargetSObject();
10
11 Case c = [SELECT CaseNumber, Priority FROM Case WHERE Id=:sendEmailDefaults.getContextId()];
12
13 // If case severity is “High,” append “managers@acme.com” to the existing (and possibly blank) BCC field
14 if (c.Priority != null && c.Priority.equals('High')) { // Priority is 'High'
15 emailMessage.BccAddress = 'managers@acme.com';
16 }
17 }
18}この例では、onInitDefaults メソッドを使用して、配列で渡された要素がケースフィードの標準の [メール] アクション用であるかどうかを確認します。次に、クエリを実行してケース種別が [問題] に設定されているかどうかを判断します。種別が [問題] に設定されている場合、最初の対応メールテンプレートがメールの本文に挿入されます。
1global class EmailPublisherForCaseType implements QuickAction.QuickActionDefaultsHandler {
2 // Empty constructor
3 global EmailPublisherForCaseType() {
4 }
5
6 // The main interface method
7 global void onInitDefaults(QuickAction.QuickActionDefaults[] defaults) {
8 QuickAction.SendEmailQuickActionDefaults sendEmailDefaults = (QuickAction.SendEmailQuickActionDefaults)defaults.get(0);
9 EmailMessage emailMessage = (EmailMessage)sendEmailDefaults.getTargetSObject();
10
11 Case c = [SELECT CaseNumber, Type FROM Case WHERE Id=:sendEmailDefaults.getContextId()];
12
13 // If case type is “Problem,” insert the “First Response” email template
14 if (c.CaseNumber != null && c.Type.equals('Problem')) {
15 sendEmailDefaults.setTemplateId('Insert Email Template ID Here'); // Set the template Id corresponding to First Response
16 sendEmailDefaults.setInsertTemplateBody(true);
17 sendEmailDefaults.setIgnoreTemplateSubject(false);
18 }
19}この例では、onInitDefaults メソッドを使用して、配列で渡された要素がケースフィードの標準の [メール] アクション用であるかどうかを確認します。次に、クエリを実行してメールが [返信] または [全員に返信] のメールであるかどうかを判断します。メールが [返信] または [全員に返信] のメールである場合、それらのメールに対応するメールテンプレートがメールの本文に挿入されます。
1global class EmailPublisherForReplyAndReplyAll implements QuickAction.QuickActionDefaultsHandler {
2
3 // Empty constructor
4 global EmailPublisherForReplyAndReplyAll() {
5
6 }
7
8 // The main interface method
9 global void onInitDefaults(QuickAction.QuickActionDefaults[] defaults) {
10
11 QuickAction.SendEmailQuickActionDefaults sendEmailDefaults = (QuickAction.SendEmailQuickActionDefaults)defaults.get(0);
12 EmailMessage emailMessage = (EmailMessage)sendEmailDefaults.getTargetSObject();
13
14 // If the email is a “Reply” email, insert the “Reply Email Template” to the email body
15 if (sendEmailDefaults.getActionName().equals('EmailMessage._Reply')) {
16 sendEmailDefaults.setTemplateId('Insert Reply Email Template ID Here');
17
18 sendEmailDefaults.setInsertTemplateBody(true);
19 sendEmailDefaults.setIgnoreTemplateSubject(false);
20
21 // If the email is a “Reply All” email, insert the “Reply All Email Template” to the email body
22 } else if (sendEmailDefaults.getActionName().equals('EmailMessage._ReplyAll')) {
23 sendEmailDefaults.setTemplateId('Insert Reply All Email Template ID Here');
24
25 sendEmailDefaults.setInsertTemplateBody(true);
26 sendEmailDefaults.setIgnoreTemplateSubject(false);
27
28}