Error executing template "Designs/Publications/Paragraph/ProductTable/PartsTable.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_dc0c26542ddd451c9954650c9cbb3ca3.ExecuteAsync()
at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel>
2 @using Dynamicweb.Ecommerce.ProductCatalog
3 @using Industrilas.Data.Helpers
4
5 @{
6 ProductViewModel? product = null;
7
8 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails"))
9 {
10 product = (ProductViewModel?)Dynamicweb.Context.Current.Items["ProductDetails"];
11 }
12
13 if (product is object && product.VariantGroups().Count == 0)
14 {
15 Dynamicweb.Ecommerce.ProductCategoryFieldService productCategoryFieldService = new Dynamicweb.Ecommerce.ProductCategoryFieldService();
16
17 var loopMod = 1;
18 var parts = product.ProductCategories.Where(c => c.Key == "IndustrilasVariantfalt").FirstOrDefault();
19 var translation = new Industrilas.Data.Business.Translation();
20 var pattern = product.ProductFields["ProductNumberPattern"].Value;
21
22 <section>
23 <table class="sheet-product-propertytable">
24 <tr>
25 @foreach (var field in parts.Value.Fields)
26 {
27 var fieldValue = field.Value.Name;
28 fieldValue = (fieldValue as string) == "False" ? Translate("No") : fieldValue;
29 fieldValue = (fieldValue as string) == "True" ? Translate("Yes") : fieldValue;
30 var tdClass = $"sheet-product-propertytable-column-cell{loopMod % 2}";
31 var tableClass = $"sheet-product-fields-column{loopMod % 2}";
32 if (fieldValue != null && fieldValue.ToString() != "")
33 {
34 <td class="@tdClass">
35
36 @if (Convert.ToString(fieldValue).Contains("("))
37 {
38
39 var separator = new string[] { ")", "(" };
40 var valueSeparator = new string[] { "),(" };
41 var columnHeaders = field.Value.Name.Split(separator, StringSplitOptions.RemoveEmptyEntries);
42 //var optionLabels = optionLabel.Split(valueSeparator, StringSplitOptions.RemoveEmptyEntries);
43 //var tableClass = $"propertytable-column-column{tableClass}";
44
45 <table class="@tableClass">
46 <thead>
47 <tr>
48 @foreach (var header in columnHeaders)
49 {
50 <td class="ilas-table-header">
51 @translation.GetTranslation(header, false)
52 </td>
53 }
54 </tr>
55 </thead>
56
57 <tbody>
58
59 @{
60 /* GetList() returns nothing when the field holds a
61 single selected option, which left single-option
62 columns (AAAA, DD, FF, GG ...) empty in the PDF.
63 Fall back to enumerating field.Value directly. */
64 var optionRows = new List<Dynamicweb.Ecommerce.ProductCatalog.FieldOptionValueViewModel>();
65 var listedOptions = field.Value.GetList();
66
67 if (listedOptions != null && listedOptions.Any())
68 {
69 optionRows.AddRange(listedOptions);
70 }
71 else if (field.Value.Value is System.Collections.IEnumerable rawOptions && !(field.Value.Value is string))
72 {
73 foreach (var rawOption in rawOptions)
74 {
75 if (rawOption is Dynamicweb.Ecommerce.ProductCatalog.FieldOptionValueViewModel optionViewModel)
76 {
77 optionRows.Add(optionViewModel);
78 }
79 }
80 }
81 }
82
83 @foreach (var optionLabelValue in optionRows)
84 {
85
86 var optionLabelColumns = optionLabelValue.Name.Split(separator, StringSplitOptions.RemoveEmptyEntries);
87 <tr>
88 @foreach (var optionLabelColumn in optionLabelColumns)
89 {
90 var optionValue = string.Empty;
91
92 if (TextFunctions.IsNumeric(optionLabelColumn))
93 {
94 optionValue = optionLabelColumn;
95 }
96 else
97 {
98 optionValue = translation.GetTranslation(optionLabelColumn, false);
99 }
100 <td>@optionValue</td>
101 }
102 </tr>
103 }
104 </tbody>
105 </table>
106 }
107 else
108 {
109 <div>@field.Value.Name</div>
110 <div>@field.Key</div>
111 <div>@field.Value.Value.ToString()</div>
112 }
113 </td>
114 }
115
116 loopMod++;
117 }
118 </tr>
119 </table>
120 </section>
121 }
122 }