Salesforce: как заставить поток понять, что ему необходимо получить информацию из учетной записи, указанной в моем планировщике вершины?

Я новичок в apex и создал класс расписания apex, который запускается каждый день. Если у учетной записи есть дата проверки учетной записи для комиссионных через две недели (14 дней), планировщик отправит электронное письмо в наш отдел продаж. В электронном письме содержится ссылка на поток. Поток запускает процесс расчета новой комиссии. Для этого поток должен понимать, что нужно извлекать информацию из учетной записи, которая инициировала отправку электронного письма, учетной записи, для которой дата проверки учетной записи составляет 2 недели.

В настоящее время письмо отправляется нормально со ссылкой на поток. Ссылка на поток работает, но как только вы попадаете в поток, поток не знает / не понимает, из какой учетной записи он должен получать информацию. Я не уверен, нужно ли мне изменять свой код в планировщике и / или код в моем потоке.

Вот как поток получает доступ к информации:

Перед первым экраном происходит поиск записи в потоке. Он извлекает информацию из идентификатора учетной записи и переменной vaAccountID. Я думаю, что переменная {! VaAccountID} заполнена идентификатором AccountID, который связан с комиссией.

Когда я запускаю свой планировщик, он определяет, есть ли учетная запись с датой проверки учетной записи на основе идентификатора учетной записи. Он отправляет шаблон электронного письма со ссылкой на поток в отдел продаж.

Планировщик отправляет электронное письмо и доволен. Критерии, необходимые для выполнения метода, выполнены (есть учетная запись с датой проверки учетной записи через 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 и способах устранения неполадок в этом вопросе? Я понимаю, что этот процесс очень сложен, но он связан с одним фундаментальным вопросом: как заставить поток понять, что ему нужно извлекать информацию из учетной записи, для которой в моем планировщике вершины была дата проверки через 14 дней?


person user1529039    schedule 25.07.2012    source источник


Ответы (1)


Взгляните на инструкцию SOQL, которая выполняется в сообщении об ошибке:

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

Это говорит мне о том, что ссылка в вашем шаблоне электронной почты передает буквальное значение "{! Commission__c.AccountId__c}" в ваш SOQL, а не связывает значение этого поля при отправке электронного письма. Таким образом, вместо того, чтобы передавать идентификатор учетной записи в URL-адрес, вы передаете эту строку, которая, безусловно, не соответствует ожиданиям потока.

Это может произойти, если имя API поля введено неправильно в шаблоне электронной почты или если запись, привязанная к шаблону, не имеет типа Commission__c, как вы ожидали. Таким образом, это может быть одно из двух: либо отправляемая вами запись не соответствует типу объекта для шаблона электронной почты 00XF0000000LfE0, либо в объекте Commission__c отсутствует поле AccountId__c.

person JCD    schedule 25.07.2012