Compartir a través de


Personalice los encabezados de columna en la cuadrícula de previsión.

Puede personalizar los encabezados de columna en la cuadrícula de previsión usando componentes de código de Power Apps. Por ejemplo, puede traducir el nombre de la columna o agregar información sobre herramientas para un contexto adicional.

Requisitos de licencia y rol

Tipo de requisito Debe tener
Licencia Dynamics 365 Sales Premium o Dynamics 365 Sales Enterprise
Más información: Precios de Dynamics 365 Sales
Roles de seguridad Administrador del sistema o personalizador del sistema
Más información: Roles de seguridad predefinidos para Sales

Cómo personalizar el encabezado.

Vamos a entenderlos la personalización con un ejemplo. Agregaremos la traducción al francés para los nombres de las columnas Previsión y Ganó en la cuadrícula de previsión.

  1. Cree un componente de código con el nombre ColumnHeader
  2. Cree un archivo de recursos y agregue traducciones
  3. Implementar el manifiesto
  4. Implementar lógica del componente
  5. Compilar e implementar el paquete

Cree un archivo de recursos y agregue traducciones

Después de crear el componente de código, la carpeta ColumnHeader se crea en la ruta que especificó. Creemos un archivo de recursos y agreguemos las traducciones al francés en el archivo de recursos.

  1. Cree una carpeta llamada strings en la carpeta ColumnHeader.

  2. Copie el siguiente código en un nuevo archivo, ColumnHeader.1036.resx.

    Nota

    El número 1036 en el nombre del archivo es el código de idioma para el francés. Para obtener una lista de códigos de idioma, vea este artículo.

    <?xml version="1.0" encoding="utf-8"?>
    <root>
    
      <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
        <xsd:element name="root" msdata:IsDataSet="true">
          <xsd:complexType>
            <xsd:choice maxOccurs="unbounded">
              <xsd:element name="metadata">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" />
                  </xsd:sequence>
                  <xsd:attribute name="name" use="required" type="xsd:string" />
                  <xsd:attribute name="type" type="xsd:string" />
                  <xsd:attribute name="mimetype" type="xsd:string" />
                  <xsd:attribute ref="xml:space" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="assembly">
                <xsd:complexType>
                  <xsd:attribute name="alias" type="xsd:string" />
                  <xsd:attribute name="name" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="data">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                    <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
                  </xsd:sequence>
                  <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
                  <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
                  <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
                  <xsd:attribute ref="xml:space" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="resheader">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                  </xsd:sequence>
                  <xsd:attribute name="name" type="xsd:string" use="required" />
                </xsd:complexType>
              </xsd:element>
            </xsd:choice>
          </xsd:complexType>
        </xsd:element>
      </xsd:schema>
      <resheader name="resmimetype">
        <value>text/microsoft-resx</value>
      </resheader>
      <resheader name="version">
        <value>2.0</value>
      </resheader>
      <resheader name="reader">
        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
      </resheader>
      <resheader name="writer">
        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
      </resheader>
      <data name="Forecast" xml:space="preserve">
        <value>Prévision</value>
      </data>
      <data name="Won" xml:space="preserve">
        <value>Gagné</value>
      </data>
    </root>
    

    En el ejemplo de código anterior, los nombres de columna para Previsión y Ganó se anulan con las traducciones al francés Prévision y Gagné respectivamente en el <data> nodo.

    Nota

    En el parámetro name , especifique el nombre de columna exacto que configuró en el paso Diseño del pronóstico.

    Captura de pantalla de los nombres de columna en el paso **Diseño** de la configuración de la previsión

    Si desea traducir el nombre de la columna a otros idiomas, cree un archivo de recursos para cada idioma al que desee traducir. Asegúrese de que el nombre del archivo de recursos utilice la siguiente convención de nomenclatura:

    filename.languagecode.resx  
    **Example file name for German:** ColumnHeader.1031.resx
    

Implementar el manifiesto

A continuación, modificaremos el archivo de manifiesto para especificar la propiedad que estamos anulando. En nuestro ejemplo, anulamos la propiedad ColumnName. También especificaremos la ruta al archivo de recursos que contiene el texto traducido.

  1. Abra el archivo ControlManifest.Input.XML.

  2. Busque por el nodo property y reemplácelo con el siguiente código as-is:

    <property name="columnName" display-name-key="Property_Display_Key" description-key="Property_Desc_Key" of-type="SingleLine.Text" usage="bound" required="true" />

  3. Actualice el nodo <resources> para especificar la ruta al archivo de recursos que incluye las traducciones al francés:

    <resources>
      <code path="index.ts" order="1"/>
      <!-- UNCOMMENT TO ADD MORE RESOURCES
      <css path="css/ColumnHeader.css" order="1" />
      -->
      <resx path="strings/ColumnHeader.1036.resx" version="1.0.0" />
    </resources>
    

    El nodo <resx path> contiene la ruta del archivo de recursos. En el ejemplo de código anterior, agregamos el archivo de recursos para el idioma francés. Si tiene traducciones para otros idiomas, agregue también la ruta del archivo de recursos para esos idiomas.

Implementar la lógica del componente

Añadamos el código para implementar la lógica del componente en el archivo index.ts.

  1. Abra el archivo index.ts.

  2. Agregue las siguientes líneas en el método updateView:

    public updateView(context: ComponentFramework.Context<IInputs>): void
        {
            // Add code to update control view
            const colName = (context.parameters.columnName && context.parameters.columnName.raw) || "";
            this._container.innerHTML = context.resources.getString(colName);
        }
    

Pasos siguientes