4

我在 Tridion 中有一个可以有多个值的纯文本字段。itemtype 是 SingleLineTextField。

在 TBB 代码中,我有以下内容(删除了非必要部分):

ItemFields itemFields = new ItemFields(folder.Metadata, folder.MetadataSchema);

foreach (ItemField itemField in itemFields)
{
    string itemFieldValue = string.Empty;
    switch (Utilities.GetFieldType(itemField))
    {
        case FieldType.SingleLineTextField:
            itemFieldValue = itemField.ToString();
            break;
    }
}

现在,如果有两个条目,结果只是两个带有字符换行符的字符串。

String A
String B

使用的方法是通用方法,它也适用于其他字段,所以我一直在寻找某种方法来确定 SingleLineTextField 中是否有更多值。

4

2 回答 2

7

您可以将该字段转换为一种SingleLineTextField类型,然后遍历 Values 集合,如下所示:

SingleLineTextField field = (SingleLineTextField)itemField;
foreach(string value in field.Values)
{
    // do something with value
}
// or if all you want is the count of values
int i = field.Values.Count;
于 2013-02-06T14:59:02.730 回答
4

首先,我建议不要依赖ToString()对象上的方法,除非它被特别记录。在这种情况下,它适用于抽象类ItemField,但情况可能并非总是如此。

TOM.Net API 仅定义 的定义和名称属性ItemField,因此您需要将 ItemField 对象转换为更具体的对象。

继承自的TextField抽象类定义了一个方法,还定义了更适合您尝试做的事情的属性。查看文档,我们可以看到它会给我们一个值,即使您的字段不是多值的。完美的!SingleLineTextFieldToString()ValueValuesValuesIList<String>

因此,要回答您的问题,“我正在寻找某种方法来确定 SingleLineTextField 中是否包含更多值”,您需要将 ItemField 转换为 TextField 并检查它提供的值的数量,因此:

TextField textField = (TextField)itemField;

// If you need to deal with multi-valued fields separately
if (textField.Values.Count > 1)
{
    //Logic to deal with multiple values goes here
}
else
{
    //Logic to deal with single valued goes here
}

// Much better... If you can deal with any number of values in a generic fashion
foreach (string value in textField.Values)
{
    // Generic code goes here
}
于 2013-02-06T15:39:45.737 回答