¿Cómo utilizar el nuevo "Address input control" en una model-driven app?

El tipo de control Address input es un control que estaba disponible en los formularios legacy de Dynamics 365, pero en la nueva interfaz unificada, los campos de la dirección de una cuenta por ejemplo, en lugar de verse tal y como lo hacían en esos formularios, aparecen como campos individuales dentro del "address1_composite".



Investigando la posibilidad de disponer un control como el que teníamos hace un tiempo, me tope con un post de Linn Zaw Win y he decido traeros a mi blog esta información, ya que me ha sido de mucha utilidad.


¡Importante! Este control está en preview, al menos no se encuentra en la documentación oficial de Microsoft por el momento.


¿Cómo agregarlo?


Este control no aparece por defecto en nuestra lista de controles dentro de un campo.

Utilizar controles personalizados para visualizaciones de datos de aplicaciones controladas por modelos en Power Apps - Power Apps | Microsoft Docs

Por lo que vamos a ver como modificar el XML de nuestro formulario para agregarlo.

Para ello utilizaremos el FormXML Manager de XrmToolBox que nos permitirá hacerlo de una forma fácil.


Primero vamos a crear un campo de tipo texto que se llame por ejemplo: "Dirección Completa", dentro de nuestra tabla de accounts y lo agregaremos a nuestro formulario.


Después abriremos el FormXML Manager y buscaremos nuestro campo. A continuación, solo deberemos añadirle un ID único para poder agregarle el control.


uniqueid="{714D8A2B-9656-96C5-7300-BB2D988899A5}"


Una vez hecho esto, iremos dentro del XML a la parte de controlDescriptions y agregaremos el siguiente código teniendo en cuenta en que debemos indicar en nombre interno de nuestro campo y el ID generado anteriormente que debe coincidir con el subrayado:


<controlDescription forControl="{714D8A2B-9656-96C5-7300-BB2D988899A5}">
      <customControl id="{4273EDBD-AC1D-40D3-9FB2-095C621B552D}">
        <parameters>
          <datafieldname>mar_fulladdress</datafieldname>
        </parameters>
      </customControl>
      <customControl name="Microsoft.AddressInputUCI" formFactor="0">
        <parameters>
          <Address>address1_line1</Address>
          <Street1>address1_line1</Street1>
          <Street2>address1_line2</Street2>
          <Street3>address1_line3</Street3>
          <City>address1_city</City>
          <StateOrProvince>address1_stateorprovince</StateOrProvince>
          <CountryOrRegion>address1_country</CountryOrRegion>
          <ZipOrPostalCode>address1_postalcode</ZipOrPostalCode>
          <WriteToPrimaryField static="true" type="Enum">True</WriteToPrimaryField>
          <AddressFormFormat static="true" type="Enum">ES</AddressFormFormat>
          <KeyProvider static="true" type="Enum">OrgSetting</KeyProvider>
        </parameters>
      </customControl>
      <customControl name="Microsoft.AddressInputUCI" formFactor="1">
        <parameters>
          <Address>address1_line1</Address>
          <Street1>address1_line1</Street1>
          <Street2>address1_line2</Street2>
          <Street3>address1_line3</Street3>
          <City>address1_city</City>
          <StateOrProvince>address1_stateorprovince</StateOrProvince>
          <CountryOrRegion>address1_country</CountryOrRegion>
          <ZipOrPostalCode>address1_postalcode</ZipOrPostalCode>
          <WriteToPrimaryField static="true" type="Enum">True</WriteToPrimaryField>
          <AddressFormFormat static="true" type="Enum">ES</AddressFormFormat>
          <KeyProvider static="true" type="Enum">OrgSetting</KeyProvider>
        </parameters>
      </customControl>
      <customControl name="Microsoft.AddressInputUCI" formFactor="2">
        <parameters>
          <Address>address1_line1</Address>
          <Street1>address1_line1</Street1>
          <Street2>address1_line2</Street2>
          <Street3>address1_line3</Street3>
          <City>address1_city</City>
          <StateOrProvince>address1_stateorprovince</StateOrProvince>
          <CountryOrRegion>address1_country</CountryOrRegion>
          <ZipOrPostalCode>address1_postalcode</ZipOrPostalCode>
          <WriteToPrimaryField static="true" type="Enum">True</WriteToPrimaryField>
          <AddressFormFormat static="true" type="Enum">ES</AddressFormFormat>
          <KeyProvider static="true" type="Enum">OrgSetting</KeyProvider>
        </parameters>
      </customControl>
    </controlDescription>

Tras esto, podremos ver nuestro control en el campo y modificar los parámetros que consideremos.



Lo siguiente que queremos es que esta dirección se muestre dentro del control de mapa de Bing.

Para ello deberemos activar la característica desde el centro de administración.


Al ser los campos del composite de Address1 (address1_composite) los mismos utilizados en este control, desde el propio mapa de Bing veríamos a dirección seleccionando el Address 1 desde el formulario o desde el xml




Finalmente, después de seguir estos pasos, podremos ver nuestra dirección completa en un solo campo, y además, podremos modificar cada uno de los campos que componen la dirección de forma individual, disponiendo de una experiencia mejorada a la que ya teníamos en nuestro formularios legacy de Dynamics 365, ya que además, permite el autocompletado de la dirección.