Ich habe eine Komponente erstellt, die eine benutzerdefinierte Klasse verwendet. Ich habe diese Komponente zu einer E-Mail-Vorlage hinzugefügt. Wenn ich die Vorlage versuche und lade, ist dies die Fehlermeldung, die ich erhalte. Die Liste enthält keine Zeilen für die Zuweisung zu SObject. Von dem, was ich sagen kann, übergibt das Attribut, das ich erstellt habe, den Wert nicht an meine Klasse.ID wird nicht an benutzerdefinierten Controller aus E-Mail-Vorlage in SalesForce übergeben
Wenn ich zum ersten Mal die Task-Seite zum Senden einer E-Mail aufrufen, ist die OpportunityID Teil der Querystring mit einem Schlüssel von p3_lkid. Wenn ich jedoch die Vorlage auswähle, wird der Querystring zurückgesetzt.
Ich habe den entsprechenden Code unten beigefügt.
Komponente
<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>
E-Mail-Vorlage
<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 Klasse
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;
}
}