<pre class='dw-error'>Error executing template "Designs/Swift/_parsed/Swift_Sitemap.xml_custom.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at Dynamicweb.Ecommerce.Products.GroupRelation.GetGroupRelationsByParentId(String theParentId)
   at Dynamicweb.Ecommerce.Products.GroupService.GetSubgroups(Group group, Boolean showUnTranslated)
   at Dynamicweb.Ecommerce.Products.GroupService.HasSubgroups(Group group)
   at CompiledRazorTemplates.Dynamic.RazorEngine_34c0c7a49c2f420ab4adca885e5b37fb.&lt;&gt;c.&lt;RenderEcommerceProductNodes&gt;b__3_2(Group g) in D:\Solution\BKI LIVE\Files\Templates\Designs\Swift\_parsed\Swift_Sitemap.xml_custom.parsed.cshtml:line 144
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
   at CompiledRazorTemplates.Dynamic.RazorEngine_34c0c7a49c2f420ab4adca885e5b37fb.&lt;&gt;c__DisplayClass3_0.&lt;RenderEcommerceProductNodes&gt;b__0(TextWriter __razor_helper_writer) in D:\Solution\BKI LIVE\Files\Templates\Designs\Swift\_parsed\Swift_Sitemap.xml_custom.parsed.cshtml:line 144
   at CompiledRazorTemplates.Dynamic.RazorEngine_34c0c7a49c2f420ab4adca885e5b37fb.&lt;&gt;c__DisplayClass2_0.&lt;RenderEcommerceGroupNodes&gt;b__0(TextWriter __razor_helper_writer) in D:\Solution\BKI LIVE\Files\Templates\Designs\Swift\_parsed\Swift_Sitemap.xml_custom.parsed.cshtml:line 122
   at CompiledRazorTemplates.Dynamic.RazorEngine_34c0c7a49c2f420ab4adca885e5b37fb.&lt;&gt;c__DisplayClass2_0.&lt;RenderEcommerceGroupNodes&gt;b__0(TextWriter __razor_helper_writer) in D:\Solution\BKI LIVE\Files\Templates\Designs\Swift\_parsed\Swift_Sitemap.xml_custom.parsed.cshtml:line 123
   at CompiledRazorTemplates.Dynamic.RazorEngine_34c0c7a49c2f420ab4adca885e5b37fb.&lt;&gt;c__DisplayClass2_0.&lt;RenderEcommerceGroupNodes&gt;b__0(TextWriter __razor_helper_writer) in D:\Solution\BKI LIVE\Files\Templates\Designs\Swift\_parsed\Swift_Sitemap.xml_custom.parsed.cshtml:line 123
   at CompiledRazorTemplates.Dynamic.RazorEngine_34c0c7a49c2f420ab4adca885e5b37fb.&lt;&gt;c__DisplayClass1_0.&lt;RenderNode&gt;b__0(TextWriter __razor_helper_writer) in D:\Solution\BKI LIVE\Files\Templates\Designs\Swift\_parsed\Swift_Sitemap.xml_custom.parsed.cshtml:line 86
   at CompiledRazorTemplates.Dynamic.RazorEngine_34c0c7a49c2f420ab4adca885e5b37fb.&lt;&gt;c__DisplayClass0_0.&lt;RenderNodes&gt;b__0(TextWriter __razor_helper_writer) in D:\Solution\BKI LIVE\Files\Templates\Designs\Swift\_parsed\Swift_Sitemap.xml_custom.parsed.cshtml:line 54
   at CompiledRazorTemplates.Dynamic.RazorEngine_34c0c7a49c2f420ab4adca885e5b37fb.Execute() in D:\Solution\BKI LIVE\Files\Templates\Designs\Swift\_parsed\Swift_Sitemap.xml_custom.parsed.cshtml:line 46
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.&lt;&gt;c__DisplayClass16_0.&lt;RunCompile&gt;b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()
<hr/>
<div class='template-code'>
<span class='line-number'>  1</span>     @inherits Dynamicweb.Rendering.ViewModelTemplate&lt;Dynamicweb.Frontend.PageViewModel&gt;
<span class='line-number'>  2</span>     @using System;
<span class='line-number'>  3</span>     @using System.Collections.Generic;
<span class='line-number'>  4</span>     @using System.Linq;
<span class='line-number'>  5</span>     @using Dynamicweb.Ecommerce.Products;
<span class='line-number'>  6</span>     @using Dynamicweb.Frontend.Navigation;
<span class='line-number'>  7</span>     
<span class='line-number'>  8</span>     @{
<span class='line-number'>  9</span>     	var masterArea = Pageview.Area;
<span class='line-number'> 10</span>     	if (Pageview.Area.IsLanguage)
<span class='line-number'> 11</span>     	{
<span class='line-number'> 12</span>     		masterArea = Pageview.Area.MasterArea;
<span class='line-number'> 13</span>     	}
<span class='line-number'> 14</span>     
<span class='line-number'> 15</span>     	List&lt;int&gt; masterWebsiteAndLanguages = new List&lt;int&gt;();
<span class='line-number'> 16</span>     	masterWebsiteAndLanguages.Add(masterArea.ID);
<span class='line-number'> 17</span>     	if (masterArea.Languages is object &amp;&amp; masterArea.Languages.Any())
<span class='line-number'> 18</span>     	{
<span class='line-number'> 19</span>     		foreach (var language in masterArea.Languages)
<span class='line-number'> 20</span>     		{
<span class='line-number'> 21</span>     			masterWebsiteAndLanguages.Add(language.ID);
<span class='line-number'> 22</span>     		}
<span class='line-number'> 23</span>     	}
<span class='line-number'> 24</span>     
<span class='line-number'> 25</span>     
<span class='line-number'> 26</span>     	string hostname = Dynamicweb.Context.Current.Request.Url.GetLeftPart(UriPartial.Authority);
<span class='line-number'> 27</span>     	List&lt;NavigationTreeNodeViewModel&gt; allWebsiteAndLanguageNodes = new List&lt;NavigationTreeNodeViewModel&gt;();
<span class='line-number'> 28</span>     
<span class='line-number'> 29</span>     	foreach (int areaid in masterWebsiteAndLanguages)
<span class='line-number'> 30</span>     	{
<span class='line-number'> 31</span>     		var navigationSettingsMain = new Dynamicweb.Frontend.Navigation.NavigationSettings()
<span class='line-number'> 32</span>     		{
<span class='line-number'> 33</span>     			StartLevel = 1,
<span class='line-number'> 34</span>     			StopLevel = 10,
<span class='line-number'> 35</span>     			RootAreaId = areaid,
<span class='line-number'> 36</span>     			IncludeFoldersAndHidden = true,
<span class='line-number'> 37</span>     			ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All
<span class='line-number'> 38</span>     		};
<span class='line-number'> 39</span>     
<span class='line-number'> 40</span>     		allWebsiteAndLanguageNodes.AddRange(GetNavigation(navigationSettingsMain)?.Nodes);
<span class='line-number'> 41</span>     	}
<span class='line-number'> 42</span>     }
<span class='line-number'> 43</span>     &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
<span class='line-number'> 44</span>     &lt;urlset xmlns=&quot;http://www.sitemaps.org/schemas/sitemap/0.9&quot;&gt;
<span class='line-number'> 45</span>     
<span class='line-number'> 46</span>     	@{ @RenderNodes(allWebsiteAndLanguageNodes, hostname) }
<span class='line-number'> 47</span>     
<span class='line-number'> 48</span>     &lt;/urlset&gt;
<span class='line-number'> 49</span>     
<span class='line-number'> 50</span>     @helper RenderNodes(IEnumerable&lt;NavigationTreeNodeViewModel&gt; nodes, string hostname)
<span class='line-number'> 51</span>     {
<span class='line-number'> 52</span>     	foreach (NavigationTreeNodeViewModel node in nodes)
<span class='line-number'> 53</span>     	{
<span class='line-number'> 54</span>     		@RenderNode(node, hostname)
<span class='line-number'> 55</span>     
<span class='line-number'> 56</span>     	}
<span class='line-number'> 57</span>     }
<span class='line-number'> 58</span>     
<span class='line-number'> 59</span>     @helper RenderNode(NavigationTreeNodeViewModel node, string hostname)
<span class='line-number'> 60</span>     {
<span class='line-number'> 61</span>     	var page = Dynamicweb.Content.Services.Pages.GetPage(node.PageId);
<span class='line-number'> 62</span>     
<span class='line-number'> 63</span>     	bool isEcommerceNavigation = false;
<span class='line-number'> 64</span>     	string navsettings = string.Empty;
<span class='line-number'> 65</span>     	if (page.NavigationSettings != null &amp;&amp; page.NavigationSettings.UseEcomGroups)
<span class='line-number'> 66</span>     	{
<span class='line-number'> 67</span>     		isEcommerceNavigation = true;
<span class='line-number'> 68</span>     		navsettings = page.NavigationSettings.Groups;
<span class='line-number'> 69</span>     	}
<span class='line-number'> 70</span>     
<span class='line-number'> 71</span>     	if (isEcommerceNavigation)
<span class='line-number'> 72</span>     	{
<span class='line-number'> 73</span>     		if (page.Allowclick &amp;&amp; page.ShowInSitemap &amp;&amp; !page.Noindex)
<span class='line-number'> 74</span>     		{
<span class='line-number'> 75</span>     			var productPageid = node.PageId;
<span class='line-number'> 76</span>     			if (!string.IsNullOrEmpty(page.NavigationSettings.ProductPage))
<span class='line-number'> 77</span>     			{
<span class='line-number'> 78</span>     				productPageid = Dynamicweb.Environment.Helpers.LinkHelper.GetInternalPageId(page.NavigationSettings.ProductPage);
<span class='line-number'> 79</span>     			}
<span class='line-number'> 80</span>     			&lt;url&gt;
<span class='line-number'> 81</span>     				@*&lt;loc pageid=&quot;@node.PageId&quot; groups=&quot;@navsettings&quot;&gt;@hostname@node.Link&lt;/loc&gt;*@
<span class='line-number'> 82</span>     				&lt;loc&gt;@hostname@node.Link&lt;/loc&gt;
<span class='line-number'> 83</span>     				@*&lt;lastmod&gt;@page.Audit.LastModifiedAt.ToString(&quot;yyyy-MM-ddTHH:mm:sszzz&quot;)&lt;/lastmod&gt;*@
<span class='line-number'> 84</span>     			&lt;/url&gt;
<span class='line-number'> 85</span>     
<span class='line-number'> 86</span>     			@RenderEcommerceGroupNodes(GetGroupsBySettings(page.NavigationSettings), node, hostname, productPageid)
<span class='line-number'> 87</span>     		}
<span class='line-number'> 88</span>     	}
<span class='line-number'> 89</span>     	else
<span class='line-number'> 90</span>     	{
<span class='line-number'> 91</span>     		if (page.Allowclick &amp;&amp; page.ShowInSitemap &amp;&amp; !page.Noindex)
<span class='line-number'> 92</span>     		{
<span class='line-number'> 93</span>     			&lt;url&gt;
<span class='line-number'> 94</span>     				&lt;loc&gt;@hostname@node.Link&lt;/loc&gt;
<span class='line-number'> 95</span>     				@*&lt;lastmod&gt;@page.Audit.LastModifiedAt.ToString(&quot;yyyy-MM-ddTHH:mm:sszzz&quot;)&lt;/lastmod&gt;*@
<span class='line-number'> 96</span>     			&lt;/url&gt;
<span class='line-number'> 97</span>     		}
<span class='line-number'> 98</span>     		if (node.Nodes.Any())
<span class='line-number'> 99</span>     		{
<span class='line-number'>100</span>     			@RenderNodes(node.Nodes, hostname)
<span class='line-number'>101</span>     		}
<span class='line-number'>102</span>     	}
<span class='line-number'>103</span>     }
<span class='line-number'>104</span>     
<span class='line-number'>105</span>     @helper RenderEcommerceGroupNodes(IEnumerable&lt;Dynamicweb.Ecommerce.Products.Group&gt; groups, NavigationTreeNodeViewModel node, string hostname, int detailProductPageId)
<span class='line-number'>106</span>     {
<span class='line-number'>107</span>     	foreach (Group group in groups)
<span class='line-number'>108</span>     	{
<span class='line-number'>109</span>     
<span class='line-number'>110</span>     		if (group.NavigationClickable &amp;&amp; group.NavigationShowInSiteMap)
<span class='line-number'>111</span>     		{
<span class='line-number'>112</span>     			//Remember to check if this group is not having another primary page
<span class='line-number'>113</span>     			//Remember to check if this group does not have multiple parents - and if it has, decide if the group should be shown here
<span class='line-number'>114</span>     			//int primarypageid = group.Meta.PrimaryPageId; //Use this if needed - send it into the product
<span class='line-number'>115</span>     			string url = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(&quot;Default.aspx?ID=&quot; + node.PageId + &quot;&amp;GroupID=&quot; + group.IdUrlEncoded);
<span class='line-number'>116</span>     
<span class='line-number'>117</span>     			&lt;url&gt;
<span class='line-number'>118</span>     				@*&lt;loc pageid=&quot;@node.PageId&quot; groupid=&quot;@group.Id&quot; group=&quot;@Dynamicweb.Core.Encoders.HtmlEncoder.HtmlEncode(group.Name)&quot;&gt;@hostname@url&lt;/loc&gt;*@
<span class='line-number'>119</span>     				&lt;loc&gt;@hostname@url&lt;/loc&gt;
<span class='line-number'>120</span>     			&lt;/url&gt;
<span class='line-number'>121</span>     		}
<span class='line-number'>122</span>     		@RenderEcommerceProductNodes(Dynamicweb.Ecommerce.Services.Products.GetProductsByGroupId(group.Id, true, group.LanguageId, false), node, hostname, group, detailProductPageId)
<span class='line-number'>123</span>     		@RenderEcommerceGroupNodes(group.Subgroups, node, hostname, detailProductPageId)
<span class='line-number'>124</span>     
<span class='line-number'>125</span>     	}
<span class='line-number'>126</span>     }
<span class='line-number'>127</span>     
<span class='line-number'>128</span>     @helper RenderEcommerceProductNodes(IEnumerable&lt;Dynamicweb.Ecommerce.Products.Product&gt; products, NavigationTreeNodeViewModel node, string hostname, Group group, int detailProductPageId)
<span class='line-number'>129</span>     {
<span class='line-number'>130</span>     	//Locate the right pageid. This group is shown on a page that might link to another page to show product detail. So on this page, find the paragraph, lookup the setting, change pageid to the detail page.
<span class='line-number'>131</span>     	//The product might be in 2 groups - ensure this is the primary or default group of the product - if not, do not render
<span class='line-number'>132</span>     	string shopId = Pageview.Area.EcomShopId;
<span class='line-number'>133</span>     	if (Pageview.User == null)
<span class='line-number'>134</span>     	{
<span class='line-number'>135</span>     		string anonymousShopId = S_DW_BKI_Swift.CustomModules.Helpers.CustomSettingsHelper.GetSetting&lt;string&gt;(&quot;AnonymousShopId&quot;);
<span class='line-number'>136</span>     		if (!string.IsNullOrEmpty(anonymousShopId))
<span class='line-number'>137</span>     		{
<span class='line-number'>138</span>     			shopId = anonymousShopId;
<span class='line-number'>139</span>     		}
<span class='line-number'>140</span>     	}
<span class='line-number'>141</span>     	foreach (Product product in products)
<span class='line-number'>142</span>     	{
<span class='line-number'>143</span>     		var productGroups = product.Groups.Where(g =&gt; g.ShopId == shopId);
<span class='line-number'>144</span>     		Group defaultGroup = productGroups.Where(g =&gt; !Dynamicweb.Ecommerce.Services.ProductGroups.HasSubgroups(g)).FirstOrDefault();
<span class='line-number'>145</span>     		defaultGroup = defaultGroup ?? productGroups.FirstOrDefault();
<span class='line-number'>146</span>     
<span class='line-number'>147</span>     		string productCanonical = S_DW_BKI_Swift.CustomModules.Helpers.ProductHelper.GetProductCanonicalUrl(product, detailProductPageId, Pageview.Area.EcomLanguageId, shopId);
<span class='line-number'>148</span>     
<span class='line-number'>149</span>     		if (defaultGroup == null)
<span class='line-number'>150</span>     		{
<span class='line-number'>151</span>     			continue;
<span class='line-number'>152</span>     		}
<span class='line-number'>153</span>     		string url = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(&quot;Default.aspx?ID=&quot; + detailProductPageId + &quot;&amp;GroupID=&quot; + group.IdUrlEncoded + &quot;&amp;ProductID=&quot; + product.Id);
<span class='line-number'>154</span>     		if (string.Equals(url, productCanonical))
<span class='line-number'>155</span>     		{
<span class='line-number'>156</span>     			&lt;url&gt;
<span class='line-number'>157</span>     				&lt;loc&gt;@hostname@url&lt;/loc&gt;
<span class='line-number'>158</span>     			&lt;/url&gt;
<span class='line-number'>159</span>     		}
<span class='line-number'>160</span>     	}
<span class='line-number'>161</span>     }
<span class='line-number'>162</span>     
<span class='line-number'>163</span>     @functions{
<span class='line-number'>164</span>     
<span class='line-number'>165</span>     	public IEnumerable&lt;Dynamicweb.Ecommerce.Products.Group&gt; GetGroupsBySettings(Dynamicweb.Content.PageNavigationSettings ecomSettings)
<span class='line-number'>166</span>     	{
<span class='line-number'>167</span>     		IEnumerable&lt;Dynamicweb.Ecommerce.Products.Group&gt; topLevelGroups;
<span class='line-number'>168</span>     
<span class='line-number'>169</span>     		string languageId = Dynamicweb.Ecommerce.Common.Context.LanguageID;
<span class='line-number'>170</span>     		switch (ecomSettings.ParentType)
<span class='line-number'>171</span>     		{
<span class='line-number'>172</span>     			case Dynamicweb.Content.EcommerceNavigationParentType.Groups:
<span class='line-number'>173</span>     				{
<span class='line-number'>174</span>     					Dynamicweb.Ecommerce.Extensibility.Controls.ProductsAndGroupsHandler groupHandler = new Dynamicweb.Ecommerce.Extensibility.Controls.ProductsAndGroupsHandler(ecomSettings.Groups);
<span class='line-number'>175</span>     					if (groupHandler.Type == Dynamicweb.Ecommerce.Extensibility.Controls.HandlerConfigurationType.All)
<span class='line-number'>176</span>     					{
<span class='line-number'>177</span>     						Dynamicweb.Ecommerce.Shops.Shop shop = Dynamicweb.Ecommerce.Services.Shops.GetShop(string.IsNullOrEmpty(groupHandler.ShopSelected) ? ecomSettings.ShopID : groupHandler.ShopSelected);
<span class='line-number'>178</span>     						if (shop == null)
<span class='line-number'>179</span>     							topLevelGroups = Enumerable.Empty&lt;Dynamicweb.Ecommerce.Products.Group&gt;();
<span class='line-number'>180</span>     						else
<span class='line-number'>181</span>     							topLevelGroups = shop.get_TopLevelGroups(languageId);
<span class='line-number'>182</span>     					}
<span class='line-number'>183</span>     					else
<span class='line-number'>184</span>     						topLevelGroups = groupHandler.GroupsSelected;
<span class='line-number'>185</span>     					break;
<span class='line-number'>186</span>     				}
<span class='line-number'>187</span>     
<span class='line-number'>188</span>     			case Dynamicweb.Content.EcommerceNavigationParentType.Shop:
<span class='line-number'>189</span>     				{
<span class='line-number'>190</span>     					Dynamicweb.Ecommerce.Shops.Shop shop = Dynamicweb.Ecommerce.Services.Shops.GetShop(ecomSettings.ShopID);
<span class='line-number'>191</span>     					if (shop == null)
<span class='line-number'>192</span>     						topLevelGroups = Enumerable.Empty&lt;Dynamicweb.Ecommerce.Products.Group&gt;();
<span class='line-number'>193</span>     					else
<span class='line-number'>194</span>     						topLevelGroups = shop.get_TopLevelGroups(languageId);
<span class='line-number'>195</span>     					break;
<span class='line-number'>196</span>     				}
<span class='line-number'>197</span>     
<span class='line-number'>198</span>     			default:
<span class='line-number'>199</span>     				{
<span class='line-number'>200</span>     					topLevelGroups = Enumerable.Empty&lt;Dynamicweb.Ecommerce.Products.Group&gt;();
<span class='line-number'>201</span>     					break;
<span class='line-number'>202</span>     				}
<span class='line-number'>203</span>     		}
<span class='line-number'>204</span>     
<span class='line-number'>205</span>     		return topLevelGroups;
<span class='line-number'>206</span>     	}
<span class='line-number'>207</span>     
<span class='line-number'>208</span>     }
<span class='line-number'>209</span>     
</div>
</pre>
