在SDL Tridion 2011 SP1的事件处理程序中使用TOM.NET API从重复的嵌入式模式获取值
我正在使用事件处理程序来保存组件 我的目标是在用户创建基于模式的组件时执行一些验证 我有一个名为“Employee”的模式 Employee有一个名为“Experience”的嵌入式模式,它是多值的 经验有三个领域在SDL Tridion 2011 SP1的事件处理程序中使用TOM.NET API从重复的嵌入式模式获取值,tridion,Tridion,我正在使用事件处理程序来保存组件 我的目标是在用户创建基于模式的组件时执行一些验证 我有一个名为“Employee”的模式 Employee有一个名为“Experience”的嵌入式模式,它是多值的 经验有三个领域 角色:与价值观经理、领导一起下拉列表 公司:文本字段 年份:文本字段 当用户在这些字段中输入一些数据时,我想在保存之前进行一些验证 高级设计应该是这样的 加载组件的实例 导航到嵌入式领域“体验” 每一次“体验”。我需要获取“角色”的值,并检查是否在其他两个字段中输入了适当的值(通过编
Tridion.ContentManager.Session mySession = sourcecomp.Session;
Schema schema= sourcecomp.Schema;
if(schema.Title.Equals("Employee"))
{
var compFields = new ItemFields(sourcecomp.Content, sourcecomp.Schema);
var embeddefield = (EmbeddedSchemaField)compFields["Experience"];
var embeddedfields = (IList<EmbeddedSchemaField>)embeddefield.Values;
foreach(var a in embeddedfields)
{
if(a.Name.Equals("Role"))
{
string value=a.Value.ToString();
}
}
}
Tridion.ContentManager.Session mySession=sourcecomp.Session;
Schema Schema=sourcecomp.Schema;
if(schema.Title.Equals(“雇员”))
{
var compFields=新项目字段(sourcecomp.Content,sourcecomp.Schema);
变量EmbeddedField=(EmbeddedSchemaField)compFields[“经验”];
var embeddedfields=(IList)embeddedField.Values;
foreach(嵌入字段中的变量a)
{
如果(a.Name.Equals(“角色”))
{
字符串值=a.value.ToString();
}
}
}
实际上,如何同时检索其他字段中的值一直困扰着我
有人能解释一下怎么做吗?对于EmbeddedSchemaField类,您需要了解的是,它同时表示一个模式和一个字段(顾名思义…) 我总是发现,在编写以组件字段为目标的代码时,查看组件的源XML很有帮助,这样可以很好地直观地表示类必须执行的操作。如果您像这样查看组件XML:
一些头衔
标题1
一些内容
标题2
更多内容
Body是嵌入的模式字段,它是多值的,其中包含2个单值字段
在TOM.NET中寻址这些字段,然后:
//组件
组件c=(组件)引擎.GetObject(package.GetByName(package.ComponentName));
//此组件中的字段集合
ItemFields内容=新的ItemFields(c.content,c.Schema);
//标题字段:
TextField contentTitle=(TextField)content[“Title”];
//contentTitle.Value=“一些标题”
//获取嵌入的模式字段“Body”
EmbeddedSchemaField正文=(EmbeddedSchemaField)内容[“正文”];
//Value不是一个字段,而是一组字段。
//因为这恰好是一个多值字段,所以我们将使用body.Values
foreach(body.Values中的ItemFields bodyFields)
{
SingleLineTextField bodyParagraphTitle=(SingleLineTextField)bodyFields[“ParagraphTitle”];
XhtmlField bodyParagraphContent=(XhtmlField)bodyFields[“ParagraphContent”];
}
希望这能让您开始学习。对于EmbeddedSchemaField类,您需要了解的是,它同时表示模式和字段(顾名思义…) 我总是发现,在编写以组件字段为目标的代码时,查看组件的源XML很有帮助,这样可以很好地直观地表示类必须执行的操作。如果您像这样查看组件XML:
一些头衔
标题1
一些内容
标题2
更多内容
Body是嵌入的模式字段,它是多值的,其中包含2个单值字段
在TOM.NET中寻址这些字段,然后:
//组件
组件c=(组件)引擎.GetObject(package.GetByName(package.ComponentName));
//此组件中的字段集合
ItemFields内容=新的ItemFields(c.content,c.Schema);
//标题字段:
TextField contentTitle=(TextField)content[“Title”];
//contentTitle.Value=“一些标题”
//获取嵌入的模式字段“Body”
EmbeddedSchemaField正文=(EmbeddedSchemaField)内容[“正文”];
//Value不是一个字段,而是一组字段。
//因为这恰好是一个多值字段,所以我们将使用body.Values
foreach(body.Values中的ItemFields bodyFields)
{
SingleLineTextField bodyParagraphTitle=(SingleLineTextField)bodyFields[“ParagraphTitle”];
XhtmlField bodyParagraphContent=(XhtmlField)bodyFields[“ParagraphContent”];
}
希望这能让您开始。您能指定您使用的SDL Tridion版本吗?我使用的是SDL Tridion 2011 SP1。您能指定您使用的SDL Tridion版本吗?我使用的是SDL Tridion 2011 SP1。还值得一提的是,sourcecomp.Content包含组件XML的XML,因此,您可以简单地从XML解析所需的信息。还值得一提的是,sourcecomp.Content包含组件XML的XML,因此您可以简单地从XML解析所需的信息。
Tridion.ContentManager.Session mySession = sourcecomp.Session;
Schema schema= sourcecomp.Schema;
if(schema.Title.Equals("Employee"))
{
var compFields = new ItemFields(sourcecomp.Content, sourcecomp.Schema);
var embeddefield = (EmbeddedSchemaField)compFields["Experience"];
var embeddedfields = (IList<EmbeddedSchemaField>)embeddefield.Values;
foreach(var a in embeddedfields)
{
if(a.Name.Equals("Role"))
{
string value=a.Value.ToString();
}
}
}