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

これで、エントリが 2 つの場合の結果は、文字の改行を含む 2 つの文字列になります。

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 は の Definition プロパティと Name プロパティのみを定義するためItemField、ItemField オブジェクトをより具体的なものにキャストする必要があります。

から継承する抽象クラスは、メソッドを定義するだけTextFieldでなく、やろうとしていることにはるかに適したプロパティも定義します。ドキュメントを見ると、フィールドが多値でない場合でも、値の1 つが得られることがわかります。完全!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 に答える