Visualforce形式のメールテンプレートを作成しているときに、いくつか表示のフォーマットで苦労したので、メモしておこうと思います。
特に、差込項目としてそのままだと、なかなか思ったように表示させることができませんでした。
日時(Datetime)項目が欧米式のフォーマットで表示されてしまう
日時(Datetime)項目をそのまま表示すると、「Sun Jan 01 05:51:00 GMT 2017」のようにGMTで、しかも欧米式のフォーマットで表示されてしまいます。
「2017/01/01 14:51:22」のように表示するにはどうしたらいいでしょう?
Visualforceでは、「outputtext」を使うと、フォーマットを指定できます。
(※下記では、ColDatetime__cが日時項目だとします)
さらに、時間の加算も出来るので、標準時+9時間だと、(9/24)で日本時間にすることができます。
<!-- 日本時間での日時表示 -->
<apex:outputtext value="{0, date, yyyy/MM/dd HH:mm:ss}">
<apex:param value="{!relatedTo.ColDatetime__c+(9/24)}"></apex:param>
</apex:outputtext>
整数の数値項目が小数点付きで表示されてしまう
数値項目は、「5.0」のように、小数点付きで表示されてしまいます。
オブジェクトの項目の定義で、小数点以下の桁数を0桁に変更しても変わりません。
そのような場合は、
<!-- 数値のカンマ区切り -->
<apex:outputtext value="{0, number, ###,###}">
<apex:param value="{!relatedTo.Number__c}"></apex:param>
</apex:outputtext>
<!-- 数値の0埋め表示 -->
<apex:outputtext value="{0, number, 000000}">
<apex:param value="{!relatedTo.Number__c}"></apex:param>
</apex:outputtext>
なお、もっと複雑なことをしたい場合は、コンポーネントを使うと簡単に実装できます。
やり方は「SalesforceのVisualforce Emailテンプレートで、コンポーネントを使用しpicklistの翻訳を取得する」を参考にしてください。
整数の数値項目がカンマ付きで表示されてしまう
一方、少し話はずれますが、apexコードで数値項目をString型に変更する場合、「String.valueOf(lead.Birth_Year_Marketo__c)」とすると、「1,500」のように、カンマ付きで表示されてしまいます。
そのような場合は、以下のように、一旦IntegerにしてからStringに変更すると「1500」のように表示されます。
String.valueOf(Integer.valueOf(lead.Birth_Year_Marketo__c))