私は .NET C# TBB でスキーマからフィールドを取得する作業を行ってきました。これにより、すべての埋め込みフィールドが順に解析されます。テンプレートで Razor Mediator を使用して JSON を出力します。私は C# と .NET に非常に慣れていないため、同僚が他のテンプレートで記述したコードを使用および参照しています。TBB の目標は、公開後に、これらの埋め込みフィールドの 1 つに含まれる画像の正確な URL を取得することです。 、プレーンテキストとしてパッケージにプッシュバックします。
埋め込みスキーマのフィールドの 1 つをマルチメディアリンクに変更するまで、これは最終的に機能するように見えました。Embeddedschemafields をループスルーするように設定するとすぐに、テンプレート ビルダーは o 説明的なエラーを返します
Operation is not supported on a new item or on a null URI.
コードが実際に機能したため、なぜこれが起こっているのかわかりません。そのため、埋め込みスキーマのフィールドの 1 つを変更することが原因である可能性がありますが、この特定のフィールドを調べる前でもエラーが発生します。私のコードは、埋め込みスキーマフィールドからコンポーネントを取得することで停止します:
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)