Los campos reactivos es una utilidad que permite en un objeto transaccional inicializar un campo en función de otros campos del mismo formulario. En los siguientes ejemplos se muestra el código JS original y el nuevo código haciendo uso de los valores reactivos.

1 Ejemplo1

En el objeto capuntes, los campos divdeb, debe, divhab, haber están relacionados entre ellos.

1.1 Código original JS

En este código se observa como en el evento after del campo divdeb se inicializan los campos debe y haber, llamando a la función capuntes_get_imploc.

Copy
// ============================================================================
// capuntes_get_imploc
// ============================================================================
function capuntes_get_imploc() {

    var debe  = getFieldObjectValue("divdeb");
    var haber = getFieldObjectValue("divhab");

    if (getFieldObjectValue("cambio") != 1) {
        if (debe != 0)
            debe = executeQueryValue("GET_IMPLOC", [
                        0,
                        getFieldValue("empcode"),
                        getFieldValue("moneda"),
                        getFieldObjectValue("fecha"),
                        getFieldObjectValue("cambio"),
                        getFieldObjectValue("divdeb") ]);

        if (haber != 0)
            haber = executeQueryValue("GET_IMPLOC", [
                         0,
                         getFieldValue("empcode"),
                         getFieldValue("moneda"),
                         getFieldObjectValue("fecha"),
                         getFieldObjectValue("cambio"),
                         getFieldObjectValue("divhab") ]);
    }

    setFieldValue("debe",  debe);
    setFieldValue("haber", haber);
}

// ============================================================================
// after_divdeb
// ============================================================================
function after_divdeb {
    if (getFieldObjectValue("divdeb") != 0 && getFieldObjectValue("divhab") != 0) {
        setFieldValue("haber", 0);
        setFieldValue("divhab", 0);
    }
    
    capuntes_get_imploc();
}

1.2 Valores reactivos

Todo el código javascript se ha sustituido definiendo en la tabla wic_jdic_column_options para el campo debe el siguiente registro:



En el valor reactivo se ha definido la expresión uel:

Copy
(divhab != 0 ? 0 : (tipcal == 0 ? divdeb / cambio : divdeb * cambio))

El valor del campo debe es 0 si el divhab != 0 o es el divdeb */ cambio dependiendo del tipcal. Esta expresión se evalúa siempre que alguno de los campos implicados cambie de valor.

El campo tipcal se ha añadido en el SQL principal del objeto y en el mapeo de columnas en el helper del campo empcode.

2 Ejemplo2

En el objeto captplal el campo fecval depende del campo activa y codcon.

2.1 Código orginal javascript

En este código se observa como en el evento after del campo cuenta se inicializan los campos fecval, ctaexp y centro

Copy
// ============================================================================
// after_cuenta
// ============================================================================
function after_cuenta {
    if (!(getFieldValue("activa").indexOf("C") >=0 && (getFieldValue("conact").indexOf("C") >=0 || getFieldValue("codcon") == ''))) {
        setFieldValue("ctaexp", "");
        setFieldValue("centro", "");
    }

    if (!(getFieldValue("activa").indexOf("V") >=0 && (getFieldValue("conact").indexOf("V") >=0 || getFieldValue("codcon") == '')))
        setFieldValue("fecval", "");
}

2.2 Valores reactivos

Todo el código javascript se ha sustituido definiendo en la tabla wic_jdic_column_options un registro para cada uno de los campos ctaexp, centro y fecval.

Copy
// Valor reactivo para el campo fecval:
activa.indexOf('V') >=0 && (conact.indexOf('V') >=0 || codcon == '') ? fecval : ''

// Valor reactivo para el campo ctaexp:
activa.indexOf('C') >=0 && (conact.indexOf('C') >=0 || codcon == '') ? ctaexp : ''

// Valor reactivo para el campo centro:
activa.indexOf('C') >=0 && (conact.indexOf('C') >=0 || codcon == '') ? centro : ''