この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Visualforce メールテンプレート内でのカスタムコントローラーの使用

Visualforce メールテンプレートでは、高度にカスタマイズされたコンテンツを表示するためにカスタムコントローラーを活用できます。このためには、そのカスタムコントローラーを使用する Visualforce メールテンプレートにカスタムコンポーネントを含めます。

たとえば、メールテンプレートで「Smith」という語で始まるすべての取引先のリストを表示するとします。このためには、まず、SOSL コールを使用するカスタムコントローラーを作成して、「Smith」で始まる取引先のリストを返します。
1public class findSmithAccounts {
2	private final List<Account> accounts;
3
4	public findSmithAccounts() {
5		accounts = [select Name from Account where Name LIKE 'Smith_%'];
6	}
7
8	public List<Account> getSmithAccounts() {
9		return accounts;
10	}
11}
次に、このコントローラーを使用する smithAccounts というカスタムコンポーネントを作成します。
1<apex:component controller="findSmithAccounts" access="global">
2	<apex:dataTable value="{!SmithAccounts}" var="s_account">
3		<apex:column>
4			<apex:facet name="header">Account Name</apex:facet>
5			{!s_account.Name}
6		</apex:column>
7	</apex:dataTable>
8</apex:component>

Visualforce メールテンプレートで使用されているすべてのカスタムコンポーネントには globalaccess レベルが必要です。

ヒント

最後に、smithAccounts コンポーネントを含む Visualforce メールテンプレートを作成します。
1<messaging:emailTemplate subject="Embedding Apex Code" recipientType="Contact" relatedToType="Opportunity">
2	<messaging:htmlEmailBody>
3		<p>As you requested, here's a list of all our Smith accounts:</p>
4		<c:smithAccounts/>
5		<p>Hope this helps with the {!relatedToType}.</p>
6	</messaging:htmlEmailBody>
7</messaging:emailTemplate>

emailTemplate コンポーネントには relatedToType 属性が必要ですが、この例ではこの属性は有効ではありません。この属性には、カスタムコンポーネントで使用されているオブジェクトとは異なるオブジェクト値をこの属性が取ることができるということを示す目的でのみ、"Opportunity" という値が設定されています。

メールテンプレートで標準コントローラーを使用する��合は、共有設定が適用されます。ユーザーオブジェクトの組織の共有設定が [非公開] に設定されており、Visualforce メールテンプレートで名前やメールアドレスなどのユーザー情報にアクセスする必要がある場合は、without sharing キーワードを使用してカスタムコンポーネントまたはカスタムコントローラーを使用できます。

ユーザーオブジェクトの共有についての詳細は、Salesforce オンラインヘルプの「ユーザー共有の概要」を参照してください。

メモ