我一直在研究 .NET C# TBB 以从模式中检索字段,而模式又会解析每个嵌入的字段。我在模板中使用 Razor Mediator 来输出 JSON。我对 C# 和 .NET 非常陌生,因此我使用和引用我的同事在其他模板中编写的代码。TBB 的目标是在发布后检索这些嵌入字段之一中图像的确切 url ,并将其作为纯文本推回包中。
这最终似乎奏效了,直到我将嵌入式模式的一个字段更改为多媒体链接。一旦我将 Embeddedschemafields 设置为循环遍历,模板生成器就会提供一个带有 o 描述性的错误
Operation is not supported on a new item or on a null URI.
我不知道为什么会这样,因为代码确实有效。这就是为什么我认为更改嵌入式模式的一个字段可能是罪魁祸首,但错误甚至在查找此特定字段之前就发生了。我的代码停止从 Embeddedschemafield 检索组件:
CM.Schema schema = (engine.GetObject(comp.GetAsSource().GetValue("ID")) as CM.Component).Schema;
ItemFields fields = new ItemFields(schema);
foreach (ItemField field in fields)
{
_log.Info("top level: " + field.Name);
if (field is EmbeddedSchemaField)
{
CM.Component c = (CM.Component)engine.GetObject(package.GetByName(Package.ComponentName));
_log.Info(" c = " + c + " content: " + c.Content + " schema: " + c.Schema);
ItemFields content = new ItemFields(c.Content, c.Schema);
EmbeddedSchemaField embeddedFields = (EmbeddedSchemaField)content[field.Name]; //boom
MultimediaLinkField mmValue = null;
ItemFields currentFields = null;
foreach (ItemFields embeddedField in embeddedFields.Values)
{
有人有想法吗?
这是我从模板生成器获得的日志:
GetComponentImageUrl: top level: name
GetComponentImageUrl: top level: division
GetComponentImageUrl: top level: theme
GetComponentImageUrl: top level: product
GetComponentImageUrl: field.Name = Embeddedschemafield
GetComponentImageUrl: c = Component tcm:11-1963 content: System.Xml.XmlElement schema: Schema tcm:11-1842-8
GetComponentImageUrl: c. Content = System.Xml.XmlElement
Engine: Error in Engine.Transform
Engine: Error in Engine.Transform
Operation is not supported on a new item or on a null URI.
at Tridion.ContentManager.Session.GetTcmUri(String uri)
at Tridion.ContentManager.Session.GetObject(String uri)
at Tridion.ContentManager.Session.GetObject(XmlElement linkElement)