2013-02-06 34 views
4

我在Tridion中有一個純文本字段,可以有多個值。 itemtype是一個SingleLineTextField。在C#中TBB:如何將多個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在它有更多的價值。

+0

itemField.Values? –

回答

7

,就可以把現場爲SingleLineTextField類型,然後通過價值訪問集合,沿着這些路線的東西:

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; 
+1

這工作! 我出錯的地方是不要將Itemfield專門投射到SingleLineTextField。只有這樣你才能得到「熟悉」的領域。價值選擇...... –

4

首先,我建議不要依靠ToString()方法上的對象,除非它是專門記錄。在這種情況下,它適用於抽象類ItemField,但情況並非總是如此。

TOM.Net API僅爲ItemField定義了Definition和Name屬性,因此您需要將您的ItemField對象轉換爲更具體的對象。

TextField抽象類,它繼承SingleLineTextField,定義了一個ToString()方法,也ValueValues屬性,是更適合於你想要做什麼。查看文檔,我們可以看到Values將給我們一個IList<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 
} 
+1

Nuno在我打字時寫下了他的答案。 他們基本上是一樣的。我希望我提供了一些額外的上下文:) –

+1

謝謝@David,這是一些很好的附加信息,將有助於任何人可能有類似的問題。這就是SE的全部重點! –

相關問題