自定义预测网格中的列标题
您可以使用 Power Apps 代码组件自定义预测网格中的列标题。 例如,您可以翻译列名称或为其他上下文添加工具提示。
许可证和角色要求
要求类型 | 您必须具有 |
---|---|
许可证 | Dynamics 365 Sales Premium 或 Dynamics 365 Sales Enterprise 详细信息:Dynamics 365 Sales 定价 |
安全角色 | 系统管理员或定制员 详细信息:预定义的 Sales 安全角色 |
如何自定义标题
我们来通过一个示例了解一下自定义。 我们将在预测网格中添加预测和赢单列名称的法语翻译。
-
使用名称
ColumnHeader
创建代码组件 - 创建资源文件和添加翻译
- 实施清单
- 实现组件逻辑
- 生成并打包组件
创建资源文件和添加翻译
创建代码组件后,将在指定的路径中创建 ColumnHeader
文件夹。 我们来创建一个资源文件,并在资源文件中添加法语翻译。
在
ColumnHeader
文件夹下创建一个名为strings
的文件夹。将以下代码复制到新文件 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évision 和 Gagné 替代。备注
在
name
参数中,指定您在预测的布局步骤中配置的确切列名称。如果要将列名称翻译为其他语言,为要翻译的每个目标语言创建一个资源文件。 确保资源文件名使用下列命名约定:
filename.languagecode.resx **Example file name for German:** ColumnHeader.1031.resx
实施清单
接下来,我们将修改清单文件以指定要替代的属性。 在我们的示例中,我们替代属性 ColumnName
。 我们还将指定包含翻译文本的资源文件的路径。
打开
ControlManifest.Input.XML
文件。搜索
property
节点,按原样将其替换为以下代码:<property name="columnName" display-name-key="Property_Display_Key" description-key="Property_Desc_Key" of-type="SingleLine.Text" usage="bound" required="true" />
更新
<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
文件中添加实现组件逻辑的代码。
打开
index.ts
文件。在
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); }