Hierarchal taxonomy creation and sub category
Hey guys,
I'm currently trying to create categories and sub categories from Visual Studio. My approach to this would have been registering a Custom widget through the site and well I'm using my .cs file with my code behind to create the categories. In reading through the development guide that was there and even used it in my code and it didn't work. Reference:- http://www.sitefinity.com/40/help/developer-manual/taxonomies-hierarchical-taxonomy-hierarchical-taxonomy-api.html
Its on a button click of a page the page that has the widget. My code is below here.
private
void
SampleCode()
//Create a new hierarhical taxonomy using the TaxonomyManager class
TaxonomyManager manager = TaxonomyManager.GetManager();
var tax = manager.CreateTaxonomy<HierarchicalTaxonomy>();
tax.Name =
"News"
;
tax.TaxonName =
"News"
;
tax.Title =
"News"
;
tax.Description =
"Taxonomy which will classify the news on our web site"
;
//Create a new taxon and add it to the taxonomy - Europe News
var rootTaxonNews = manager.CreateTaxon<HierarchicalTaxon>();
rootTaxonNews.Title =
"From Europe"
;
rootTaxonNews.Name =
"European News"
;
rootTaxonNews.Description =
"This category holds the news from Europe"
;
tax.Taxa.Add(rootTaxonNews);
//Create two sub-taxa and add them to the European News taxon.
//1
var taxon1 = manager.CreateTaxon<HierarchicalTaxon>();
taxon1.Title =
"Politics"
;
rootTaxonNews.Name =
"Politics"
;
taxon1.Description =
"This category holds the Politics news"
;
rootTaxonNews.Subtaxa.Add(taxon1);
////2
//var taxon2 = manager.CreateTaxon<HierarchicalTaxon>();
//taxon2.Title = "Entertainment";
//taxon2.Name = "Entertainment";
//taxon2.Description = "This category holds the Entertainment news";
//rootTaxonNews.Subtaxa.Add(taxon2);
//Create a new taxon and add it to the taxonomy - US News
var rootTaxonUSNews = manager.CreateTaxon<HierarchicalTaxon>();
rootTaxonUSNews.Title =
"From USA"
;
rootTaxonUSNews.Name =
"USA News"
;
rootTaxonUSNews.Description =
"This category holds the news from USA"
;
tax.Taxa.Add(rootTaxonUSNews);
//Save all changes done up to now.
manager.SaveChanges();
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 189: tax.Taxa.Add(rootTaxonUSNews); Line 190: //Save all changes done up to now. Line 191: manager.SaveChanges(); Line 192: Line 193: |
Source File: C:\Program Files (x86)\Telerik\Sitefinity 4.0\Projects\CopperSparrow\Custom\Widget\ImportDataSitefinity.ascx.cs Line: 191
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.] Telerik.Sitefinity.Security.AuthorizationPermissionProvider.AuthorizeInput(IMethodInvocation input) +3234 Telerik.Sitefinity.Security.SitefinityAuthorizationCallHandler.Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext) +274 Telerik.Microsoft.Practices.Unity.InterceptionExtension.HandlerPipeline.Invoke(IMethodInvocation input, InvokeHandlerDelegate target) +221 Telerik.Microsoft.Practices.Unity.InterceptionExtension.PolicyInjectionBehavior.Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext) +199 Telerik.Microsoft.Practices.Unity.InterceptionExtension.InterceptionBehaviorPipeline.Invoke(IMethodInvocation input, InvokeInterceptionBehaviorDelegate target) +221 DynamicModule.ns.Wrapped_OpenAccessTaxonomyProvider_6a25c2a10f38416f837755f51419943b.CommitTransaction() +181 Telerik.Sitefinity.Data.ManagerBase`1.SaveChanges() +137 SitefinityWebApp.Custom.Widget.ImportDataSitefinity.SampleCode() in C:\Program Files (x86)\Telerik\Sitefinity 4.0\Projects\CopperSparrow\Custom\Widget\ImportDataSitefinity.ascx.cs:191 SitefinityWebApp.Custom.Widget.ImportDataSitefinity.Execute_Click(Object sender, EventArgs e) in C:\Program Files (x86)\Telerik\Sitefinity 4.0\Projects\CopperSparrow\Custom\Widget\ImportDataSitefinity.ascx.cs:100 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563 |
Hello Jesse,
You need to set Taxonomy property of the taxons:
private
void
SampleCode()
//Create a new hierarhical taxonomy using the TaxonomyManager class
TaxonomyManager manager = TaxonomyManager.GetManager();
var tax = manager.CreateTaxonomy<HierarchicalTaxonomy>();
tax.Name =
"News"
;
tax.TaxonName =
"News"
;
tax.Title =
"News"
;
tax.Description =
"Taxonomy which will classify the news on our web site"
;
//Create a new taxon and add it to the taxonomy - Europe News
var rootTaxonNews = manager.CreateTaxon<HierarchicalTaxon>();
rootTaxonNews.Title =
"From Europe"
;
rootTaxonNews.Name =
"European News"
;
rootTaxonNews.Description =
"This category holds the news from Europe"
;
rootTaxonNews.Taxonomy = tax;
tax.Taxa.Add(rootTaxonNews);
//Create two sub-taxa and add them to the European News taxon.
//1
var taxon1 = manager.CreateTaxon<HierarchicalTaxon>();
taxon1.Title =
"Politics"
;
rootTaxonNews.Name =
"Politics"
;
taxon1.Description =
"This category holds the Politics news"
;
taxon1.Taxonomy = tax;
rootTaxonNews.Subtaxa.Add(taxon1);
////2
//var taxon2 = manager.CreateTaxon<HierarchicalTaxon>();
//taxon2.Title = "Entertainment";
//taxon2.Name = "Entertainment";
//taxon2.Description = "This category holds the Entertainment news";
//rootTaxonNews.Subtaxa.Add(taxon2);
//Create a new taxon and add it to the taxonomy - US News
var rootTaxonUSNews = manager.CreateTaxon<HierarchicalTaxon>();
rootTaxonUSNews.Title =
"From USA"
;
rootTaxonUSNews.Name =
"USA News"
;
rootTaxonUSNews.Description =
"This category holds the news from USA"
;
rootTaxonUSNews.Taxonomy = tax;
tax.Taxa.Add(rootTaxonUSNews);
//Save all changes done up to now.
manager.SaveChanges();
Hey Pepi,
Thanks for the response. I am able to create categories and sub-categories. It is working thanks again! I think you should include the lines that were missing in the development guide because it's missing there. Just a suggestion.
Hello Jess,
The Parent taxon of the sub-taxon is not set and most probably that causes the problem:
var taxon1 = manager.CreateTaxon<HierarchicalTaxon>();
taxon1.Title =
"Politics"
;
rootTaxonNews.Name =
"Politics"
;
taxon1.Description =
"This category holds the Politics news"
;
taxon1.Taxonomy = tax;
taxon1.Parent = rootTaxonNews;
rootTaxonNews.Subtaxa.Add(taxon1);
taxon.UrlName = Regex.Replace(name.ToLower(), UrlNameCharsToReplace, UrlNameReplaceString);
<<double post>>