Calling a Workflow from a Custom Button
I had a requirement to place a custom button on a layout that needed to call a workflow to accomplish some action. This can’t be done natively but there is a neat little trick you can employ.
Workflows are triggered when specific field criteria is met. With this in mind, we need to create a Javascript button that updates a checkbox field on the object. I created a ‘toggle’ checkbox and set its default to unchecked.
I created a button to execute Javascript. The code is straightforward: grab the object, check the checkbox, and update the object. Some error handling will inform the user if the operation was successful or not.
{!REQUIRESCRIPT("/soap/ajax/36.0/connection.js")}
var myquery = "SELECT Id, Generate_Preview_Toggle__c FROM Special_Waste_Profile__c WHERE Id = '{! Special_Waste_Profile__c.Id}' limit 1";
result = sforce.connection.query(myquery);
records = result.getArray("records");
var mySWP = records[0];
var updateSWP = new Array();
mySWP.Generate_Preview_Toggle__c = true;
updateSWP.push(mySWP);
result = sforce.connection.update(updateSWP);
if(result[0].getBoolean("success")){
alert('Check your email, your preview is on its way!');
window.location = "/" + "{!Special_Waste_Profile__c.Id}";
}else{
alert('Contact support. Could not update: '+result);
}
The next step is to create a workflow rule that acts when my Generate Preview Toggle field is checked. The workflow takes care of the task I need to accomplish, and then returns the toggle checkbox to unchecked. This is important, because otherwise the workflow cannot be initiated a second time from the button.
Remember to activate your workflow!