CPQ fields, system fields, and partner fields

  • Release version: Australia
  • Updated March 12, 2026
  • 3 minutes to read
  • Summarize
    Summarized using AI
    This content was generated using new OpenAI-powered functionality. Results are provided on an as is basis and are not guaranteed to be accurate or complete.

    Summary of CPQ Fields, System Fields, and Partner Fields

    This document discusses the three types of fields in the Configure Price Quote (CPQ) environment: CPQ fields, system fields, and partner fields. Understanding these fields is crucial for effective data management and integration with Salesforce and partner systems.

    Show full answer Show less

    Key Features

    • CPQ Fields: User-defined fields that can be customized with various types, including text and picklists. Default values can be set manually or through determination actions.
    • System Fields: Predefined fields that draw values from the Salesforce product cache or the current date/time. They cannot have default values assigned and can be added directly to layouts.
    • Partner Fields: These fields require a POST call to initialize via API and depend on partner data sets. They cannot be added to layouts directly but can be populated using CPQ fields.

    Key Outcomes

    By leveraging these field types, ServiceNow customers can enhance data integration, streamline configurations, and improve overall efficiency in managing product information. Proper initialization and checks for null values are essential for avoiding errors, especially with partner fields. Customers can also choose to display system and partner field information to users or utilize them for backend pricing rules.

    Learn about the three types of fields in CPQCPQ, system fields, and partner fields. Understand how each type stores, retrieves, and displays data in configurations, and how they interact with Salesforce and partner systems for seamless data integration.

    There are three categories of fields in the CPQ environment: CPQ fields, system fields, and partner fields.

    CPQ fields

    A CPQ field is a user-defined field that is custom to the CPQ environment. Its type can be number, text, picklist, set, or product picker. When users create fields in CPQ, they can manually assign default values in the field definition, or they can set values through determination actions.

    The following example shows how a user would set a CPQ field in an On Configure/Reconfigure enrichment:

    cfgRequest.testField.set("value", "Hello World"); 

    For a more complete description of CPQ fields, see Configure fields.

    Note:
    In organizations that do not use Salesforce for their launch-point into CPQ, all fields must be initialized in their API call.

    System fields

    System fields

    System fields are predefined. System fields cannot be assigned a default value because they leverage the SFDC product cache (or the current date and time) to generate their values.

    The following example shows how a user would call a system field in an On Configure/Reconfigure enrichment:

    let pC = {"input2":cfgRequest.sys.productCode.value};

    System fields can be added directly to any layout. There are no issues with displaying them regardless of whether they contain predefined data.

    In the layout editor:

    Layout editor

    In the Configurator UI:

    Layout editor screen

    Unit of Measure is blank because in this example, it has not been defined in SFDC.

    The mapping of each of these system fields to their respective SFDC object is as follows. The field API name is in parentheses.

    • sys.productUOM > Product: Quantity Unit Of Measure (QuantityUnitOfMeasure)
    • sys.productName > Product: Product Name (Name)
    • sys.productFamily > Product: Product Family (Family)
    • sys.productDescription > Product: Product Description (Description)
    • sys.productCode > Product: Product Code (ProductCode)
    • sys.enableValidation: value defaults to true
    • sys.currentDate: Simple time API call, returns date of UTC
    • sys.actionContext > Quote Line: Action Context (LGK ActionContext c)
    • sys.productPrice > Price Book Entry: List Price (UnitPrice)
    • sys.productId: value depends on Admin Settings

      sys.productId changes to whatever is defined in your CPQ environment settings. For instance, if the Product Id field was set to Product Code, the resulting data would be Product Code, making it identical to the sys.productCode field.

    Product code

    If the Product Id field was instead set to Partner Id, the data would be pulled from the SFDC field Product2 Id (ID as the field API name):

    System fields screen

    Partner fields

    Partner fields

    Partner fields are fields that use a POST call to initialize a configuration via API. Partner fields leverage the partnerʼs data set to generate field values.

    The mapping of each of these partner fields to their respective SFDC object is as follows. The field API name is in parentheses.

    • partner.quote.id Quote > Record ID (Id)
    • partner.quote.lineId Quote Line > Record ID (Id)
    • partner.quote.pricebookId Quote > Pricebook ID (SBQQPricebookIdc)
    • partner.quote.currencyIsoCode Quote > CurrencyIsoCode

      partner.quote.currencyIsoCode defaults to USD if your organization does not have multi-currency enabled in their Salesforce Org. To enable multi-currency, follow the steps in this Salesforce article: Enable Multiple Currencies.

    When using these fields, it’s important to note that some of the data may not have any value (null) when the product is first configured. To make sure that there are no initialization errors, include null checks in any rules or scripts that utilize partner fields.

    These fields cannot be directly added to a layout like system fields can. Instead, you can use CPQ fields to populate the data in partner fields via an initialization enrichment.

    The following example initialization enrichment populates the values of the partner fields into the configurator:

    let quoteId = cfgRequest.partner.quote.id.value;
    let lineID = cfgRequest.partner.quote.lineId.value;
    let currencyISO = cfgRequest.partner.quote.currencyIsoCode.value;
    let priceBookID = cfgRequest.partner.quote.pricebookId.value;
    
    if (quoteId != null) {
    	cfgRequest.quoteIDTest.set("value", quoteId);
    }
    if (lineID != null) {
    	cfgRequest.lineIDTest.set("value", lineID);
    }
    if (currencyISO != null) {
    	cfgRequest.currencyISOCodeTest.set("value", currencyISO);
    }
    if (priceBookID != null) {
    	cfgRequest.pricebookIDTest.set("value", priceBookID);
    }
    return cfgRequest;

    Initial configuration:

    Initial configuration screen.

    Reconfiguration:

    Partner fields

    Line ID is now populated.

    How you use partner and system fields is up to you. Some organizations find it helpful to display this information in the configurator to the end user, while others use it in the background in rules to drive pricing conditions.