function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
多映佳 岩村 8多映佳 岩村 8 

OrderItem情報をメールで送りたい

お世話になっております。

メールテンプレートに注文商品(OrderItem)の情報を差込たいのですが、どうしてもできません。
以下のような記述をしてみましたが、エラーとなりました。
何か方法はありませんでしょうか?
よろしくお願いいたします。

<messaging:emailTemplate recipientType="User"
    relatedToType="Order"
    Subject="契約満了のお知らせ">
 
    <messaging:htmlEmailBody >
      
    <html>
        <body>
       
        <p>契約満了日が近づいてきました。更新のご案内をしてください。</p>
 
        <table border="0">
            <tr>
               <th>商品</th> <th>数量</th> <th>単価</th> <th>合計金額</th>
             </tr>            
 
        <apex:repeat var="cx" value="{!relatedTo.OrderItem}">
      
            <tr>
                <td><a href = "https://xxxx.salesforce.com/{!cx.id}">{!cx.OrderItemNumber}
                </a></td>
                <td>{!cx.Product2}</td>
                <td>{!cx.Quantity}</td>
                <td>{!cx.UnitPrice}</td>
                <td>{!cx.TotalPrice}</td>
            </tr>
       
        </apex:repeat>

        </table>
      
        </body>
    </html>        
               
    </messaging:htmlEmailBody>

</messaging:emailTemplate>
Best Answer chosen by 多映佳 岩村 8
Ryosuke KobayashiRyosuke Kobayashi
こんにちは

Product2は画面上では見える項目なのでが、実態として、注文商品オブジェクトには持っていない項目になっています。
価格表エントリーというオブジェクト経由の情報になりますので、
以下のようにすれば、情報が出てくると思います(合計金額も同様なので、単価*数量を出力するようにしています)
<messaging:emailTemplate recipientType="User"
    relatedToType="Order"
    Subject="契約満了のお知らせ">
 
    <messaging:htmlEmailBody >
      
    <html>
        <body>
       
        <p>契約満了日が近づいてきました。更新のご案内をしてください。</p>
 
        <table border="0">
            <tr>
               <th>商品</th> <th>数量</th> <th>単価</th> <th>合計金額</th>
             </tr>            
 
        <apex:repeat var="cx" value="{!relatedTo.OrderItems}">
      
            <tr>
                <td><a href = "https://xxxx.salesforce.com/{!cx.id}">{!cx.OrderItemNumber}
                </a></td>
                <td>{!cx.PRICEBOOKENTRY.Product2.name}</td>
                <td>{!cx.Quantity}</td>
                <td>{!cx.UnitPrice}</td>
                <td>{!cx.UnitPrice * cx.Quantity}</td>

            </tr>
       
        </apex:repeat>

        </table>
      
        </body>
    </html>        
               
    </messaging:htmlEmailBody>

</messaging:emailTemplate>

All Answers

Ryosuke KobayashiRyosuke Kobayashi
こんにちは。

<apex:repeat var="cx" value="{!relatedTo.OrderItem}">
⇒ここでの指定は子リレーション名である必要があるので、"{!relatedTo.OrderItems}"ですかね。
多映佳 岩村 8多映佳 岩村 8
ご返信ありがとうございます。
子リレーション名、ご指摘ありがとうございます。そちらを直してもエラーになってしまいます。
よろしくお願いします。
多映佳 岩村 8多映佳 岩村 8
補足です。どうやらエラーは「Error: Invalid field Product2 for SObject OrderItem」で、商品名(Product2)が拾えていないようでした。
どのように記述すれば商品名が出せますでしょうか?
Ryosuke KobayashiRyosuke Kobayashi
こんにちは

Product2は画面上では見える項目なのでが、実態として、注文商品オブジェクトには持っていない項目になっています。
価格表エントリーというオブジェクト経由の情報になりますので、
以下のようにすれば、情報が出てくると思います(合計金額も同様なので、単価*数量を出力するようにしています)
<messaging:emailTemplate recipientType="User"
    relatedToType="Order"
    Subject="契約満了のお知らせ">
 
    <messaging:htmlEmailBody >
      
    <html>
        <body>
       
        <p>契約満了日が近づいてきました。更新のご案内をしてください。</p>
 
        <table border="0">
            <tr>
               <th>商品</th> <th>数量</th> <th>単価</th> <th>合計金額</th>
             </tr>            
 
        <apex:repeat var="cx" value="{!relatedTo.OrderItems}">
      
            <tr>
                <td><a href = "https://xxxx.salesforce.com/{!cx.id}">{!cx.OrderItemNumber}
                </a></td>
                <td>{!cx.PRICEBOOKENTRY.Product2.name}</td>
                <td>{!cx.Quantity}</td>
                <td>{!cx.UnitPrice}</td>
                <td>{!cx.UnitPrice * cx.Quantity}</td>

            </tr>
       
        </apex:repeat>

        </table>
      
        </body>
    </html>        
               
    </messaging:htmlEmailBody>

</messaging:emailTemplate>
This was selected as the best answer
多映佳 岩村 8多映佳 岩村 8
大変お世話になっております。
ご指摘のとおりに変更しましたところ、できました!!!
大変助かりました。分かりやすいご回答、本当にありがとうございます。