I have a visualforce page (a letter menu) that on the click of a button (downloads a PDF and saves a letter to the record):

<apex:commandButton action="{!saveLetter}" value="Download Letter"/>

Runs some apex which includes a controller extension with:

pageReference pdf = Page.visualforce_detail_page;
return pdf;

This then displays the "visualforce_detail_page" that only includes a standard controller. On this page I have some fields like:

<apex:page standardController="WorkOrder" renderAs="PDF"  showHeader="false" >

If I was to view this page directly from the Case Detail page it works as expected, so does typing in the url manually. However if I try and open the detail visualforce from the 1st one it produces the error:

standard SObject row was retrieved via SOQL without querying the requested field: address_line_1__c

What I don't understand is why it works from the detail page, as I would expect, but it doesn't work when called from the visualforce page and the ID passed with it? The only field I have been able to get to work is "WorkOrderNumber"...

P.S I was hoping the "letters" whilst all called from the "letter menu" don't need custom apex. I wanted to use the standard controller, to save a bit of time and work tbh.


I found a workaround for this and I don't fully understand why it is required when both visualforce pages use the same standard controller but here it is:

On the first visualforce page you must include all of the fields that are displayed on the second visualforce page. I have hidden them in a div like this:

    display: none;    

<div class="hidden">

Then on the second visualforce just copy the fields on as normal and it works for me:


Apologies for some mistakes in the question, in the end the 1 line of code that was causing the problem was the getContentAsPDF() but the above resolved the issue.

Your Answer

