2009-07-01 20 views
1

カスタムクラスを使用しているコンポーネントを作成しました。このコンポーネントを電子メールテンプレートに追加しました。私が試してテンプレートを読み込むとき、これは私が受け取るエラーメッセージです。 リストには、SObjectへの割り当ての行がありません。私が作成した属性が私のクラスに値を渡すことではないことがわかります。SalesForceの電子メールテンプレートからIDがカスタムコントローラに渡されない

また、メールを送信するためにタスクページをプルアップすると、OpportunityIDはp3_lkidのキーを持つクエリ文字列の一部です。しかし、テンプレートを選択すると、クエリーストリングがリセットされます。

私は以下の関連コードを同封しました。

コンポーネント

<apex:component access="global" controller="ProbeQuoteEmail"> 
<apex:attribute name="opportunityID" 
description="This is the ID of the opportunity." 
type="ID" assignTo="{!opportunityID}" /> 

<apex:repeat value="{!ProbeProducts}" var="p"> 
<p>{!p.ProductFamily__c}</p> 
<table border='1'> 
<apex:repeat value="{!p.OpportunityLineItems}" var="line"> 

<tr> 
<td ><apex:outputText value="{!line.Quantity}"/></td> 
<td ><apex:outputText value="{!line.PricebookEntry.Name}"/></td> 
<td align="right"><apex:outputField value="{!line.UnitPrice}"/></td> 
<td align="right"><apex:outputField value="{!line.TotalPrice}"/></td> 
</tr> 

</apex:repeat> 
</table> 
</apex:repeat> 

</apex:component> 

メールテンプレート

<messaging:emailTemplate subject="Your requested quote n° {!relatedTo.Id}" 
     recipientType="Contact" relatedToType="Opportunity"> 
<messaging:plainTextEmailBody > 
Dear {!recipient.name}, 

     Thank you for your continued interest in our offering. Please see the attached quote per your request. 

     Feel free to contact me if you have any questions. 

     Regards, 
     {!$User.FirstName} {!$User.LastName} 

</messaging:plainTextEmailBody> 
    <messaging:attachment renderAs="pdf" filename="{!relatedTo.name}">   

    <c:ProbeQuoteProducts opportunityID="{!relatedTo.Id}"/> 

    </messaging:attachment>  


</messaging:emailTemplate> 

のApexクラス

public class ProbeQuoteEmail { 
    Schema.DescribeFieldResult F = Product2.Family.getDescribe(); 
    List<Schema.PicklistEntry> P = F.getPicklistValues(); 

    public Opportunity Probe { get; set; } 

    public Id opportunityID { get; set; } 

    public List<Opportunity> ProbeProducts = new List<Opportunity>(); 

    Integer Counter = 1; 

    public ProbeQuoteEmail() { 

     for (Schema.PicklistEntry fam:P){ 
      Integer i = 0; 
      String FamilyLabel = fam.GetLabel(); 

      Probe = [SELECT o.Id, o.Name, o.Amount, o.ProductFamily__c, (SELECT op.Quantity, op.UnitPrice, op.TotalPrice, 
         op.PricebookEntry.Name, op.OpportunityId, op.PricebookEntry.ProductCode, 
         op.PricebookEntry.Product2.Family, op.LineCount__c 
         FROM OpportunityLineItems op WHERE op.PricebookEntry.Product2.Family = :FamilyLabel) 
         FROM Opportunity o where Id = :opportunityID]; 

       Probe.Amount = 0; 
       Probe.ProductFamily__c = FamilyLabel; 

       for(i=0;i<Probe.opportunityLineItems.size();i++) { 
        Probe.Amount += Probe.opportunityLineItems[i].TotalPrice; 
        Probe.opportunityLineItems[i].LineCount__c = Counter; 
        Counter++; 
       } 

      ProbeProducts.add(Probe); 
     } 
    } 

    public List<Opportunity> getProbeProducts() { 
     return ProbeProducts; 
    } 


} 

答えて

1

私はそれがかもしれないと思いますあなたがコンストラクタ内のopportunityID変数にアクセスしているという事実に関係しています。変数が設定される前に、まずコンストラクタが呼び出されます。代わりに、このロジックを設定ツールに入れることができます。

関連する問題