如何使用C#TBB


5

获取特定类别中的所有关键字我的app.config中有类别的Tcm id。

Object reference not set to an instance of an object. 
at Tieto.Gadgets.Templating.GetKeywords.Transform(Engine engine, Package package) 
at Tridion.ContentManager.Templating.Assembly.AssemblyMediator.Transform(Engine engine, Template template, Package package) 
at Tridion.ContentManager.Templating.Assembly.CSharpSourceCodeMediator.RunTemplate(Engine engine, Package package, String templateUri, String className) 
at Tridion.Templating.CSharpTemplate.CSharpSourceTemplate.Transform(Engine __engine, Package __package) 
at Tridion.ContentManager.Templating.Assembly.CSharpSourceCodeMediator.Transform(Engine engine, Template template, Package package) 
at Tridion.ContentManager.Templating.Engine.ExecuteTemplate(Template template, Package package) 
at Tridion.ContentManager.Templating.Engine.InvokeTemplate(Package package, TemplateInvocation templateInvocation, Template template) 
at Tridion.ContentManager.Templating.Compound.CompoundTemplateMediator.Transform(Engine engine, Template templateToTransform, Package package) 
at Tridion.ContentManager.Templating.Engine.ExecuteTemplate(Template template, Package package) 
at Tridion.ContentManager.Templating.Engine.InvokeTemplate(Package package, TemplateInvocation templateInvocation, Template template) 
at Tridion.ContentManager.Templating.Engine.TransformItem(Template template, IdentifiableObject itemToRender) 
at Tridion.ContentManager.Templating.Debugging.DebuggingEngine.Run() 
at Tridion.ContentManager.Templating.Debugging.DebugSession.Run() 
+3

这是什么app.config?它是在Content Delivery端运行的应用程序的配置文件,还是您尝试包含并在C#TBB中使用的某个应用程序配置? 18 12月. 152015-12-18 04:55:22

5

这里有几件事你应该交叉检查,因为代码看起来很好。

  0

我依赖于app.config,这是我的模板解决方案应用程序配置文件。这就是categoryID变为空的原因。我从app.config中删除它,并直接在我的代码中指定它:string categoryID =“tcm:2033-3222-512”;代码现在工作正常,我得到所有keyqords在XML中。感谢@PankajGaur这个线索 - 现在只是一个查询,如果我想在我的模板解决方案中添加一些配置,我需要将我的app.config放在tridion中。 18 12月. 152015-12-18 08:27:15

+1

将其存储在某种配置组件中,使用参数模式参数化模板构建块,使用C#构建块在包中创建ID,将其存储在文件系统中已知位置的XML文件中。选择! 18 12月. 152015-12-18 09:22:02


4

使用模板生成器来调试代码:在我的C#TBB我写下面的代码来获得与该类别

public class GetKeywords : ITemplate 
    { 
    public void Transform(Engine engine, Package package) 
     { 
     string categoryID =ConfigurationManager.AppSettings["catgoryTcmUri"]; 

     Category cat = (Category)engine.GetObject(categoryID); 

     XmlDocument keywordsXml = new XmlDocument(); 
     keywordsXml.LoadXml(cat.GetListKeywords().OuterXml); 
     Item output = package.CreateXmlDocumentItem(ContentType.Xml, keywordsXml); 
     package.PushItem("CategoryKeywords", output); 
    } 
    } 

我得到的模板生成器follwing错误相关的所有关键字通过在命令之间添加TemplatingLogger行。

public class GetKeywords : ITemplate 
    { 

    TemplatingLogger log = TemplatingLogger.GetLogger(this.GetType()); 

    public void Transform(Engine engine, Package package) 
     { 
     string categoryID = ConfigurationManager.AppSettings["catgoryTcmUri"]; 

     log.Debug("categoryID: " + categoryID) 

     Category cat = (Category)engine.GetObject(categoryID); 

     XmlDocument keywordsXml = new XmlDocument(); 
     keywordsXml.LoadXml(cat.GetListKeywords().OuterXml); 
     Item output = package.CreateXmlDocumentItem(ContentType.Xml, keywordsXml); 
     package.PushItem("CategoryKeywords", output); 
    } 
    } 

当您运行具有C#TBB的组件模板或页面模板时,您提到可以准确定位引发错误的行。当你知道这条线时,这是你解决方案的90%。

PS。我不能确定,但​​可能categoryID是在你的情况下为空