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.
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
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).