2013-02-06 2 views
4

여러 값을 가질 수있는 일반 텍스트 필드가 Tridion에 있습니다. itemtype은 SingleLineTextField입니다. 나는 다음 (제거 중요하지 않은 부분)이있는 TBB 코드에서 C# TBB : 다중 SingleLineTextField를 별도의 문자열로 분할하는 방법

: 이제

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가 더 값이 있는지 확인 할 수있는 방법을 찾고 있었다.

당신은 그 값 컬렉션을이 라인을 따라 뭔가 반복 후, SingleLineTextField 유형에 필드를 캐스팅 할 수
+0

itemField.Values? –

답변

7

: 그것은 특별히하지 않는 한 나는 개체에 ToString() 방법에 의존에 대해 조언을 것이다, 첫째

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

을 문서화. 이 경우 추상 클래스 ItemField에서 작동하지만 항상 그렇지는 않습니다.

TOM.Net API는 ItemField에 대한 정의 및 이름 속성 만 정의하므로 ItemField 개체를보다 구체적인 것으로 캐스팅해야합니다. 에서 SingleLineTextField 상속이하는 ToString() 방법을 정의

TextField 추상 클래스,뿐만 아니라 훨씬 더 적합 당신이 뭘하려는 건지에 있습니다 ValueValues 속성. 문서를 보면 필드가 다중 값이 아니더라도 ValuesIList<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

누노는 내가 타자를 입력하는 동안 그의 답을 썼습니다. 기본적으로 동일합니다. 나는 내게 어떤 추가적인 문맥을 주길 바란다 :) –

+1

감사합니다 @ 데이비드, 이것은 비슷한 문제를 겪고있는 다른 사람들에게 유용할만한 좋은 추가 정보입니다. 그것이 SE의 핵심입니다! –