How to Set Input Values in a Configurator Row Layout

How to Set Input Values in a Configurator Row Layout

When you wrap inputs in a RowLayout, calling parameter.setValue() before the layout is registered into the ConfiguratorEntry will silently fail.

The fix: register the layout first via .addToConfiguratorEntry(ce) or the equivalent ce.createParameter(layout), then call parameter.setValue().

This applies to every configurator logic — standalone configurators, dashboard inline configurators, Quote / Agreement / Promotion / Rebate header configurators, Model Class configurator tabs.

Sample code

Row 1 is user-editable (BaseValue, Multiplier). Row 2 is read-only (Product) and is driven by Row 1. The wrong vs right placements of setValue() are highlighted inline.

def ibf = api.inputBuilderFactory() def ce = api.createConfiguratorEntry() // Row 1 — drivers def baseValueInput = ibf.createIntegerUserEntry("BaseValue") .setLabel("Base Value") .setRequired(true) .buildContextParameter() def multiplierInput = ibf.createIntegerUserEntry("Multiplier") .setLabel("Multiplier") .setRequired(true) .buildContextParameter() // Row 2 — derived def productInput = ibf.createIntegerUserEntry("Product") .setLabel("Product (Base x Multiplier)") .setReadOnly(true) .buildContextParameter() Integer base = input.BaseValue as Integer Integer mult = input.Multiplier as Integer // WRONG: setValue() here does nothing. The row layout has not yet // been attached to the ConfiguratorEntry, so the value never propagates. // // if (base != null && mult != null) { // productInput.setValue(base * mult) // } ibf.createRowLayout("InputsRow") .addInput(baseValueInput) .addInput(multiplierInput) .addToConfiguratorEntry(ce) ibf.createRowLayout("DerivedRow") .addInput(productInput) .addToConfiguratorEntry(ce) // CORRECT: setValue() after .addToConfiguratorEntry(ce). The value // propagates to the rendered Row 2 input. if (base != null && mult != null) { productInput.setValue(base * mult) } return ce