Всем привет!
Есть у меня такой код:
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] 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 какой? Со страницей ошибки может?
Нет, кусок 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]
Авторизация не прошла. Скорее всего страница с пдф контентом не доступна гостевому профилю.
Авторизация не прошла. Скорее всего страница с пдф контентом не доступна гостевому профилю.
Я так и подумал. Сделал рассылку через Scheduled Jobs
[quote="wilder"]Авторизация не прошла. Скорее всего страница с пдф контентом не доступна гостевому профилю.[/quote] Я так и подумал. Сделал рассылку через Scheduled Jobs
чет я сразу не вспомнил,
этот страничный метод не вернет ПДФ если нет сессии, а ее нет у сайтового юзера, а также например как в Email listener. Удивляюсь что это работает в Scheduled Jobs, там ведь тоже нет сессии
я использовал другой метод Blob.toPdf(stringToConvert), он более стабильный, но HTML стринг приходится конечно в коде собирать "ручками"
чет я сразу не вспомнил, этот страничный метод не вернет ПДФ если нет сессии, а ее нет у сайтового юзера, а также например как в Email listener. Удивляюсь что это работает в Scheduled Jobs, там ведь тоже нет сессии я использовал другой метод Blob.toPdf(stringToConvert), он более стабильный, но HTML стринг приходится конечно в коде собирать "ручками"
Интересный вариант. Надо попробовать.
Однако работает, и работает хорошо
[quote="Den Brown"]я использовал другой метод Blob.toPdf(stringToConvert), он более стабильный, но HTML стринг приходится конечно в коде собирать "ручками"[/quote] Интересный вариант. Надо попробовать. [quote="Den Brown"]дивляюсь что это работает в Scheduled Jobs, там ведь тоже нет сессии[/quote] Однако работает, и работает хорошо