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.

Groovy
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