Partilhar via


Personalizar os cabeçalhos de coluna na grelha de previsão

Pode personalizar os cabeçalhos de coluna na grelha de previsão utilizando componentes de código do Power Apps. Por exemplo, pode traduzir o nome da coluna ou adicionar uma descrição para obter contexto adicional.

Requisitos de licença e de função

Tipo de requisito Tem de 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 de sistema
Mais informações: Direitos de acesso predefinidos para Sales

Como personalizar o cabeçalho

Vamos compreender as personalizações com um exemplo. Vamos adicionar a tradução em francês para os nomes das colunas Previsão e Ganha na grelha de previsão.

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

Criar um ficheiro de recurso e adicionar traduções

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

  1. Crie uma pasta denominada strings na pasta ColumnHeader.

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

    Nota

    O número 1036 no nome de ficheiro é o código de idioma para francês. Para obter uma lista de códigos de idioma, 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 anterior, os nomes de coluna para Previsão e Ganha são substituídos pelas traduções em francês Prévision e Gagné, respetivamente no nó <data>.

    Nota

    No parâmetro name, especifique o nome de coluna exato que configurou no passo Esquema da previsão.

    Uma captura de ecrã dos nomes de coluna no passo **Esquema** da configuração de previsão

    Se pretende traduzir o nome de coluna para idiomas adicionais, crie um ficheiro de recurso para cada idioma que pretende traduzir. Certifique-se de que o nome do ficheiro de recurso utiliza a seguinte convenção de nomenclatura:

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

Implementar o manifesto

Em seguida, vamos modificar o ficheiro de manifesto para especificar a propriedade que estamos a substituir. No nosso exemplo, estamos a substituir a propriedade ColumnName. Especificaremos também o caminho para o ficheiro de recurso que contém o texto traduzido.

  1. Abra o ficheiro do ControlManifest.Input.XML.

  2. Procure o nó property e substitua-o pelo seguinte 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. Atualize o nó <resources> para especificar o caminho para o ficheiro 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 ficheiro de recurso. No exemplo do código anterior, adicionámos o ficheiro de recurso para o idioma francês. Se tiver traduções para outros idiomas, adicione também o caminho do ficheiro de recurso para esses idiomas.

Implementar a lógica do componente

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

  1. Abra o ficheiro do 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óximos passos