Architecture Overview
Architecture Diagram
- CPQ is an application which is composed of software components, hosted and managed by PROS.
- CPQ implementations are accessible through the public domain proscloud. A CPQ server can be exclusively dedicated to one customer or shared by multiple customers. Moreover, one or more public URLs are allocated to access the customer’s environments (test, production...).
- The transport layer between the user’s thin client (browser) and CPQ web application server is ensured by HTTPS protocol.
- The data exchange between Salesforce.com and CPQ web applications servers is performed through Web Services (SOAP / HTTPS). Single sign-on process leveraging the use of session ID ensures WS client authentication and avoid storage of Salesforce credentials outside Salesforce.
- A CPQ integration bundle is deployed and hosted on the Salesforce.com platform. It implements several techniques specific to the Force.com platform (Custom buttons, VisualForce pages, APEX classes)
Process Flow
- From the detail page of a PROS Quote, the user can edit the active Quote general information using the Overview tab of the UI panel, or get access to the quote content, which is hosted outside Salesforce.com platform. When clicking on the “Content” tab, a call is made to a custom APEX class that will initialize the external context of the quote
- The APEX class first instantiates the CPQ session parameters with Salesforce contextual data (that may be parameterized by the PROS Mapping Set object and extended via a Custom Apex Class), and then makes a call to a CPQ Web Service. The CPQ Web Service validates the session parameters, loads the quote data and complete initialization tasks. If initialization is
successful, an URL is returned.
- Within the “Content” panel tab of the PROS Quote, the user is redirected to the URL returned by CPQ, which will display the quote content UI.
- Configurator and report generator modules are invoked from within the Quote spreadsheet
- Upon triggering “Back to Overview” (CloseSpreadsheet) action at UI, CPQ makes a call to a SalesForce custom Web Service to attach the quote content data to the PROS Quote custom object (This data is an XML entity attached in the Quote content object). The document generated by CPQ with the report generator module is attached to the PROS Quote by invoking Salesforce standard APIs through a Web Service call.
- When quote content data is attached to the PROS Quote Content custom object, a trigger is fired to synchronize quote general information and freshly updated content.
Managed Package Components Custom Use - Best Practices
PURPOSE
PROS Smart CPQ managed package components are locked down by design by Salesforce.com and cannot be therefore modified or altered in the subscriber organizations on which they are deployed.
Regarding re-using managed package components or invoking functions of the package from within local implementations, the ability is either controlled by the owner of the package (we, PROS) as for Apex classes, or is out of control as for VisualForce pages, which can be invoked without restriction from outside a managed package.
The purpose of this page is to specify for each type of component, which component or which part of a component could be referenced or invoked from outside of the PROS Smart CPQ managed package.These guidelines will help implementation teams, customers or integrators to choose whether to reuse a package component for their needs, or to develop the functionality on their own.
DEFAULT RULE
Unless listed above, none of the components of the PROS Smart CPQ managed package can be re-used, referenced or invoked from outside the package, whether it is through declarative setup ( in Salesforce flows, console.. ) or programmatic means.
It is specifically true for VisualForce pages, VisualForce components, Lightning components which access URL can be referenced in external code to embed part of CPQ UI within a custom component. The VisualForce pages of the managed package are dedicated to operate within a specific context, specific devices and won't fit to any situation.
For components that can be re-used or referenced by external code, such as Apex classes methods, the definition or the way to invoke the component can be modified without prior notice.
| COMPONENT TYPE | |
|---|---|
| Apex Class | Any method, any complex type declared as global and visible within subscriber's organization can be invoked by local implementations classes.Those methods are usually provided to ease custom integration of PROS Smart CPQ product within Salesforce. |
| Static Resources | Images can be referenced without any restriction.CSS (cascading style sheets) or Javascript libraries embedded into static resources can be reused with caution as they are subject to change without notice. Better to have a local copy of these components. |
| Custom Labels | Custom labels can be referenced but could be modified from one to next version of the package. Best is to use the translation workbench to make a local "copy" if you don't want the label to evolve between releases of the package. |
| Layouts / Buttons/ Actions Links | It is better to clone a managed package layout to customize it rather than modifying an existing one. Some buttons are dedicated to the Classic UI, some others to the Lightning UI. Actions usually restrict the size of UI content produced by a VisualForce component. Ensure to embed the right buttons / actions in your custom layouts. |
| Custom objects / Custom fields |
CUSTOM OBJECTS & CUSTOM FIELDS
You can add any custom field you wish to managed package objects and reference/use any of the existing fields.
Regarding Access Rights on package objects, you need to follow the guidelines of the "Force.com package deployment & customization guide".
A specific attention is required for the following fields, which must have read/write access to ensure proper functioning :
| OBJECT | |
|---|---|
| Quote c | ActiveRelease c ParentQuoteId c Status c ContractType c (CLM) |
| QuoteRelease c | ReleaseNumber c QuoteId c Status c Any custom field created on Quote c object must also be created on QuoteRelease c object to ensure expected behavior of 'Create New Release' and 'Set As Active Release' functions |
| QuoteContent c+standard object Attachment | |
| Contract c | ContractType c QuoteId c ParentContractId c Status c AccountId c |
| ContractLineItem c | ContractId c ContractLineType c ContractSyncID c |
