2012-03-15 4 views
2

Tridion 2011 SP1用に.NET TBBを作成しています。コンポーネントには、単一値のフィールドと埋め込みスキーマフィールドの2つのフィールドがあります。.NETアセンブリの多値フィールドと埋め込みスキーマフィールドをループするTBB

単一値のフィールドを取得するには、私は

string singlefield= package.GetValue("Component.Fields.singlefield"); 

を使用していたが、私が使用している複数値フィールドを参照すること。

string multi= package.GetValue("Component.Fields.multi.values"); 

しかし、値をフェッチしていない。

お手伝いをしてください。 embは、コンポーネントのスキーマとmultiのフィールドの名前です

package.GetValue("Component.Fields.emb.multi[0]"); 

があなたの組み込み可能なスキーマから複数値フィールドです:

+0

埋め込みフィールドは複数値フィールドですか? –

答えて

7

コンポーネントの任意の値に対してpackage.GetValueを使用しません。代わりに、次のようなものを使用してください。

// Get the component 
Component c = (Component)engine.GetObject(package.GetByName(Package.ComponentName)); 
// Get the fields 
ItemFields fields = new ItemFields(c.Content, c.Schema); 
// get our Embedded schema field 
EmbeddedSchemaField emb = (EmbeddedSchemaField)fields["emb"]; 
// Loop 
foreach (ItemFields embeddedfields in emb.Values) 
{ 
    foreach (ItemField field in embeddedfields) 
    { 
     var tField = field as TextField; 
     if (tField != null) 
     { 
      string something = tField.Value; 
     } 
    } 
} 
+0

ありがとうございました。 – Patan

0

あなたはこのような何かを行う必要があります。 [0]はフィールドインデックスですが、任意です

+0

forループを追加する方法 – Patan

+0

@muzimilフィールドにカンマがないことが確かであれば、フィールド値 'Component.Fields.emb.multi'を取得してカンマで区切りますが、他の唯一の方法は、コンポーネントの内容を読み込んでXMLを解析することです。 –