Skip to main content

How to sequence Revenue Cloud (ARM/CPQ) configuration data deployments into stages

A practical approach for deploying a single Revenue Cloud bundle by splitting its configuration data into ordered stages, based on the dependency relationships between objects.

Written by Dario Messina

Gearset automatically sequences the data and metadata in a single deployment, so most teams never need to think about ordering. (For a refresher, see how Gearset sequences deployments automatically.)
However some teams choose to break a large bundle into smaller, staged deployments. This might be, for example, to keep change sets reviewable, to deploy a complex bundle in stages, or to fit an established release process.

When you split a bundle by hand, you take on the sequencing yourself, so the objects need to go across in dependency order. This guide gives you a repeatable, three-stage pattern for a single bundle, organized around the bundle's Product Classification.

When you need this: only when you deliberately split one bundle's configuration data across separate deployments. If you deploy a bundle in a single comparison, Gearset handles the ordering for you and you can skip this guide.

Before you start

Make sure the following are in place, so that your records map cleanly across orgs:

  • You've run the External ID wizard on your source and target orgs, so Gearset can track records as they move between environments.

  • Your External IDs are aligned. If a comparison returns unexpected results, align your IDs using the Gearset template before you continue.

  • You know the Product Classification name of the bundle you're deploying. Every filter below is built around it.

How the staged approach works

The pattern uses three saved comparison filters, deployed in order. Each stage builds on the one before it, so a record's parents and dependencies are always already in the target org by the time the record itself is deployed:

  1. Stage 1 - classification and attributes. The Product Classification, its attributes, and the related picklists, categories, and attribute-based adjustments.

  2. Stage 2 - products. The products built on that classification, along with their attribute definitions, selling model options, and component groups.

  3. Stage 3 - relationships, categorization, and pricing. The records that connect products together and to the catalog, plus price book entries.

Deploy stage 1 in full, then stage 2, then stage 3. Within each stage, Gearset still sequences the individual records for you and you're only controlling the order between stages.

A note on Product Classification name. All three filters key off the bundle's Product Classification name. Before you run each comparison, open the filter and update the SOQL, replacing <Classification name> with the name of the bundle you're deploying. Save the filter as a team filter so the whole team can reuse it.

Stage 1 - classification and attributes

This stage deploys the Product Classification together with its attributes and everything those attributes depend on. Use SOQL on the objects that relate directly to the classification, and follow the click paths for the objects that don't.

Object

Query or click path

Notes

ProductClassification

WHERE Name = '<Classification name>'

ProductClassificationAttr

WHERE ProductClassification.Name = '<Classification name>'

AttributeDefinition

ProductClassificationAttr → Depends on → AttributeDefinition

AttributePicklist

ProductClassificationAttr → Depends on → AttributeDefinition → Depends on → AttributePicklist

AttributePicklistValue

ProductClassificationAttr → Depends on → AttributeDefinition → Depends on → AttributePicklistValue

AttributeCategory

ProductClassificationAttr → Depends on → AttributeCategory

You can also find these by searching the bundle name on the AttributeCategory tab

AttributeCategoryAttribute

ProductClassificationAttr → Depends on → AttributeDefinition → Related → AttributeCategoryAttribute

These can't be isolated, so you may select some from another bundle. Those errors are safe to ignore

AttributeBasedAdjustment

WHERE Product.BasedOn.Name = '<Classification name>'

AttributeAdjustmentCondition

WHERE Product.BasedOn.Name = '<Classification name>'

AttributeBasedAdjRule

AttributeAdjustmentCondition → Depends on → AttributeBasedAdjRule

Indented objects are reached through Gearset's Depends on and Related expanders in the comparison results, rather than through their own query. Attributes are the most involved part of this stage, so expect to expand several levels below ProductClassificationAttr to gather every record.

Stage 2 - products

Once stage 1 is live in the target org, deploy the products built on the classification, along with their definitions and selling options.

Object

Query or click path

Notes

Product2

WHERE BasedOn.Name = '<Classification name>'

ProductAttributeDefinition

WHERE ProductClassificationAttribute.ProductClassification.Name = '<Classification name>'

ProductSellingModelOption

WHERE Product2.BasedOn.Name = '<Classification name>'

ProductComponentGroup

WHERE ParentProduct.BasedOn.Name = '<Classification name>'

Stage 3 - relationships, categorization, and pricing

With the classification and products in place, deploy the records that link products together, slot them into the catalog, and price them.

Object

Query or click path

Notes

ProductRelatedComponent

WHERE ParentProduct.BasedOn.Name = '<Classification name>' OR ChildProduct.BasedOn.Name = '<Classification name>'

ProductCategoryProduct

WHERE Product.BasedOn.Name = '<Classification name>'

ProductCategory

ProductCategoryProduct → Depends on → ProductCategory

ProductCatalog

ProductCategoryProduct → Depends on → ProductCategory → Depends on → ProductCatalog

PriceBookEntry

WHERE Product2.BasedOn.Name = '<Classification name>'

ProductConfigFlowAssignment

WHERE ProductClassification.Name = '<Classification name>'

Rarely needed — most bundles use existing records

ProductConfigurationFlow

ProductConfigFlowAssignment → Depends on → ProductConfigurationFlow

Rarely needed — most bundles use existing records

Most bundles reuse existing configuration flows, so ProductConfigFlowAssignment and ProductConfigurationFlow are rarely needed. Include them only if your bundle uses its own flow.

Tips for a smooth deployment

  • Build each filter once, then reuse it. Save the three filters as team filters and update only the classification name each time. That's what makes the process repeatable across bundles.

  • Some attribute records can't be isolated. When you gather AttributeCategoryAttribute records, you may pick up a few that belong to other bundles. Any resulting errors are safe to ignore.

  • Let Gearset check each stage. After you select components, Gearset assesses the deployment and suggests fixes for missing dependencies. Then review and apply these before deploying.

  • If a comparison looks wrong, check your IDs. Unexpected results usually mean your External IDs are out of sync.

Did this answer your question?