Salesforce:尝试从计划作业交付CSV

Salesforce:尝试从计划作业交付CSV,salesforce,Salesforce,我读到有人能做到这一点,但我很难让它发挥作用 基本上,我正在安排一个HTTP调用到一个页面,该页面有一个构建CSV并通过电子邮件将其发送给收件人的控制器 排定的课程: global class ReportExporter implements System.Schedulable { global void execute(SchedulableContext sc) { getmailReportOutput ex = new getmailReportOutput(); e

我读到有人能做到这一点,但我很难让它发挥作用

基本上,我正在安排一个HTTP调用到一个页面,该页面有一个构建CSV并通过电子邮件将其发送给收件人的控制器

排定的课程:

global class ReportExporter implements System.Schedulable {
global void execute(SchedulableContext sc) {
    getmailReportOutput ex = new getmailReportOutput();
    ex.exportCSV();
    }
}

getEmailReportOutput类:

public class getmailReportOutput{

    public Static String strSessionID;

    public getmailReportOutput() {
        }

   public void exportCSV() {
        makeReportRequest();
       }

@future (callout=true)      
    public Static void makeReportRequest()  {               
        strHost ='c.cs4.visual.force.com';
        strSessionID = UserInfo.getSessionId();
        String requestUrl =  'https://' + strHost + '/apex/TestSendReport#';        
        HttpRequest req = new HttpRequest();
        req.setEndpoint(requestUrl);
        req.setMethod('GET');
        req.setHeader('Cookie','sid=' + strSessionID );
        String output = new Http().send(req).getBody();
        System.debug('HTTP RESPONSE RETURNED: ' + output);
        }
    }
getEmailReportOutput类对VF页面进行HTTP调用:我确保将sessionID与请求一起发送: “TestSendReport”只是控制器的一个简单调用:

<apex:page controller="Exporter" action="{!runrpt}">
</apex:page>

……有什么想法吗?调试日志显示一切正常,但没有收到任何消息。我知道这是一堵代码墙,但这似乎是人们为完成这项任务而推荐的——我看不出有什么错。

我看不到这里明显缺少什么:/

为了安全起见-
getEmailReportOutput
&
getmailReportOutput
是同一个类(文章中的输入错误,而不是实际代码中的输入错误)

这看起来像是跳跃了很多跳跃,我是否正确地理解了它是计划类->REST调用->带有操作的VF页面->@future->发送电子邮件?天哪,这里可能会出很多问题;)调用同一个实例可能会阻止您使用page.getContent

你能看到报告正文
System.debug(report.getContent().toString())?您是否可以尝试将此电子邮件保存为您自己用户的任务,或保存在示例帐户下,例如(
setSaveAsActivity()


尽管它是公开的插头-我已经使用不同的路径来解决类似的需求。看看你能不能让它发挥作用?

你好,谢谢你的眼霜-我真的用你的帖子找到了我的位置:-)!我会试着更仔细地运用你的建议,看看能不能再进一步。顺便说一句-是的,有很多啤酒花。。。计划程序-->调用-->报告-->另一个类。。。我试图回避getContent()不使用shechulableContext的问题,但我想我做得太过火了。只需尝试直接对报告页面进行计划类->REST调用,然后从中发送电子邮件;)嗨,眼霜-谢谢你的帮助。我让它工作了!这实际上是对代码的简化,但我在博客上给出了我的答案:我也插入了你原来的帖子。此外,其中两个步骤不符合顺序,但我认为ppl会明白这一点。再次感谢你的帮助!酷一:)将此评论作为您自己的答案发布并接受。实际上,为什么不在SF stackexchange上发布它(或者至少在评论中交叉链接)?它与我的完整解决方案没有太大区别(用户希望将报告发送到内部和外部电子邮件地址,ScheduledJob在所有写有“星期一”的配置记录中循环,等等。)不-它都已安装并完成。。。我不想再看到这个问题(目前:-)-我将让您的解决方案作为标准:)
    public class Exporter {
    public static Boolean isTest;
    public static String strEmailAddr;

    public void runrpt() {
        executeRpt();
        }       
@future          
    public static void executeRpt() {
        System.debug('CALLING REPORT EXPORTER...');        
        String ReportName__c = '00OP0000000Jp3N';
        String strEmailAddr =  'myname@email.com';

        ApexPages.PageReference report = new ApexPages.PageReference( '/' + RptName__c + '?csv=1');

        Messaging.EmailFileAttachment attachment = new Messaging.EmailFileAttachment();
        attachment.setFileName('report.csv');
        attachment.setBody(report.getContent());
        attachment.setContentType('text/csv');
        Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
        message.setFileAttachments(new Messaging.EmailFileAttachment[] { attachment } );
        message.setSubject('Report');
        message.setPlainTextBody('The report is attached.');
        message.setToAddresses( new String[] { strEmailAddr } );
        Messaging.sendEmail( new Messaging.SingleEmailMessage[] { message } );        
    }

}