2012-03-15 26 views
2

我正在为Tridion 2011 SP1创建.NET TBB。我在组件中有两个字段,其中一个是单值,另一个是嵌入的模式字段。在.NET程序集中循环访问多值字段和嵌入架构字段TBB

要检索单值场,我已经使用

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

而是指多值字段我都习惯了。

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

但它没有提取值。

请帮忙做一下。

+0

是你的嵌入式领域多值字段? – 2012-03-15 12:22:48

回答

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 2012-03-16 06:34:34

0

你应该做这样的事情:

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

emb是组件架构和multi字段的名称是从您的嵌入式架构中的多个值字段。 [0]是字段索引,但它是可选的

+0

如何为它添加for循环.. – Patan 2012-03-15 12:47:35

+0

@muzimil如果你确定在该字段中不会有逗号,你可能会得到字段值“Component.Fields.emb.multi”,然后用逗号分隔它,恐怕唯一的另一种方式是阅读组件的内容,然后解析XML – 2012-03-15 13:01:21