Standard Page Buttons To Run Apex Class (not a webservice class)

How do you solve the following requirement, there are lot of ways to do it but we feel this is best for our case.

The Requirement: When user clicks on "Close All Cases" custom button on Account Detail Page, It should update status of all the child case records.

Fortunately we already have a class that updates the case status to "Closed". all we need to so is call that class.

Our Solution: Have a custom field, a small trigger to call that class.

Step1: Create a custom checkbox "closecases".

Step 2:  Create a custom detail page button "Close All The Cases" and show it on the page layout
 with the following code:
================================================
{!REQUIRESCRIPT("/soap/ajax/19.0/connection.js")}  
var a = new sforce.SObject("Account");
a.id = "{!Account.Id}";
a.closecases__c=true;
var result = sforce.connection.update([a]);
// alert(result);
window.location.reload();
================================================


Step 3: Create a simple trigger when the value changes from false to true (only).

================================================

trigger triggeredfrombuttonclosecases on Account (after update) {
string oldbox;
string newbox;

// get the old box value
      for(account old: trigger.old){
       oldbox= old.closecases__c;
      }
//get the updated value
      for(account newt: trigger.new){
       newbox= newt.closecases__c;
      }
// when both are not equal call the method in the class. so that it wont be triggered all the time.    
    if(oldbox!=newbox && newbox==true){
    bulkcases.updateAll(trigger.new[0].id)  
    }
}
================================================

Step 4. Create a WFR on case, when the new case is created update the parent field closecases__c to false.

So its complete without having to expose the existing functional class as a webservice class or create a new webservice class. pretty resourceful isnt it?

This solution can also be used to invoke classes like approvalprocesses, or so...

Please notice that this is 4 step process compared to "sforce.connection.execute", a single line.

As an alternative; you could create a webservice class instead of trigger to call the apex class, but I prefer to keep it in the same box instead of increasing the calls count unnecessarily.

HTH
Prabhan.




Comments

Popular posts from this blog

Lightning spinner inside Button

Passing URL parameters to controller in Lightning components/ AURA

Nested AURA:IFs in Lightning Components Salesforce