Регистрация  |  Вход

Генерация pdf от гостя

Всем привет!
Есть у меня такой код:

PageReference pdf = Page.ReceiptNo;
pdf.getParameters().put('id',don.id);
pdf.setRedirect(true);
Blob b = pdf.getContent();
Messaging.EmailFileAttachment efa = new Messaging.EmailFileAttachment();
efa.setFileName('Receipt No '+don.Name+'.pdf');
efa.setBody(b);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
List<String> adresses= new List<String>();
adresses.Add(don.Personal_Account__r.PersonEmail);
email.setToAddresses(adresses);
String body= 'Dear '+ don.Personal_Account__r.Name;
email.setHtmlBody(body);
email.setFileAttachments(new Messaging.EmailFileAttachment[] {efa});
mails.Add(email);
Messaging.sendEmail(mails);

Если я запускаю его от обычного юзера, то все хорошо, вложение в pdf нормально отображаеться. Но естли код запускать от Site Guest User (а от него и надо запускать), то приходит битый pdf файл. Страничка доступна профайлу Гостя.
Может кто то сталкивался?

Всем привет!
Есть у меня такой код:
[code]
                     PageReference pdf = Page.ReceiptNo;
                     pdf.getParameters().put('id',don.id);
                     pdf.setRedirect(true);
                     Blob b = pdf.getContent();    
                     Messaging.EmailFileAttachment efa = new Messaging.EmailFileAttachment();
                     efa.setFileName('Receipt No '+don.Name+'.pdf');
                     efa.setBody(b);
                     Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
                     List<String> adresses= new List<String>();
                     adresses.Add(don.Personal_Account__r.PersonEmail);
                     email.setToAddresses(adresses);
                     String body= 'Dear '+ don.Personal_Account__r.Name;
                     email.setHtmlBody(body);
                     email.setFileAttachments(new Messaging.EmailFileAttachment[] {efa});
                     mails.Add(email); 
                     Messaging.sendEmail(mails);    
[/code]
Если я запускаю его от обычного юзера, то все хорошо, вложение в pdf нормально отображаеться. Но естли код запускать от Site Guest User (а от него и надо запускать), то приходит битый pdf файл. Страничка доступна профайлу Гостя. 
Может кто то сталкивался?

Интересный факт.
Если открыть блокнотам эти pdf, то в битой(коротая не открывается) содержится html код, а в нормальной как и положено.

Интересный факт.
Если открыть блокнотам эти pdf, то в битой(коротая не открывается) содержится html код, а в нормальной как и положено.  

А html какой? Со страницей ошибки может?

А html какой? Со страницей ошибки может?

Dmitry Shnyrev
А html какой? Со страницей ошибки может?

Нет, кусок js кода SF.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">

<script>
if (this.SfdcApp && this.SfdcApp.projectOneNavigator) { SfdcApp.projectOneNavigator.handleRedirect('https://cityoftoronto--WSDEV.cs41.my.salesforce.com?ec=302&startURL=%2Fvisualforce%2Fsession%3Furl%3Dhttps%253A%252F%252Fcityoftoronto--WSDEV--c.cs41.visual.force.com%252Fapex%252Ftestpdfpage%253Finline%253D1'); } else
if (window.location.replace){
window.location.replace('https://cityoftoronto--WSDEV.cs41.my.salesforce.com?ec=302&startURL=%2Fvisualforce%2Fsession%3Furl%3Dhttps%253A%252F%252Fcityoftoronto--WSDEV--c.cs41.visual.force.com%252Fapex%252Ftestpdfpage%253Finline%253D1');
} else {;
window.location.href ='https://cityoftoronto--WSDEV.cs41.my.salesforce.com?ec=302&startURL=%2Fvisualforce%2Fsession%3Furl%3Dhttps%253A%252F%252Fcityoftoronto--WSDEV--c.cs41.visual.force.com%252Fapex%252Ftestpdfpage%253Finline%253D1';
}
</script>

</head>


</html>

<!-- Body events -->
<script type="text/javascript">function bodyOnLoad(){if(window.PreferenceBits){window.PreferenceBits.prototype.csrfToken="null";};}function bodyOnBeforeUnload(){}function bodyOnFocus(){}function bodyOnUnload(){}</script>

