使い方
- インストールコマンドをコピーし、自分の環境へ導入する前にソースを確認します。
- 必要なツール、認証情報、対応環境を原文で確認します。
- 入力と成果物を指定し、出力を資料と照合します。
npx skills add https://github.com/arohitu/salesforce-revenue-cloud-skills --skill revenue-cloud-pcm開始前の確認
- 導入にはモデル契約、API枠、ファイルへのアクセス許可は含まれません。
- スター数や導入数は活動の指標であり、独立した品質・安全性試験ではありません。
見出し、例、コード、表、リンク、参照画像を含む原文を表示しています。
Salesforce Product Catalog Management (PCM)
You are helping with Salesforce Product Catalog Management in Salesforce Revenue Cloud / Agentforce Revenue Management / Revenue Cloud Advanced / Revenue Cloud Billing. This is the newer core-platform product family that uses standard/core Salesforce objects such as Product2, Quote, QuoteLineItem, ProductClassification, and related PCM objects. Do not drift into legacy managed-package Salesforce CPQ (SBQQ__) or legacy Salesforce Billing (BLNG__) patterns unless the user explicitly asks for those products.
PCM models the company's product portfolio — catalogs, categories, products, bundles, dynamic attributes, classifications, qualification rules, selling models, and the Product Discovery experience.
This file is your routing layer. It contains the gotchas you must always remember and a map of when to load which reference. Do not try to answer detailed PCM questions from this file alone — load the right reference first.
Always-true gotchas (never forget these)
These are the corrections most agents need before they can be useful in PCM. Internalize them:
- Bundles use a TWO-table structure, not one. A configurable bundle has both
ProductRelatedComponent(the line linking a child to a parent) andProductComponentGroup(the section the line belongs to). Static bundles can skip groups; configurable bundles cannot. Don't model a bundle without thinking through both. - Attributes can be attached at TWO levels.
ProductClassificationAttrdefines the template attribute on a classification.ProductAttributeDefinitionis the instance attached to a specificProduct2. A product based on a classification inherits its attributes; you only create aProductAttributeDefinitionwhen overriding an inherited attribute on a specific product or adding a one-off attribute. Confusing these two is the most common PCM modeling error. - Qualification rules default to `qualified`. A product or category with NO qualification/disqualification record is visible. Qualification beats disqualification when both apply. Don't write a rule "to make it visible" — write a rule to restrict visibility.
- `ProductSellingModel` is its own object, not a Product2 picklist. Pricing term length and unit live on
ProductSellingModel. A product is linked to one or more selling models viaProductSellingModelOption. Pricing (rates, books) lives in a separate Salesforce Pricing module — do NOT try to put price on Product2 directly for PCM-driven flows. - `Product2.Type = 'Bundle'` is the switch that turns a product into a bundle. Without it,
ProductRelatedComponentrows pointing to it will not be treated as bundle components by the runtime. Also setConfigureDuringSalecorrectly:Allowed(configurable),Not Allowed(static), orNone(simple product). - `Product2.BasedOnId` (the classification link) is what makes a product inherit attributes. Setting
BasedOnIdis mandatory before you can rely on classification-driven attributes; without it, you have to attach every attribute viaProductAttributeDefinitiondirectly. - Catalogs and categories are time-bounded.
EffectiveStartDate/EffectiveEndDateonCatalog, andEffectiveFromDate/EffectiveToDateon qualification/disqualification rules. A "missing" product in Product Discovery is most often an expired effective-window, not a permission or rule problem. - API version matters. Most PCM objects appear in API v60.0+. Some (
ProductRampSegment,IsNavigational,ProductComponentGroup.ParentGroupId,Product2.UsageModelType) are v62.0+.AttrPicklistExcludedValueis v61.0+. Check the API version of the org before assuming an object exists. - PCM is not standalone. It hands records off to Salesforce Pricing, Product Configurator, Transaction Management, and Billing. A "wrong" PCM model often shows up as a downstream pricing or configurator error. When debugging, identify which module is actually emitting the error before changing PCM.
- Permission set groups, not profiles. PCM ships permission sets:
ProductCatalogManagementDesigner,ProductCatalogManagementViewer, plus community variants. Compose them via permission set groups; do not clone profiles. - Describe the org before data migration or bulk lookup work. Object and field API names vary by org/version: catalogs may expose as
ProductCatalograther thanCatalog, andAttributePicklistValuemay usePicklistIdrather thanAttributePicklistId. - This is not legacy managed-package CPQ/Billing. Revenue Cloud / Agentforce Revenue Management uses core objects and unnamespaced APIs for PCM. Avoid
SBQQ__CPQ andBLNG__Billing assumptions, fields, and object names unless the user explicitly says they are working on those legacy managed packages.
When to load which reference
Read only the reference(s) relevant to the current task. Each reference is self-contained.
| User intent | Load |
|---|---|
| "What is PCM?", architecture, how modules connect | references/01-architecture.md |
| Editions, license, permission sets, personas, setup | references/02-setup-and-permissions.md |
| Catalogs, categories, navigation, hierarchy, default catalog | references/03-catalogs-and-categories.md |
| Attribute definitions, picklists, attribute categories, validation | references/04-attributes.md |
| Product classifications, attribute templates, inheritance | references/05-product-classifications.md |
| Product creation, simple vs bundle, components, cardinality, overrides | references/06-products-and-bundles.md |
| Product variants (size/color/storage), variation parents | references/07-product-variants.md |
| Qualification / disqualification rules, decision tables, eligibility | references/08-qualification-rules.md |
| Selling models (one-time, term-defined, evergreen), proration, ramp | references/09-selling-models.md |
| Product Discovery, Browse Catalogs, Guided Selection, search | references/10-product-discovery.md |
| Hard limits — sizing, max attrs, max bundle depth, etc. | references/11-limits.md |
| Field-level lookup for ANY PCM object (Product2, AttributeDefinition, etc.) | references/12-object-reference.md |
| Catalog/bundle migration, CSV export, load order, target-org import | references/13-data-migration.md |
When the user's question spans multiple areas (e.g., "build a configurable phone bundle with color and storage attributes"), load multiple references — but only the ones you need.
Standard workflows
These are the workflows that appear over and over. Follow the named steps; the detailed "how" is in the referenced file.
Workflow A — Stand up a new product catalog from scratch
- Confirm editions and permission sets — load
02-setup-and-permissions.md. - Create the
Catalogrecord withEffectiveStartDate, optionalEffectiveEndDate, andCatalogType— load03-catalogs-and-categories.md. - Build the category hierarchy under the catalog (max 5 levels deep, excluding root). Set
IsNavigationalfor browse paths. - Create
AttributeDefinitionrecords for the attributes the products share. Group them withAttributeCategoryif reusable — load04-attributes.md. - Create
ProductClassificationtemplates and link attributes viaProductClassificationAttr— load05-product-classifications.md. - Create
Product2records, setBasedOnIdto the classification — load06-products-and-bundles.md. - Link products to categories via
ProductCategoryProduct. - Add
ProductSellingModelOptionrows tying each product to one or moreProductSellingModels — load09-selling-models.md. - Add qualification rules only if you need to restrict visibility — load
08-qualification-rules.md. - Validate via Product Discovery — load
10-product-discovery.md.
Workflow B — Build a configurable bundle
- Create the parent
Product2withType = 'Bundle'andConfigureDuringSale = 'Allowed'. - Create
ProductComponentGrouprows for each section of the bundle (e.g., "Choose phone", "Choose plan"). - For each child product, create
ProductRelatedComponent, settingParentProductId,ChildProductId, andProductComponentGroupId. SetMinQuantity,MaxQuantity,Quantity,IsComponentRequired,IsDefaultComponent,IsQuantityEditable,QuoteVisibility. - If the bundle needs cardinality overrides for a particular root context, create
ProductComponentGrpOverride(group cardinality) and/orProductRelComponentOverride(component cardinality), tying both to a rootOverrideContextId. - Cap: ≤200 components per bundle hierarchy, ≤600 attribute overrides, ≤10 component or group overrides per bundle. See
references/11-limits.md. - Run Validate Product Definition in the UI before treating the bundle as ready.
Detail in references/06-products-and-bundles.md.
Workflow C — Add dynamic attributes to a product family
- Decide: are the attributes shared across many products? If yes, attach via
ProductClassification(template). If unique to one product, attach directly toProduct2. - Create
AttributeDefinitionrows for each attribute (setDataType). - For picklist-typed attributes, create
AttributePicklistandAttributePicklistValuerows. - Group attributes via
AttributeCategory+AttributeCategoryAttributeif reusable. - Attach to template:
ProductClassificationAttrrows. - To exclude specific picklist values for a classification or product, create
AttrPicklistExcludedValuerows. - To override an attribute on a specific product, create
ProductAttributeDefinitionand setOverriddenProductAttributeDefinitionId.
Detail in references/04-attributes.md and references/05-product-classifications.md.
Workflow D — Diagnose "product is missing from Browse Catalogs"
Check in this order — most common cause first:
Product2.IsActive = true?Product2.AvailabilityDatereached andDiscontinuedDate/EndOfLifeDatenot yet passed?ProductCategoryProductrow exists for the catalog category being browsed?Catalog.EffectiveStartDatereached,EffectiveEndDatenot passed?ProductDisqualificationorProductCategoryDisqualrecord evaluating toIsDisqualified = truefor current context?- Qualification procedure (if configured) returning false for this user?
- Product Discovery search index up to date? (After bulk loads, a reindex is required.)
- User has the right permission set (Viewer at minimum)?
Detail in references/08-qualification-rules.md and references/10-product-discovery.md.
Workflow E — Migrate catalog or bundle product data
- Confirm the input mode: a catalog name/id/code, or one or more bundle
Product2ids/codes whereProduct2.Type = 'Bundle'. - Describe the source org schema before querying, especially
ProductCatalog/Catalogand attribute picklist fields. - Expand the product graph through
ProductRelatedComponent, collectingChildProductIdproducts andChildProductClassificationIdclassifications. Recurse into child products that are bundles. - Include reusable attribute foundation objects (
AttributeDefinition,AttributePicklist,AttributePicklistValue,AttributeCategory,AttributeCategoryAttribute) plus scoped classification/product attribute records. - Generate CSVs with source ids and helper business keys for lookup/remapping.
- Load a target org in analyzed dependency order with checkpointed id mapping. The load package must be usable without source org access after export.
Detail in references/13-data-migration.md.
Available scripts
This skill bundles helper scripts under scripts/ for inspecting a Salesforce org's PCM data via the Salesforce CLI (sf). They require sf authenticated to a target org. Reference them only when the user wants to inspect or load real org data.
- `scripts/describe-pcm-objects.sh` — Runs
sf sobject describefor every PCM object and writes the full schemas topcm-describe/. Useful for confirming which fields exist in a specific org/API version before writing queries. - `scripts/query-product-tree.sh` — Given a
Product2.Idof a bundle, recursively prints the bundle hierarchy with components, groups, and attributes. Use to validate a bundle was modeled correctly. - `scripts/list-catalogs.sh` — Lists every active catalog with categories and product counts. Quick health check after a deploy.
- `scripts/check-orphans.sh` — Finds common modeling defects: products with
Type = 'Bundle'but no components; classifications with no products; qualification rules with expired effective dates.
Each script prints --help with usage. They are read-only by default.
For fragile migration/export/import work, prefer a dedicated script over ad hoc SOQL. If adding migration scripts, use relative paths and explicit interfaces such as:
- `scripts/export-pcm-migration.py` — Export by
--target-org,--catalog-name/--catalog-idor--bundle-product-id/--bundle-product-code, and--out-dir. It should write CSVs, a manifest, analyzed load order, and coverage notes. - `scripts/load-pcm-migration.py` — Load a generated package into a target org with
--target-org, interactive pauses, checkpointed id mapping, and local error reports. It must not require source org access.
Things this skill explicitly does NOT cover
These are adjacent modules. If the user crosses into them, say so and stop:
- Pricing math, price books, rate cards → Salesforce Pricing module (separate).
- Quote/order line creation, runtime configurator UI behavior → Product Configurator + Transaction Management.
- Billing operations outside PCM master data (invoicing, billing schedules, revenue recognition) → Revenue Cloud Billing/Billing module.
- Approval flows on quotes → Advanced Approvals.
- Asset and subscription lifecycle after order fulfillment → Dynamic Revenue Orchestrator.
PCM ends where the product is defined and discoverable. Anything past that belongs to a sibling module in the Revenue Cloud core product family. Do not switch to legacy SBQQ__ or BLNG__ managed-package behavior unless the user explicitly requests it.



