Có thể đặt giá trị của trường siêu dữ liệu động từ TBB không? Hoặc là có thể tự động thêm một trường siêu dữ liệu không nhất thiết tồn tại trên một lược đồ từ một TBB?SDL Tridion 2011: Điền động hoặc thêm trường siêu dữ liệu bằng C# TBB
Lý do tôi muốn làm điều này là tôi đang sử dụng DD4T và tôi muốn có đường dẫn tự động được thêm vào DD4T xml.
Tôi đã thử những điều sau đây:
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));
}
Tuy nhiên, không ai trong số những phương pháp này có vẻ làm việc. Điều này là không thể?
Tôi đoán nó phụ thuộc vào cách DD4T đọc dữ liệu. Nếu họ đang đọc trang/thành phần từ gói, thì điều này sẽ có tác dụng. Nếu chúng thực sự đang tải nó từ Engine thì nó sẽ bỏ qua bất kỳ thay đổi nào bạn đã thực hiện đối với đối tượng gói. –
Điểm tốt Nuno. Tôi sẽ xem xét nguồn mẫu DD4T để điều tra. (Bạn có thể nhận thấy mã này dựa trên bài đăng blog của bạn: http://nunolinhares.blogspot.fr/2012/01/its-little-things-creating-page.html, cảm ơn điều đó) –