自定义预测网格中的列标题

您可以使用 Power Apps 代码组件自定义预测网格中的列标题。 例如,您可以翻译列名称或为其他上下文添加工具提示。

许可证和角色要求

要求类型 您必须具有
许可证 Dynamics 365 Sales Premium 或 Dynamics 365 Sales Enterprise
详细信息:Dynamics 365 Sales 定价
安全角色 系统管理员或定制员
详细信息:预定义的 Sales 安全角色

如何自定义标题

我们来通过一个示例了解一下自定义。 我们将在预测网格中添加预测赢单列名称的法语翻译。

  1. 使用名称 ColumnHeader 创建代码组件
  2. 创建资源文件和添加翻译
  3. 实施清单
  4. 实现组件逻辑
  5. 生成并打包组件

创建资源文件和添加翻译

创建代码组件后,将在指定的路径中创建 ColumnHeader 文件夹。 我们来创建一个资源文件,并在资源文件中添加法语翻译。

  1. ColumnHeader 文件夹下创建一个名为 strings 的文件夹。

  2. 将以下代码复制到新文件 ColumnHeader.1036.resx。

    备注

    文件名中的数字 1036 是法语的语言代码。 有关语言代码列表,请参阅本文

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

    在上面的代码示例中,<data> 节点中,预测赢单的列名称分别被法语翻译 PrévisionGagné 替代。

    备注

    name 参数中,指定您在预测的布局步骤中配置的确切列名称。

    预测配置的**布局**步骤中列名称的屏幕截图

    如果要将列名称翻译为其他语言,为要翻译的每个目标语言创建一个资源文件。 确保资源文件名使用下列命名约定:

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

实施清单

接下来,我们将修改清单文件以指定要替代的属性。 在我们的示例中,我们替代属性 ColumnName。 我们还将指定包含翻译文本的资源文件的路径。

  1. 打开 ControlManifest.Input.XML 文件。

  2. 搜索 property 节点,按原样将其替换为以下代码:

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

  3. 更新 <resources> 节点以指定包含法语翻译的资源文件的路径:

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

    <resx path> 节点包含资源文件路径。 在前面的代码示例中,我们添加了法语的资源文件。 如果您有其他语言的翻译,同时添加这些语言的资源文件路径。

实现组件逻辑

我们在 index.ts 文件中添加实现组件逻辑的代码。

  1. 打开 index.ts 文件。

  2. 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);
        }
    

后续步骤