引用 Apex 中的列表的 visualforce 电子邮件模板问题 class

visualforce emailtemplate issue referencing a list in an Apex class

我在尝试实施 visualforce 电子邮件模板时遇到错误。开发控制台在 VF 组件上给我以下问题:Unknown 属性 'String.Name'(第 0 行)。我不知道如何解决这个问题。因此电子邮件模板不起作用并给我错误:

我的目标是从产品订单(父级)发送电子邮件。在电子邮件中我想包含子记录(产品订单项)。

顶点class:

public  class ProductOrderTemplate
{
    public Id ProductorderID{get;set;}
    public List<Product_Order_Item__c> getProductorderItems()
    {
        List<Product_Order_Item__c> toi;
        toi = [SELECT Product_Type__r.Name, Quantity__c FROM Product_Order_Item__c WHERE Product_Order__c =: ProductorderID];
        return toi;
    }
}

visualforce 组件:

<apex:component controller="ProductOrderTemplate" access="global">
    <apex:attribute name="ProductOrdId" type="Id" description="Id of the Product order" assignTo="{!ProductorderID}"/>
    <table border = "2" cellspacing = "5">
        <tr>
            <td>Name</td>
            <td>Quantity</td>               
        </tr>
        <apex:repeat value="{!ProductorderID}" var="toi">
        <tr>
            <td>{!toi.Name}</td>
            <td>{!toi.Quantity}</td>             
        </tr>
        </apex:repeat>       
    </table>
</apex:component>

以及电子邮件:

<messaging:emailTemplate subject=“Product Order” recipientType="User" relatedToType=“Productorder”>
    <messaging:htmlEmailBody >
    Hi,<br/>
    Below is the list of ... for your Product order {!relatedTo.Name}.<br/><br/>
    <c:ProductOrderItemList ProductOrderId="{!relatedTo.Id}" /><br/><br/>
    <b>Regards,</b><br/>
    {!recipient.FirstName}
    </messaging:htmlEmailBody>
</messaging:emailTemplate>

非常感谢任何帮助!非常坚持这一点。我是 visualforce 和 apex 的新手。

您可能只需要一个没有组件和顶点的 VF 电子邮件模板 class。转到 Product_Order_Item__c object,找到 Product_Order__c 字段定义。写下“Child 关系名称”。

假设它是“Line_Items”。您需要在末尾添加“__r”(why?),然后您可以这样做:

<messaging:emailTemplate subject="Product Order" recipientType="User" relatedToType="Productorder">
    <messaging:htmlEmailBody >
    
    <p>here are your line items</p>
    <table>
        <apex:repeat value="{!relatedTo.Line_Items__r}" var="item">
            <tr>
                <td>{!item.Name}</td>
                <td>{!item.Quantity}</td>             
            </tr>
        </apex:repeat>
    </table>
    </messaging:htmlEmailBody>
</messaging:emailTemplate>

如果您仍然认为您需要 Apex 和组件(也许您想过滤掉一些记录,也许您想对它们进行排序或有一段可重复使用的标记用于多封电子邮件)...

...您收到的错误是因为 ProductorderID 是单个字符串(嗯,Id)变量。但是您已经重复使用它,期望 list/array。对 <apex:repeat value="{!ProductorderItems}" var="toi"> 的引用应该调用你的 getProductorderItems() 并且工作得更好。