---
sourceDocument: Australia Sales and Order Management
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/de-DE/order-management

 Release :

    - australia

ft:locale :

    - de-DE

ft:publication_title :

    - Australia Sales and Order Management

ft:clusterId :

    - omgmt

bundleId :

    - omgmt

workflow :

    - Customer and Industry


---

# CPQ scripting language reference

# CPQ scripting language reference {#ariaid-title1}

* Freigeben Version: Australia
* 
* Aktualisiert 12. März 2026
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 3 Minuten Lesedauer

View the operators, objects, and keywords that CPQ supports, together with information about type conversion, type checking, alternative scripts for unsupported operations, and accessing object properties.
CPQ uses a JavaScript-like language to dynamically change the value of fields and BOM data via rules and enrichments. JavaScript is a complex language built over almost thirty years, and while we are unable to
replicate every piece of functionality that a developer would normally expect while coding, CPQ scripting remains a powerful tool to assist in the dynamic configuration of products.

The capabilities of CPQ scripting are always expanding. Check back to see the most up-to-date features.

## Supported operators {#cpq-logik-io-scripting-language-reference__suported_operators}

Arithmetic operators:

+
:   Addition

-
:   Subtraction

\*
:   Multiplication

/
:   Division

%
:   Modulus

++
:   Increment

--
:   Decrement

String operators:

+
:   Concatenation

+=
:   Addition assignment

Assignment operators:

=
:   Assignment

+=
:   Addition assignment

-=
:   Subtraction assignment

Comparison operators:

==
:   Equal to

===
:   Equal value and equal type

!=
:   Not equal to

!==
:   Not equal value nor equal type

\>
:   Greater than

\<
:   Less than

\>=
:   Greater than or equal to

\<=
:   Less than or equal to

Logical operators:

\&\&
:   And

\|\|
:   Or

## Supported objects {#cpq-logik-io-scripting-language-reference__supported_objects}

Each object supported can be declared with the following:

\[ \]
:   Array

" "
:   String

( )
:   Number

true \| false
:   Boolean

{ }, new Map( )
:   Map

new Date( )
:   Date

`undefined`, `NaN`, and `null` are unsupported.  
Hinweis:  
Date objects cannot be returned, but they can be referenced and manipulated with the Date APIs in the Help menu.

## Supported keywords {#cpq-logik-io-scripting-language-reference__supported_keywords}

* `var`
* `let`
* `const`
* `new`
* `if`
* `else if`
* `else`
* `for`
* `for/of`
* `return`

{#cpq-logik-io-scripting-language-reference__ul_j4r_z42_dhc}

We do not support `while` or unconditional `for` loops with `break`, because of the risk of infinite loops halting performance.

We do not support functions, as the script itself should be small enough to be considered one function. If your script is long with many conditions and variables, consider creating a managed table and using a table query. For more
information about using managed tables and table queries, see [Matrix Loader: CSV table upload](https://servicenow-prod.fluidtopics.net/jYQvGg5Ebhb4WHuWZvX6bA "Use the Matrix Loader to import and manage table data in CPQ. Define table schemas, prepare matching CSV files, and upload them to populate or update tables for use in rules, lookups, and configurations, with no redeployment required for data updates.") and [Minimizing table queries](https://servicenow-prod.fluidtopics.net/H10K_nqsdx~GKDhaEAOO_A "Learn how to minimize queries to maximize performance.").

## Alternative scripts for unsupported operations {#cpq-logik-io-scripting-language-reference__alternative_scripts_for_unsupported_operations}

Assignment multiplication and division (/= or \*=): `number = number * otherNumber;`, `number = number / otherNumber;`

Exponentiation (x\*\*y): `Math.pow(x, y);`

## Type conversion {#cpq-logik-io-scripting-language-reference__type_conversion}

Convert arrays to strings: `Array.toString()`

Convert numbers to strings: `[number] + ""`

Convert numeric strings to numbers: `[string] - 0`  
Hinweis:  
Strings cannot be treated as arrays, but `.length` does work for strings.

## Type checking {#cpq-logik-io-scripting-language-reference__type_checking}

The following returns a Boolean value indicating whether an input is a number: `LGK.isNumber(123)`

## Accessing object properties {#cpq-logik-io-scripting-language-reference__accessing_object_properties}

You can access the properties of map objects such as `cfgRequest` in two ways.

    objectName.propertyName
    //or
    objectName["propertyName"]

This is helpful in order to replace large amounts of repetitive code with results from a Table Lookup, since the "propertyName" text could instead be replaced by a variable.

For example,
consider a blueprint with the following fields associated with it, and a managed table named shipstatebooleantest.

* shipState
* boolean1
* boolean2
* boolean3
* quantity1
* quantity2
* quantity3

{#cpq-logik-io-scripting-language-reference__ul_i5d_fq2_dhc}

|-|-|-|-|-|
| id | shipState | trueBoolean | quantityTest | rowQuantity |
| 1 | Arizona | boolean1 | quantity1 | 1 |
| 2 | Maine | boolean2 | quantity2 | 2 |
| 3 | California | boolean3 | quantity3 | 3 |
[Tabelle : 1. shipstatebooleantest]

{#cpq-logik-io-scripting-language-reference__table_l5q_jr2_dhc}

Instead of having an identical `if` statement check what `shipState` is and setting the Boolean values and quantities accordingly, you could instead replace it with only one `if`
statement that sets the values based on the results of a table lookup.

In the following On Configure/Reconfigure script, if the `shipState` field has a value, the fields that are returned by the lookup function
are set. If the `shipState` field is blank, then all Boolean and quantity fields are set.

    if (cfgRequest.shipState.value != "" && cfgRequest.shipState.value != null){
    	var fieldMapping = lookup("Select trueBoolean,quantityTest,rowQuantity from shipstatebooleantest where shipState = :value", { "value": cfgRequest.shipState.value });
    	console.log(fieldMapping);
    	if (fieldMapping != []){
    		cfgRequest[fieldMapping[0].trueBoolean].set("value",true);
    		cfgRequest[fieldMapping[0].quantityTest].set("value",fieldMapping[0].rowQuantity);
    	}
    }
    else{
    	var fieldMapping = lookup("Select trueBoolean,quantityTest,rowQuantity from shipstatebooleantest");
      console.log(fieldMapping);
      for (var row of fieldMapping) {
     		cfgRequest[row.trueBoolean].set("value",true);
     		cfgRequest[row.quantityTest].set("value",row.rowQuantity);
      }
    } 

If your instance of CPQ needs functionality not described here, contact support@logik.io with your use case.
**Zugehörige Konzepte**   

* [Using comments and the console to debug scripts](https://servicenow-prod.fluidtopics.net/FZny1PXRXf2Z8BOEAPDDhg "Learn how comments and the console can help you debug your scripts.")
* [Scripting: Checking for first and subsequent configurations](https://servicenow-prod.fluidtopics.net/bqFAdC4MeH52Qe~678BnmQ "You can test whether a configuration is being initialized or being reconfigured, and set code to execute based on the result.")  
**Zugehörige Verweise**   

* [Sample scripts](https://servicenow-prod.fluidtopics.net/g_PWwQ0nmyKRimIGOzCIIg "View a selection of commonly requested sample scripts.")

