TBBからメタデータフィールドの値を動的に設定することはできますか?または、TBBのスキーマに必ずしも存在しないメタデータフィールドを動的に追加することは可能ですか?SDL Tridion 2011:C#TBBを使用してメタデータフィールドを動的に入力または追加する
私はこれをやりたいのですが、私はDD4Tを使用しているので、ブレッドクラムを自動的にDD4T XMLに追加したいのです。
私は次のことを試してみました:
public override void Transform(Engine engine, Package package)
{
Initialize(engine,package);
var page = GetPage();
string output = page.OrganizationalItem.Title;
var parent = page.OrganizationalItem as StructureGroup;
while (parent != null)
{
output = GetLinkToStructureGroupIndexPage(parent) + Separator + output;
parent = parent.OrganizationalItem as StructureGroup;
}
// I tried this to dynamically add the field
//var metadata = page.Metadata.OwnerDocument.CreateElement("breadcrumb");
//metadata.InnerText = output;
//page.Metadata.AppendChild(metadata);
//I tried this to dynamically set an existing field on the schema
foreach (XmlNode xml in page.Metadata)
{
Log.Debug("Metadata field:" +xml.Name);
if(xml.Name == "breadcrumb")
{
xml.InnerText = output;
}
}
package.PushItem(Package.PageName, package.CreateTridionItem(ContentType.Page, page));
}
はしかし、これらの方法のいずれも動作するようです。これは不可能ですか?
私はそれがDD4Tがデータを読み込む方法によって異なりますね。彼らがパッケージからページ/コンポーネントを読んでいるなら、これはうまくいったはずです。実際にエンジンからロードしている場合、パッケージオブジェクトに加えた変更はすべて無視されます。 –
良い点ヌノ。 DD4Tのテンプレートソースを調べて調査します。 (あなたはおそらくこのコードがあなたのブログの投稿に基づいていることに気づいたでしょう:http://nunolinhares.blogspot.fr/2012/01/its-little-things-creating-page.html、それに感謝します) –