Columnas compuestas

Algunas columnas agregadas a un formulario pueden representar varios elementos de datos. Estas columnas compuestas se comportan de manera diferente a otras columnas cuando se muestran en la aplicación web y debe escribir scripts de manera diferente para usarlos correctamente.

La siguiente tabla enumera las columnas compuestas disponibles en aplicaciones basadas en modelo:

Tabla

Nombre

Nombre lógico

Cuenta

Dirección1

address1_composite

Dirección 2

address2_composite

Contacto

Nombre completo

fullname

Dirección 1

address1_composite

Dirección 2

address2_composite

Cliente potencial

Nombre completo

fullname

Dirección 1

address1_composite

Dirección 2

address2_composite

Usuario

Nombre completo

fullname

Dirección

address1_composite

Otra dirección

address2_composite

Oferta

Dirección de facturación

billto_composite

Dirección de envío

shipto_composite

Orden

Dirección de facturación

billto_composite

Dirección de envío

shipto_composite

Factura

Dirección de facturación

billto_composite

Dirección de envío

shipto_composite

Columnas compuestas en la aplicación web

Cuando se agregan columnas compuestas a un formulario principal, la aplicación web mostrará solo la columna compuesta. Cuando alguien edita la columna, aparece un control flotante que muestra la columna individual que comprende la columna compuesta.

Por ejemplo, la columna dirección en un formulario de contacto es una columna compuesta. Seleccionando la columna dirección aparece un control flotante con columnas individuales que componen la columna compuesta.

Un ejemplo de columna compuesta.

Aunque no se agregó explícitamente al formulario en el editor de formularios, cada una de las columnas que forman parte de la columna están disponibles para el formulario. Aunque puede leer el valor del valor compuesto usando getValue, no puede usarsetValue para cambiar el valor de la columna compuesta directamente; debe establecer una o más de las columnas a las que hace referencia la columna compuesta.

Puede obtener acceso a los controles constituyentes individuales mostrados en el control flotante por nombre. Estos controles usan la siguiente convención de nomenclatura: <composite control name>_compositionLinkControl_<constituent column name>.

Para acceder simplemente al control address_line1 en el control address1_composite debe utilizar:

formContext.getControl("address1_composite_compositionLinkControl_address1_line1")

Columnas compuestas en clientes móviles

El cliente móvil para aplicaciones basadas en modelo usa las mismas definiciones de formulario que se usan para las tablas que tienen columnas compuestas, pero las interpreta de manera diferente. Si se encuentra una columna compuesta en la definición del formulario, mostrará todas las columnas que forman parte de la columna compuesta en esa sección del formulario. No es necesario un control flotante porque todas las columnas son visibles. Puede escribir scripts para el formulario accediendo a cada una de las columnas individuales como si se hubieran agregado individualmente al formulario. Sin embargo, el control compuesto real no estará presente en la página de clientes móviles de aplicaciones basadas en modelos.

Mitigación de las diferencias

Si desea acceder a la columna de nombre completo para las tablas Contact, Lead o User, utilice formContext.data.entity.getPrimaryAttributeValue que es una forma sencilla de obtener el valor de esta columna sin hacer referencia a ella directamente. Este método funciona en la aplicación web y en clientes móviles de aplicaciones basadas en modelos.

Si tiene un código que necesita leer el valor de una de las columnas compuestas de direcciones, para trabajar con ambos clientes, necesita separar el código usando el método getClient como se muestra en la siguiente función que mostrará la dirección formateada utilizando el método Xrm.Navigation.openAlertDialog en la aplicación web principal o en la versión de aplicaciones móviles del mismo formulario.

function showAddressDialog(executionContext) {
    var address1_compositeValue;
    var formContext = executionContext.getFormContext();
    if (Xrm.Utility.getGlobalContext().client.getClient() != "Mobile") {
        address1_compositeValue = formContext.getAttribute("address1_composite").getValue();
    }
    else {
        var address1_line1 = formContext.getAttribute("address1_line1").getValue();
        var address1_line2 = formContext.getAttribute("address1_line2").getValue();
        var address1_line3 = formContext.getAttribute("address1_line3").getValue();
        var address1_city = formContext.getAttribute("address1_city").getValue();
        var address1_stateorprovince = formContext.getAttribute("address1_stateorprovince").getValue();
        var address1_postalcode = formContext.getAttribute("address1_postalcode").getValue();
        var address1_country = formContext.getAttribute("address1_country").getValue();

        // Achieve equivalent formatting
        //address1_line1
        //address1_line2
        //address1_line3
        //address1_city, address1_stateorprovince address1_postalcode
        //address1_country

        var addressText = "";
        if (address1_line1 != null) {
            addressText += address1_line1 + "\n";
        }
        if (address1_line2 != null) {
            addressText += address1_line2 + "\n";
        }
        if (address1_line3 != null) {
            addressText += address1_line3 + "\n";
        }
        if (address1_city != null) {
            addressText += address1_city + ", ";
        }
        if (address1_stateorprovince != null) {
            addressText += address1_stateorprovince + " ";
        }
        if (address1_postalcode != null) {
            addressText += address1_postalcode + "\n";
        }
        addressText += address1_country;

        address1_compositeValue = addressText;
    }
    Xrm.Navigation.openAlertDialog({ text: address1_compositeValue });
    console.log(address1_compositeValue);
}

Temas relacionados

Columnas

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).