I have a Visualforce Email Template which is as follows

<messaging:emailTemplate recipientType="Contact"
<apex:repeat first="0" rows="1" value={!ralatedTo.workorders} var="worder">
Click <a href = "{!$Lable.myURL}?workorderId={!worder.Id}">here.</a>

Using the <apex:repeat> I am getting one Workorder record data which I need to pass in the URL. I need the Workorder here which is last created (1st result when Workorder query is done with order by creation date in desc). Is there a way I can get it without controller class?

Also, I tried the solutions with the controller class. I am creating a controller class and an apex component but how can I pass the data from apex component to the email template as I don't want to display it but reuse the value?

1 Answer 1


Without a way to specify a controller or extension in the template itself, anything you do in the component will be constrained to that component. You also can't reliably use <apex:variable> within an <apex:repeat>, so there's no reliable way to get the work order that you're looking for. A better solution would be to place the entire contents of the email in the component, where the template itself is only a placeholder:

<messaging:emailTemplate recipientType="Contact" relatedToType="Case" subject="Test">
  <c:workorderEmailTemplate caseId="{!relatedTo.Id}" contactId="{!recipient.Id}" />

This will give you the control you're looking for.

  • Thanks! It resolved my issue. I didn't put the full template in the component but just the link. Mar 1, 2021 at 20:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.