Compartilhar via


Personalizar os cabeçalhos das colunas na grade de previsão

Você pode personalizar os cabeçalhos das colunas na grade de previsão usando os componentes de código do Power Apps. Por exemplo, você pode traduzir o nome da coluna ou adicionar uma dica de ferramenta para contexto adicional.

Requisitos de licença e função

Tipo de requisito Você deve ter
Licença Dynamics 365 Sales Premium ou Dynamics 365 Sales Enterprise
Mais informações: Preços do Dynamics 365 Sales
Direitos de acesso Administrador ou personalizador do sistema
Mais informações: Direitos de acesso predefinidos para o Sales

Como personalizar o cabeçalho

Vamos entender as personalizações com um exemplo. Adicionaremos a tradução em francês para os nomes das colunas Forecast e Won na grade de previsão.

  1. Crie um componente de código com o nome ColumnHeader
  2. Criar um arquivo de recurso e adicionar as traduções
  3. Implementar o manifesto
  4. Implementar a lógica do componente
  5. Criar e empacotar o componente

Criar um arquivo de recurso e adicionar as traduções

Depois de criar o componente de código, a pasta ColumnHeader é criada no caminho que você especificou. Vamos criar um arquivo de recurso e adicionar as traduções em francês no arquivo de recurso.

  1. Crie uma pasta chamada strings na pasta ColumnHeader.

  2. Copie o seguinte código para um novo arquivo, ColumnHeader.1036.resx.

    Nota

    O número 1036 no nome do arquivo é o código do idioma francês. Para obter uma lista com os códigos dos idiomas, consulte este artigo.

    <?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>
    

    No exemplo de código acima, os nomes das colunas para Forecast e Won são substituídos pelas traduções em francês Prévision e Gagné respectivamente no nó <data>.

    Nota

    No parâmetro name, especifique o nome exato da coluna que você configurou na etapa Layout da previsão.

    Uma captura de tela dos nomes de coluna na etapa **Layout** da configuração da previsão

    Se quiser traduzir o nome da coluna para outros idiomas, crie um arquivo de recurso para cada idioma para o qual deseja traduzir. Certifique-se de que o nome do arquivo de recurso use a seguinte convenção de nomenclatura:

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

Implementar o manifesto

Em seguida, modificaremos o arquivo de manifesto para especificar a propriedade que estamos substituindo. Em nosso exemplo, estamos substituindo a propriedade ColumnName. Também especificaremos o caminho para o arquivo de recurso que contém o texto traduzido.

  1. Abra o arquivo ControlManifest.Input.XML.

  2. Pesquise o nó property e substitua-o pelo código a seguir como está:

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

  3. Atualize o nó <resources> para especificar o caminho para o arquivo de recurso que inclui as traduções em 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>
    

    O nó <resx path> contém o caminho do arquivo de recurso. No exemplo de código anterior, adicionamos o arquivo de recurso para o idioma francês. Se você tiver traduções para outros idiomas, adicione também o caminho do arquivo de recurso desses idiomas.

Implementar a lógica do componente

Vamos adicionar o código para implementar a lógica do componente no arquivo index.ts.

  1. Abra o arquivo index.ts.

  2. Adicione as seguintes linhas no 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);
        }
    

Próximas etapas