</body>
</html>


<!--
...................................................................................................
...................................................................................................
...................................................................................................
...................................................................................................
-->

[quote="Dmitry Shnyrev"]А html какой? Со страницей ошибки может?[/quote]
Нет, кусок js кода SF.
[code]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">





<script>
if (this.SfdcApp && this.SfdcApp.projectOneNavigator) { SfdcApp.projectOneNavigator.handleRedirect('https://cityoftoronto--WSDEV.cs41.my.salesforce.com?ec=302&startURL=%2Fvisualforce%2Fsession%3Furl%3Dhttps%253A%252F%252Fcityoftoronto--WSDEV--c.cs41.visual.force.com%252Fapex%252Ftestpdfpage%253Finline%253D1'); }  else 
if (window.location.replace){ 
window.location.replace('https://cityoftoronto--WSDEV.cs41.my.salesforce.com?ec=302&startURL=%2Fvisualforce%2Fsession%3Furl%3Dhttps%253A%252F%252Fcityoftoronto--WSDEV--c.cs41.visual.force.com%252Fapex%252Ftestpdfpage%253Finline%253D1');
} else {;
window.location.href ='https://cityoftoronto--WSDEV.cs41.my.salesforce.com?ec=302&startURL=%2Fvisualforce%2Fsession%3Furl%3Dhttps%253A%252F%252Fcityoftoronto--WSDEV--c.cs41.visual.force.com%252Fapex%252Ftestpdfpage%253Finline%253D1';
} 
</script>

</head>


</html>





<!-- Body events -->
<script type="text/javascript">function bodyOnLoad(){if(window.PreferenceBits){window.PreferenceBits.prototype.csrfToken="null";};}function bodyOnBeforeUnload(){}function bodyOnFocus(){}function bodyOnUnload(){}</script>
			
</body>
</html>


<!--
...................................................................................................
...................................................................................................
...................................................................................................
...................................................................................................
-->
[/code]

Авторизация не прошла. Скорее всего страница с пдф контентом не доступна гостевому профилю.

Авторизация не прошла. Скорее всего страница с пдф контентом не доступна гостевому профилю.

wilder
Авторизация не прошла. Скорее всего страница с пдф контентом не доступна гостевому профилю.

Я так и подумал. Сделал рассылку через Scheduled Jobs

[quote="wilder"]Авторизация не прошла. Скорее всего страница с пдф контентом не доступна гостевому профилю.[/quote]
Я так и подумал. Сделал рассылку через Scheduled Jobs

чет я сразу не вспомнил,

этот страничный метод не вернет ПДФ если нет сессии, а ее нет у сайтового юзера, а также например как в Email listener. Удивляюсь что это работает в Scheduled Jobs, там ведь тоже нет сессии

я использовал другой метод Blob.toPdf(stringToConvert), он более стабильный, но HTML стринг приходится конечно в коде собирать "ручками"

чет я сразу не вспомнил,

этот страничный метод не вернет ПДФ если нет сессии, а ее нет у сайтового юзера, а также например как в Email listener. Удивляюсь что это работает в  Scheduled Jobs, там ведь тоже нет сессии

я использовал другой метод Blob.toPdf(stringToConvert), он более стабильный, но HTML стринг приходится конечно в коде собирать "ручками"

Den Brown
я использовал другой метод Blob.toPdf(stringToConvert), он более стабильный, но HTML стринг приходится конечно в коде собирать "ручками"

Интересный вариант. Надо попробовать.

Den Brown
дивляюсь что это работает в Scheduled Jobs, там ведь тоже нет сессии

Однако работает, и работает хорошо

[quote="Den Brown"]я использовал другой метод Blob.toPdf(stringToConvert), он более стабильный, но HTML стринг приходится конечно в коде собирать "ручками"[/quote]
Интересный вариант. Надо попробовать.

[quote="Den Brown"]дивляюсь что это работает в Scheduled Jobs, там ведь тоже нет сессии[/quote]
Однако работает, и работает хорошо