Вызов страницы visualforce через запланированную вершину

У меня есть запланированный класс, который я хотел бы работать так, чтобы он вызывал страницу visualforce, которая выполняет действия с записью. В настоящее время пользователь должен нажать кнопку на отдельной записи, которая вызывает страницу visualforce. Я хочу, чтобы запланированный апекс запускался и выполнялся автоматически. Вот что у меня есть на данный момент. Я поместил имя страницы visualforce в закомментированном виде в качестве заполнителя на данный момент. Любое руководство будет очень полезно!

 global class LastLoginUpdate implements Schedulable{
    global void execute(SchedulableContext SC) {

    List<Case> Cases = [SELECT ID, status, Queue_for_Traccinvoice__c FROM Case WHERE          status = 'to be billed'];
for(case c : Cases){
    if(c.status == 'to be billed'){
        //Call CreateTraccInvoice;
    }
}

update cases;

} }


person Rich    schedule 28.04.2014    source источник


Ответы (2)


Вместо «вызова» страницы вы должны выполнить метод действия в классе контроллера, который отвечает за эту страницу. Если вы посмотрите на упомянутую страницу, вверху вы должны увидеть что-то вроде <apex:page controller="myController" ..., где myController - это имя класса, который содержит логику для этой страницы. Если кнопка, о которой вы говорили, не является стандартным действием (например, «Сохранить» или «Удалить»), в этом классе контроллера определено настраиваемое действие, и оно связано с упомянутой вами кнопкой через атрибут action="..." в теге <apex:commandButton>.

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

P.S. чтобы сделать решение более перспективным и избежать выхода за пределы регулятора, вместо повторного использования существующего действия и потенциального выполнения оператора DML для каждого отдельного случая, который вы просматриваете, рассмотрите возможность изменения репликации логики функции действия в запланированном классе, но измените ее так, чтобы он может обрабатывать список случаев в качестве входных данных.

person IvanR    schedule 28.04.2014

- Не знаю, с какой целью вызывается страница VF. Если страница VF, в свою очередь, вызывает метод apex для выполнения какого-либо действия / функции, вы можете очень хорошо создать здесь экземпляр класса Apex и вызвать метод.

  • Также вам не нужно снова проверять «if (c.status == 'to be billing')» в цикле for. Вы уже получаете записи на основе статуса «Только выставление счета».
person Pundareekam Kudikala    schedule 28.04.2014
comment
Да, я понял это после того, как хаха. Мне стало интересно, почему бы просто не поместить код из контроллера в класс. Спасибо, парни! - person Rich; 29.04.2014