在Kentico文本/XML转换中动态获取数据项值

在Kentico文本/XML转换中动态获取数据项值,kentico,Kentico,我有一个自定义宏方法,它返回字段名的字符串数组,我希望在文本/XML转换中输出这些字段名的值。转换正在用作数据列表中的项模板。我不知道如何从当前数据项动态获取值。似乎DataItem没有解析——下面的GetValue调用没有输出任何内容。使用CurrentDocument显然会解析页面而不是数据项 <tr> <td>{% SKUNumber %}</td> {% foreach (spec in Util.GetSpecFieldsForPageTyp

我有一个自定义宏方法,它返回字段名的字符串数组,我希望在文本/XML转换中输出这些字段名的值。转换正在用作数据列表中的项模板。我不知道如何从当前数据项动态获取值。似乎
DataItem
没有解析——下面的
GetValue
调用没有输出任何内容。使用
CurrentDocument
显然会解析页面而不是数据项

<tr>
  <td>{% SKUNumber %}</td>
  {% foreach (spec in Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass, "RelatedModelsTable")) {  %}
    <td class="hidden-xs">{% GetValue(DataItem, spec) %} </td>
  {% } #%}
</tr>

{%SKUNumber%}
{%foreach(Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass,“RelatedModelsTable”)中的规范){%}
{%GetValue(数据项,规范)%}
{% } #%}

是否有任何方法可以访问文本/XML转换中的当前数据项?或者我需要切换到ASCX转换吗?

您必须为我们提供场景才能获得正确答案


如果{%Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass,“RelatedModelsTable”)%%}返回IEnumbrable,则可以使用

假设您使用的是Kentico v10,那么您正在查找
对象

使用索引器,可以指定要从中检索数据的列:

{% Object[columnName] %}
在您的情况下,它将是:


{%SKUNumber%}
{%foreach(Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass,“RelatedModelsTable”)中的规范){%}
{%Object[spec]}
{% } #%}
这里有一个通用示例,适用于那些需要一个没有任何自定义宏的示例的人。这将动态呈现
DocumentID
DocumentName
NodeAliasPath
,指定数组中的列,而不是对它们进行硬编码


{%columns=“DocumentID,DocumentName,NodeAliasPath”foreach(columns.Split(“,”)中的列){%}
{%Object[列]]}
{% } #%}

编辑:

由于Kentico v9没有用于转换的
对象
宏,动态解析重复项的值的一种方法是使用
Util.ResolveMacroExpression
,并提供列名作为参数

重复项字段注册为,因此无法使用索引器或宏方法访问它们

下面是来自问题作者的相同示例,已修改为适用于Kentico v9:


{%SKUNumber%}
{%foreach(Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass,“RelatedModelsTable”)中的规范){%}
{%Util.ResolveMacroExpression(spec)%}
{% } #%}

它输出一个列/字段名称数组,我想从数据源项中写出这些名称。ApplyTransformation对我没有帮助,除非我遗漏了什么。我只想输出字段的值。我已经用ResolveMacroExpression中Kentico 9Fixed打字错误的解决方案更新了我的答案,但除此之外,这正是我所需要的。非常感谢。