GlobalAdjustPriceRequest Method
24 min
for latest global methods, developers should also refer to the corresponding apex classes in salesforce for implementation details the apex class definitions provide the most accurate, up to date method signatures, parameters, and return types, ensuring that any integrations or custom logic are built against the latest release to view the class log in to salesforce go to setup (gear icon → setup ) in the quick find box, search for and select developer console in the developer console, open file → open , then choose the desired apex class to review the global methods overview the globaladjustpricerequest class provides a comprehensive api for adjusting prices on existing assets through change orders this class extends the base globalassetchangerequest and specializes in price modification scenarios including net price changes, discount applications, and true up pricing adjustments properties inherited from globalassetchangerequest assetnumber (string) the asset number identifying the subscription/product to adjust globaladjustpricerequest properties trueupprice (boolean) indicates if this is a true up price adjustment netsalesprice (decimal) the new net sales price to apply to the asset startdate (date) effective start date for the price adjustment enddate (date) end date for the price adjustment period term (decimal) term length for the adjustment (in months/years as configured) discount (discountchange) discount configuration object discountchange properties discountpercentage (decimal) discount percentage (use 30 for 30%, not 0 3) applytochildren (boolean) whether to cascade discount to child/add on products capabilities net sales price adjustments example 1 modify the net sales price of an existing asset subscription // adjust the net sales price of an asset globaladjustpricerequest pricerequest = new globaladjustpricerequest(); pricerequest assetnumber = 'sub 00003'; pricerequest netsalesprice = 150 00; pricerequest startdate = date today(); pricerequest enddate = date today() addmonths(12); pricerequest term = 12; pricerequest trueupprice = false; // process the price adjustment // note actual processing would be done through your change order service discount applications apply percentage based discounts with optional cascading to child products example 2 // apply a 25% discount to an asset globaladjustpricerequest discountrequest = new globaladjustpricerequest(); discountrequest assetnumber = 'sub 00004'; discountrequest startdate = date today(); discountrequest enddate = date today() addmonths(6); // configure discount globaladjustpricerequest discountchange discount = new globaladjustpricerequest discountchange(); discount discountpercentage = 25; // 25% discount discount applytochildren = true; // apply to add on products too discountrequest discount = discount; discountrequest trueupprice = false; true up pricing handle true up scenarios where price adjustments need to be applied retroactively example 3 true up price adjustment // handle a true up pricing scenario globaladjustpricerequest trueuprequest = new globaladjustpricerequest(); trueuprequest assetnumber = 'sub 00005'; trueuprequest netsalesprice = 200 00; trueuprequest startdate = date today() addmonths( 3); // retroactive trueuprequest enddate = date today(); trueuprequest trueupprice = true; // mark as true up trueuprequest term = 3; other use cases example 4 combined price and discount adjustment // adjust both net price and apply discount globaladjustpricerequest combinedrequest = new globaladjustpricerequest(); combinedrequest assetnumber = 'sub 00014'; combinedrequest netsalesprice = 180 00; combinedrequest startdate = date today(); combinedrequest enddate = date today() addyears(1); combinedrequest term = 12; // add discount configuration globaladjustpricerequest discountchange discount = new globaladjustpricerequest discountchange(); discount discountpercentage = 15; // 15% discount on the new price discount applytochildren = false; // only apply to main product combinedrequest discount = discount; combinedrequest trueupprice = false; example 5 bulk price adjustments // process multiple price adjustments list\<globaladjustpricerequest> priceadjustments = new list\<globaladjustpricerequest>(); // asset 1 price increase globaladjustpricerequest request1 = new globaladjustpricerequest(); request1 assetnumber = 'sub 00008'; request1 netsalesprice = 250 00; request1 startdate = date today() addmonths(1); request1 enddate = date today() addmonths(13); request1 term = 12; // asset 2 discount application globaladjustpricerequest request2 = new globaladjustpricerequest(); request2 assetnumber = 'sub 00009'; request2 startdate = date today(); request2 enddate = date today() addmonths(6); globaladjustpricerequest discountchange bulkdiscount = new globaladjustpricerequest discountchange(); bulkdiscount discountpercentage = 20; bulkdiscount applytochildren = true; request2 discount = bulkdiscount; priceadjustments add(request1); priceadjustments add(request2); // process all adjustments // implementation would depend on your change order processing service example 6 price adjustment for specific date range // adjust price for a specific promotional period (q4 discount) globaladjustpricerequest daterangerequest = new globaladjustpricerequest(); daterangerequest assetnumber = 'sub 00010'; daterangerequest netsalesprice = 120 00; // reduced price for promotion // set specific date range for the adjustment daterangerequest startdate = date newinstance(2024, 10, 1); // october 1st daterangerequest enddate = date newinstance(2024, 12, 31); // december 31st // calculate term in months for the date range integer monthsbetween = daterangerequest startdate monthsbetween(daterangerequest enddate); daterangerequest term = monthsbetween; daterangerequest trueupprice = false; // optional add additional discount for the promotional period globaladjustpricerequest discountchange promodiscount = new globaladjustpricerequest discountchange(); promodiscount discountpercentage = 10; // additional 10% off during promo promodiscount applytochildren = true; daterangerequest discount = promodiscount; example 7 term based adjustment with future start date // adjust pricing for a 24 month term starting 3 months from now globaladjustpricerequest termbasedrequest = new globaladjustpricerequest(); termbasedrequest assetnumber = 'sub 00023'; termbasedrequest netsalesprice = 300 00; // new price for extended term // set future start date (e g , when current contract expires) termbasedrequest startdate = date today() addmonths(3); // start in 3 months termbasedrequest term = 24; // 24 month term // calculate end date based on term termbasedrequest enddate = termbasedrequest startdate addmonths(integer valueof(termbasedrequest term)); termbasedrequest trueupprice = false; // example provide volume discount for longer term commitment globaladjustpricerequest discountchange volumediscount = new globaladjustpricerequest discountchange(); volumediscount discountpercentage = 5; // 5% discount for 24 month commitment volumediscount applytochildren = false; // apply only to main product termbasedrequest discount = volumediscount; integration patterns with change order processing // example integration with change order service public class priceadjustmentservice { public static void processpriceadjustment(globaladjustpricerequest request) { // validate the request validatepricerequest(request); // create change order options globalchangeorderoptions options = new globalchangeorderoptions( globalchangeorderproceedoption createdraftorder ); // process through change order system // your implementation would call the appropriate service // example changeorderservice processassetchange(request, options); } private static void validatepricerequest(globaladjustpricerequest request) { if (string isblank(request assetnumber)) { throw new illegalargumentexception('asset number is required'); } if (request startdate == null) { throw new illegalargumentexception('start date is required'); } if (request netsalesprice != null && request netsalesprice < 0) { throw new illegalargumentexception('net sales price cannot be negative'); } if (request discount != null && (request discount discountpercentage < 0 || request discount discountpercentage > 100)) { throw new illegalargumentexception('discount percentage must be between 0 and 100'); } } } best practices 1\ date validation always validate that startdate is not null ensure enddate is after startdate when both are provided consider business rules for retroactive adjustments when using trueupprice = true 2\ price validation validate that netsalesprice is positive when provided consider minimum price thresholds based on business rules validate discount percentages are between 0 and 100 3\ asset number validation ensure the asset number exists and is active verify user permissions to modify the specific asset check that the asset is in a state that allows price adjustments 4\ discount cascading use applytochildren = true carefully, as it affects all child products consider the impact on bundle pricing when cascading discounts document business rules for when child discounts should be applied 5\ true up scenarios use trueupprice = true only for legitimate retroactive adjustments ensure proper approval workflows for true up pricing consider revenue recognition implications error handling public class priceadjustmentexception extends exception {} public static void handlepriceadjustment(globaladjustpricerequest request) { try { // validation if (request == null) { throw new priceadjustmentexception('price adjustment request cannot be null'); } // process the adjustment processpriceadjustment(request); } catch (exception e) { // log the error system debug(logginglevel error, 'price adjustment failed ' + e getmessage()); // re throw with context throw new priceadjustmentexception('failed to process price adjustment for asset ' + request? assetnumber + ' ' + e getmessage()); } } limitations and considerations asset state price adjustments may only be possible on assets in certain states approval requirements significant price changes may require approval workflows revenue recognition consider accounting implications of retroactive price changes integration dependencies requires proper integration with change order processing system permissions users must have appropriate permissions to modify asset pricing business rules implementation should enforce organization specific pricing rules related classes globalassetchangerequest base class for all asset change requests globalassetchangetype enum defining available change types (includes adjustprice ) globalchangeorderoptions configuration options for change order processing globalchangeorderproceedoption options for how to proceed with change orders