将标签从项目导出到 Excel
Exporting labels to Excel from a project
我有一个小问题 - 我必须列出几个大型共享项目的所有标签,因此缺少翻译的标签会被识别更新。
现在我正在寻找的是类似于 Palle Agermark 的标签导出作业 (http://www.agermark.com/2011/10/export-and-import-labels-for.html),但它会经历一个或多个项目并提取所有标签 ID(无论标签系列如何)和值Excel.
三种语言
这个可以做吗,有指点吗? :)
最简单的解决方案是直接转到标签源。
在 AX 2009 中,标签存储在应用程序文件夹中,名称类似于 axSYSen-us.ald,包含以下部分:
- ax - 文件前缀
- SYS - 标签名称,@SYS123 标签存储在那里
- en-us - 语言说明符
- ald - 标签文件扩展名
文件为文本格式,可以轻松导入 Excel 或使用文本编辑器进行编辑。
您可以导入到 Excel,每个标签文件一个 sheet,然后使用 Excel 将输出合并到单独的 sheet(在同一工作簿中)公式。
在 AX 2012 中,标签存储在模型数据库中,.ald 文件在启动时创建。
这扩展了 Jan B. Kjeldsen 的最后一条评论的想法,即从项目 xpo 文件中获取标签。标签以以下 XML 结构保存在 xpo 文件中:
<Table:Record name="TmpSysLabel" xmlns:Table='urn:www.microsoft.com/Formats/Table'>
<Table:Field name="Language">de</Table:Field>
<Table:Field name="Label">Geplante Produktionsaufträge</Table:Field>
<Table:Field name="Description"></Table:Field>
<Table:Field name="LabelId">@SYS119128</Table:Field>
<Table:Field name="SysLabelApplModule">0</Table:Field>
<Table:Field name="recVersion">0</Table:Field>
<Table:Field name="Partition">5637144576</Table:Field>
</Table:Record>
我的第一个想法是将这个 XML 导入到 Excel,但是 Excel 不能很好地处理属性中的列名。因此,我编写了一个 xsl,将 XML 转换为如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<labels>
<record>
<Language>de</Language>
<Label>Geplante Produktionsaufträge</Label>
<Description />
<LabelId>@SYS119128</LabelId>
<SysLabelApplModule>0</SysLabelApplModule>
<recVersion>0</recVersion>
<Partition>5637144576</Partition>
</record>
</labels>
要进行此转换,必须稍微清理一下原始 XML,将所有出现的 Table:Record
替换为 record
,将所有出现的 Table:Field
替换为field
。还要添加一个根 XML 节点 labels
。它应该看起来像
<labels>
<record>
<field name="Language">de</field>
<field name="Label">Geplante Produktionsaufträge</field>
<field name="Description"></field>
<field name="LabelId">@SYS119128</field>
<field name="SysLabelApplModule">0</field>
<field name="recVersion">0</field>
<field name="Partition">5637144576</field>
</record>
</labels>
现在是有趣的部分(至少对我来说是这样,因为我对 xsl 语法的了解不多),xsl 转换文件。我最终得到以下结果,它将使用 http://www.freeformatter.com/xsl-transformer.html:
产生想要的 XML
<?xml version="1.0" encoding="utf-16"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
<xsl:template match="/">
<labels>
<xsl:for-each select="Labels/*">
<record>
<xsl:for-each select="*">
<xsl:element name="{@name}">
<xsl:value-of select="." />
</xsl:element>
</xsl:for-each>
</record>
</xsl:for-each>
</labels>
</xsl:template>
</xsl:stylesheet>
然后可以使用 XML 的 Excel 开发人员工具将生成的 XML 导入 Excel。结果看起来像
我有一个小问题 - 我必须列出几个大型共享项目的所有标签,因此缺少翻译的标签会被识别更新。
现在我正在寻找的是类似于 Palle Agermark 的标签导出作业 (http://www.agermark.com/2011/10/export-and-import-labels-for.html),但它会经历一个或多个项目并提取所有标签 ID(无论标签系列如何)和值Excel.
三种语言这个可以做吗,有指点吗? :)
最简单的解决方案是直接转到标签源。
在 AX 2009 中,标签存储在应用程序文件夹中,名称类似于 axSYSen-us.ald,包含以下部分:
- ax - 文件前缀
- SYS - 标签名称,@SYS123 标签存储在那里
- en-us - 语言说明符
- ald - 标签文件扩展名
文件为文本格式,可以轻松导入 Excel 或使用文本编辑器进行编辑。
您可以导入到 Excel,每个标签文件一个 sheet,然后使用 Excel 将输出合并到单独的 sheet(在同一工作簿中)公式。
在 AX 2012 中,标签存储在模型数据库中,.ald 文件在启动时创建。
这扩展了 Jan B. Kjeldsen 的最后一条评论的想法,即从项目 xpo 文件中获取标签。标签以以下 XML 结构保存在 xpo 文件中:
<Table:Record name="TmpSysLabel" xmlns:Table='urn:www.microsoft.com/Formats/Table'>
<Table:Field name="Language">de</Table:Field>
<Table:Field name="Label">Geplante Produktionsaufträge</Table:Field>
<Table:Field name="Description"></Table:Field>
<Table:Field name="LabelId">@SYS119128</Table:Field>
<Table:Field name="SysLabelApplModule">0</Table:Field>
<Table:Field name="recVersion">0</Table:Field>
<Table:Field name="Partition">5637144576</Table:Field>
</Table:Record>
我的第一个想法是将这个 XML 导入到 Excel,但是 Excel 不能很好地处理属性中的列名。因此,我编写了一个 xsl,将 XML 转换为如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<labels>
<record>
<Language>de</Language>
<Label>Geplante Produktionsaufträge</Label>
<Description />
<LabelId>@SYS119128</LabelId>
<SysLabelApplModule>0</SysLabelApplModule>
<recVersion>0</recVersion>
<Partition>5637144576</Partition>
</record>
</labels>
要进行此转换,必须稍微清理一下原始 XML,将所有出现的 Table:Record
替换为 record
,将所有出现的 Table:Field
替换为field
。还要添加一个根 XML 节点 labels
。它应该看起来像
<labels>
<record>
<field name="Language">de</field>
<field name="Label">Geplante Produktionsaufträge</field>
<field name="Description"></field>
<field name="LabelId">@SYS119128</field>
<field name="SysLabelApplModule">0</field>
<field name="recVersion">0</field>
<field name="Partition">5637144576</field>
</record>
</labels>
现在是有趣的部分(至少对我来说是这样,因为我对 xsl 语法的了解不多),xsl 转换文件。我最终得到以下结果,它将使用 http://www.freeformatter.com/xsl-transformer.html:
产生想要的 XML<?xml version="1.0" encoding="utf-16"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
<xsl:template match="/">
<labels>
<xsl:for-each select="Labels/*">
<record>
<xsl:for-each select="*">
<xsl:element name="{@name}">
<xsl:value-of select="." />
</xsl:element>
</xsl:for-each>
</record>
</xsl:for-each>
</labels>
</xsl:template>
</xsl:stylesheet>
然后可以使用 XML 的 Excel 开发人员工具将生成的 XML 导入 Excel。结果看起来像