Sales and service on Salesforce

Quote discount approval on Salesforce

Routes every quote whose discount passes the band to the sales manager and then pricing, and returns the approved status and discount to the quote.

SCREENSDATA HANDLERSSALESFORCE · READ IN PLACES01 Quotes to approveS02 Quote reviewS03 DecisionS04 Seller viewS05 Discount boarddh_quotationQuotationQuote · QuoteLineItem (or SBQQ__Quote__cwith CPQ)dh_customer_masterCustomer masterAccountdh_price_conditionPrice conditionPricebookEntry · Product2dh_sales_order_lineSales order lineOrder · OrderItemWRITE BACK TO SALESFORCEQuotation → PATCH sobjects/Quote (Status, approval fields)rows stay in Salesforce · access rules applied at read time · each write acknowledged and logged
The screens of the app, the data handler behind each, and the Salesforce object it reads in place. Writes below the line go through released interfaces with an acknowledgement.
4
objects read in place from Salesforce
catalogue
5
screens on those rows
catalogue
3 days
to production-grade
estimate
1
objects written back
catalogue
0
rows copied to build it
product
What the app reads

The Salesforce objects behind each handler

Objects are read in place through the REST and Bulk APIs, and changes arrive through Change Data Capture events, so a screen shows a record seconds after a seller edits it. The rows stay in Salesforce.

ObjectRead fromFields the app usesFreshness
QuotationQuote · QuoteLineItem (or SBQQ__Quote__c with CPQ)Quote.TotalPrice (value) · QuoteLineItem.Discount (discount) · Quote.QuoteNumber (number) · Quote.AccountId (customer)live through the API
Customer masterAccountAccount.Id / AccountNumber (id) · Account.Name (name) · Account.BillingCountry (country) · Account.OwnerId (territory) (sales org)live through the API
Price conditionPricebookEntry · Product2Product2.ProductCode (material) · Pricebook2.Name (customer) · PricebookEntry.UnitPrice (amount) · CurrencyIsoCode (unit)live through the API
Sales order lineOrder · OrderItemOrder.OrderNumber (number) · OrderItem.Id (line) · Order.AccountId (customer) · OrderItem.Product2Id (material)live through the API
The trigger

The start criterion in Salesforce's own fields

In plain words: A quote saved with a line discount above 15 percent, or a quote value above 250,000.

The criterion runs in Salesforce through the data handler, so only the matching rows return. The editor shows the rows it selects, and their count, as it is written.

# start criterion in Salesforce fields
QuoteLineItem.Discount > 15 or Quote.TotalPrice > 250000

# the same criterion in canonical fields
{quote.discount} > 15 or {quote.value} > 250000
What the app writes back

Through released interfaces

Writes go through the REST API (update and composite calls) under the integration user's profile and sharing rules. Each call returns the record ID or an error message, and the app records both beside the decision.

ObjectWhat changesInterface
Quotationapproval status, approved discount per line and approver note written to the quote; a returned quote goes back to draft with the notePATCH sobjects/Quote (Status, approval fields)
Acknowledged and logged

Each write stores the identifier Salesforce returns beside the decision, the person and the time, so the log answers who changed what, and the reconciliation shows it arrived.

Access and prerequisites

What is in place before the first build

Profiles, roles and sharing rules are mapped to Lima access policies once. A seller who sees their own opportunities in Salesforce sees the same rows in the app.

  • A connected app and integration user with API access and object permissions for the objects the app uses
  • Change Data Capture enabled on the objects that should refresh within seconds
  • Field-level security reviewed for the fields the app writes
  • Sharing model agreed with the sales operations owner
Register the handlers4 objects from the catalog; each shows its rows at once.
Nearby

This app on other systems, and other apps on Salesforce

Quote discount approval on

Other apps on Salesforce

Terms on this page

Discount bandThe range of discounts a role may approve, set per customer segment.
Margin floorThe lowest margin per line the company accepts on a quote; lines below it are shown in red.
Read in placeThe rows stay in Salesforce; the handler sends the filter and the columns and Salesforce returns the matching rows.
Questions

Does this app copy data out of Salesforce?

The screens read through handlers that leave the rows in Salesforce. History the app needs at scale is landed in the lake by the Backbone, which is the exception by design.

What does Salesforce need to allow?

The prerequisites above: an integration identity with read rights on the objects listed and write rights on the interfaces named, connectivity, and the scopes agreed with the process owner.

Can I run it on another system as well?

Yes. The screens, criteria and roles stay; the handlers are re-bound to the other system's objects, and the app's other system pages show them.

See this app on your data

Bring the process and the systems it touches. In the first session we register the data handlers, draw the levels or the lanes and run the first screen on your live rows.