Visualforce メールテンプレート内でのカスタムコントローラの使用
Visualforce メールテンプレートでは、高度にカスタマイズされたコンテンツを表示するためにカスタムコントローラを活用できます。このためには、そのカスタムコントローラを使用する Visualforce メールテンプレートにカスタムコンポーネントを含めます。
たとえば、メールテンプレートで「Smith」という語で始まるすべての取引先のリストを表示するとします。このためには、まず、SOSL コールを使用するカスタムコントローラを作成して、「Smith」で始まる取引先のリストを返します。
1swfobject.registerObject("clippy.codeblock-0", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class findSmithAccounts {
18 private final List<Account> accounts;
19
20 public findSmithAccounts() {
21 accounts = [select Name from Account where Name LIKE 'Smith_%'];
22 }
23
24 public List<Account> getSmithAccounts() {
25 return accounts;
26 }
27}次に、このコントローラを使用する smithAccounts というカスタムコンポーネントを作成します。
1swfobject.registerObject("clippy.codeblock-1", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<apex:component controller="findSmithAccounts" access="global">
18 <apex:dataTable value="{!SmithAccounts}" var="s_account">
19 <apex:column>
20 <apex:facet name="header">Account Name</apex:facet>
21 {!s_account.Name}
22 </apex:column>
23 </apex:dataTable>
24</apex:component>最後に、smithAccounts コンポーネントを含む Visualforce メールテンプレートを作成します。
1swfobject.registerObject("clippy.codeblock-2", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<messaging:emailTemplate subject="Embedding Apex Code" recipientType="Contact" relatedToType="Opportunity">
18 <messaging:htmlEmailBody>
19 <p>As you requested, here's a list of all our Smith accounts:</p>
20 <c:smithAccounts/>
21 <p>Hope this helps with the {!relatedToType}.</p>
22 </messaging:htmlEmailBody>
23</messaging:emailTemplate>emailTemplate コンポーネントには relatedToType 属性が必要ですが、この例ではこの属性は有効ではありません。この属性には、カスタムコンポーネントで使用されているオブジェクトとは異なるオブジェクト値をこの属性が取ることができるということを示す目的でのみ、"Opportunity" という値が設定されています。