È possibile impostare il valore di un campo di metadati dinamicamente da un TBB? Oppure è possibile aggiungere dinamicamente un campo di metadati che non esiste necessariamente su uno schema da un TBB?SDL Tridion 2011: riempire o aggiungere dinamicamente un campo di metadati utilizzando un C# TBB
Il motivo per cui voglio farlo è che sto usando DD4T e voglio che il breadcrumb venga aggiunto automaticamente nel file xml DD4T.
Ho provato quanto segue:
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));
}
Tuttavia, nessuno di questi metodi sembrano funzionare. È impossibile?
Credo che dipende da come DD4T legge i dati. Se stanno leggendo la pagina/componente dal pacchetto, allora dovrebbe funzionare. Se in realtà lo stanno caricando dal motore, ignorerà qualsiasi modifica apportata all'oggetto pacchetto. –
Buon punto Nuno. Guarderò la fonte di template DD4T per investigare. (Probabilmente hai notato che questo codice si basa sul tuo post sul blog: http://nunolinhares.blogspot.fr/2012/01/its-little-things-creating-page.html, grazie per questo) –