C#TBBを使用して特定のカテゴリ内のすべてのキーワードを取得する方法


5

私のapp.configにカテゴリのTcm idがあります。私はすべてのキーワードはこのカテゴリ

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); 
    } 
    } 

に関連付けられている取得するコードの下に書いています私のC#のTBBでは、私はテンプレートBuilderでfollwingエラーを取得しています:

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() 
  0

あなたはすでにこれをチェックしましたか? http://stackoverflow.com/questions/12908803/how-to-get-the-keyword-from-category-name-in-c-sharp-tbb 17 12月. 152015-12-17 21:11:53

+3

このapp.configとは何ですか?それはコンテンツ配信側で実行しているアプリケーションの設定ファイルですか、それともC#TBB自体で使用しようとしているアプリケーション設定ですか? 18 12月. 152015-12-18 04:55:22

5

ここでは、コードが正常に見えるのでチェックするべきことはいくつかあります。パンカジがすでに疑われたよう

  • には、まずコード内で直接カテゴリIDを使用して、あなたのC#TBBは/アクセスを読み取ることができなくなり、いくつかの設定を使用している場合があります。
  • TBBをデバッグするには、ロギングを使用するか、テンプレートビルダプロセスTcmTemplateDebugHost.exeにローカルマシンまたはリモートデバッグのいずれかを使用してデバッグすることができます。
  • ここにいくつかの関連のものを参照してください:https://stackoverflow.com/questions/12210711/tridion-template-builder-and-visual-studio-debugging
  0

私はapp.configに頼っていました、それは私のテンプレートソリューションのアプリケーション構成ファイルです。これがcategoryIDがnullになっている理由です。私はapp.configから削除し、私のコードに直接割り当てました:string categoryID = "tcm:2033-3222-512";コードは今、私はXMLですべてのkeyqordsを得ています。ありがとう@PankajGaurこの手がかりについて - ちょうど1つのクエリは、テンプレート化ソリューションでいくつかの設定を追加したい場合、私はapp.configをtridionに配置する必要があります。 18 12月. 152015-12-18 08:27:15

+1

何らかの構成コンポーネントに格納し、パラメータスキーマを使用してテンプレートビルディングブロックをパラメータ化し、C#ビルディングブロックでパッケージにIDを作成し、ファイルシステム上の既知の場所にXMLファイルとして保存します。選択してください! 18 12月. 152015-12-18 09:22:02


4

使用のTemplate Builderは、あなたのコードをデバッグしますあなたのコマンドの間に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は空です。