0

我是 apex 的新手,并且已经建立了一个每天运行的 apex 计划课程。如果帐户的佣金帐户审核日期是两周(14 天)后,调度程序将向我们的销售部门发送电子邮件。该电子邮件包含指向流的链接。流程开始计算新佣金的过程。为此,流程需要了解从触发发送电子邮件的帐户中提取信息,该帐户的帐户审核日期为 2 周。

目前,电子邮件可以正常发送,并带有指向流程的链接。到流程的链接有效,但是一旦您进入流程,流程就不知道/理解它应该从哪个帐户提取信息。我不确定是否需要更改调度程序中的代码和/或流程中的代码。

以下是流程访问信息的方式:

在第一个屏幕之前,会发生流中的记录查找。它从帐户 ID 和变量 vaAccountID 中提取信息。我认为变量 {!vaAccountID} 填充了与佣金相关联的 AccountID。

当我运行我的调度程序时,我让它根据帐户 ID 确定是否有一个帐户具有帐户审核日期。它将带有流链接的电子邮件模板发送到销售部门。

调度程序发送电子邮件并且“高兴”。执行该方法所需的标准是完整的(有一个帐户的帐户审核日期为 14 天后,它会发送电子邮件)。

global class AccountReviewSchedulerEmailAcc implements Schedulable { 

    global void execute (SchedulableContext ctx) 
    { 
        sendEmail(); 
    }

    public void sendEmail()
    {

        for(Account acc : [SELECT Id FROM Account WHERE Next_Account_Review_Date__c = : system.Today().addDays(14)])
        {
            Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); 
            mail.setTemplateId('00XF0000000LfE0'); 
            mail.setTargetObjectId('005J0000000JWYx'); 
            mail.setSaveAsActivity(false);
            Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail }); 
        }
    }

}

然而,流程并不“快乐”。它不知道从哪个帐户中提取信息。

在流程的第一个屏幕中,它应该显示经常性收入并链接到帐户页面。经常性收入字段为空白。帐户页面的链接不起作用。

如果我尝试通过流程的第一个屏幕,我会收到来自 Salesforce 的一般错误屏幕和来自 Salesforce 的详细错误消息。它说:

Encountered unhandled fault when running process Organic_Commission_Determination_Flow/301J000000001Tx exception by user/organization: 00DJ00000000YTl/{4} Source organization: 00DA0000000KZI8 (null)
interaction.dal.exception.DALExecutionFault: ; nested exception is: 
    common.exception.ApiQueryException: 
Account.Annual_RR__c FROM Account WHERE (Account.Id = '{!Commission__c.AccountId__c}')
                                         ^ ERROR at Row:1:Column:89 invalid ID field: {!Commission__c.AccountId__c} (There was a problem executing your command.) > RETRIEVE

caused by element : Data lookup.Lookup_Account

caused by: interaction.dal.exception.DALExecutionFault: ; nested exception is: 
    common.exception.ApiQueryException: 
Account.Annual_RR__c FROM Account WHERE (Account.Id = '{!Commission__c.AccountId__c}')
                                         ^ ERROR at Row:1:Column:89 invalid ID field: {!Commission__c.AccountId__c} (There was a problem executing your command.) > RETRIEVE

Salesforce Error ID: 580775287-15539 (1733087783)

这个错误信息是什么意思?如何获取有关 Salesforce 错误的更多信息以及如何解决此问题?我知道这个过程非常复杂,但它与一个基本问题有关:我如何让流程意识到它需要从我的 apex 调度程序中具有 14 天审查日期的帐户中提取信息?

4

1 回答 1

0

查看错误消息中正在执行的 SOQL 语句:

Account.Annual_RR__c FROM Account WHERE (Account.Id = '{!Commission__c.AccountId__c}')

这告诉我,您的电子邮件模板中的链接将文字值“{!Commission__c.AccountId__c}”传递到您的 SOQL,而不是在发送电子邮件时绑定该字段的值。因此,不是将帐户 ID 传递到 URL 中,而是传递这个字符串,这肯定不是流程所期望的。

如果在电子邮件模板中错误地输入了字段的 API 名称,或者绑定到模板的记录不是Commission__c您所期望的类型,则可能会发生这种情况。因此,这可能是以下两种情况之一:您发送的记录不是电子邮件模板的正确对象类型00XF0000000LfE0,或者对象上没有AccountId__c字段Commission__c

于 2012-07-25T20:02:42.363 回答