Remote Calls with JavaScript Plugin
This article presents a sample code for using JavaScript remoting with the Product Selector JavaScript plugin.
The Visualforce page and the controller define a remote action, GetInfo
, which is a server-side method that can be called from JavaScript. And the JavaScript plugin calls that and updates the charge in the callback.
MyCpqSelectProductController Controller
public with sharing class MyCpqProductSelectorController { public zqu.SelectProductComponentOptions theOptions { get; set; } public MyCpqProductSelectorController(ApexPages.StandardController controller){ theOptions = new zqu.SelectProductComponentOptions(); theOptions.mode = zqu.SelectProductComponentOptions.MODE_EDIT; theOptions.quoteId = controller.getId(); } @RemoteAction public static Map<String, Object> getInfo() { return new Map<String, Object> { 'newPrice' => 99.99 }; } }
MyCpqSelectProduct Page
<apex:page sidebar="false" tabStyle="zqu__Quote__c" standardController="zqu__Quote__c" extensions="MyCpqProductSelectorController"> <script> var asyncGetPrice = function(callback) { Visualforce.remoting.Manager.invokeAction( '{!$RemoteAction.MyCpqProductSelectorController.getInfo}', function(result, event) { callback(result); } ); }; </script> <apex:form > <zqu:CpqSelectProduct options="{!theOptions}"/> </apex:form> </apex:page>
ProductSelectorPlugin JavaScript Plugin
var ProductSelectorPlugin = { postRecalculateZCharge : function(previousZCharge, currentZCharge, chargeGroup, quote, allChargeGroups) { console.log('Request info for:'); console.log(currentZCharge['NAME']); asyncGetPrice(function(result) { console.log('Received info:'); console.log(result); currentZCharge['EFFECTIVE_PRICE'] = result.newPrice.toString(); zquGlobalPlugin.updateZCharge(currentZCharge); }); } };