gpt4 book ai didi

tridion - 从 .NET 中的 Embeddedschemafield 错误检索组件

转载 作者:行者123 更新时间:2023-12-02 15:25:39 25 4
gpt4 key购买 nike

我一直在开发 .NET C# TBB 以从架构中检索字段,该架构又会解析每个嵌入字段。我在模板中使用 Razor Mediator 来输出 JSON。我对 C# 和 .NET 非常陌生,因此我正在使用和引用我的同事在其他模板中编写的代码。TBB 的目标是在发布后检索这些嵌入字段之一中图像的确切 url ,并将其以纯文本形式推回到包中。

这最终似乎起作用了,直到我将嵌入模式的字段之一更改为多媒体链接。一旦我将 Embeddedschemafields 设置为循环,模板构建器就会出现错误,并带有 o so descriptive

Operation is not supported on a new item or on a null URI.

我不知道为什么会发生这种情况,因为代码实际上有效。这就是为什么我认为更改嵌入模式的字段之一可能是罪魁祸首,但即使在查找此特定字段之前也会发生错误。我的代码停止于从嵌入模式字段检索组件:

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)

最佳答案

我会执行以下操作:

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);

if (content != null && content.Contains(field.Name)) {
EmbeddedSchemaField embeddedFields = (EmbeddedSchemaField)content[field.Name]; //boom

MultimediaLinkField mmValue = null;

ItemFields currentFields = null;

foreach (ItemFields embeddedField in embeddedFields.Values)
{

请注意添加的检查,确保 ItemFields 对象已创建,并且它包含您要查找的字段。

关于tridion - 从 .NET 中的 Embeddedschemafield 错误检索组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11289817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com