Error executing template "Designs/Swift/Paragraph/CPQ_Card.cshtml" System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near the keyword 'and'. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) at Dynamicweb.Data.Database.CreateDataSet(IDbDataAdapter dataAdapter, Boolean withSchema) at Dynamicweb.Data.Database.CreateDataSet(String sql, IDbConnection connection, IDbTransaction transaction, Boolean withSchema, Dictionary`2 sqlParams) at Dynamicweb.Data.Database.CreateDataSet(String sql) at DW_CPQ_API.CPQCard..ctor(String modelversionid) at CompiledRazorTemplates.Dynamic.RazorEngine_cbf06e8b557e41918a5aa146c01e239d.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() ClientConnectionId:d07ad9ce-bc53-4a3c-9d8b-5b45360547f9 Error Number:156,State:1,Class:15
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Ecommerce.ProductCatalog 3 @using System 4 @using DW_CPQ_API 5 6 @{ 7 ModelController modelController = new ModelController(Model.PageID, Dynamicweb.Context.Current.Request.Params); // expected sales quote no 8 9 if(modelController!=null && string.IsNullOrEmpty( modelController.SalesQuoteNo)) 10 { 11 modelController.SalesQuoteNo="1144"; // to be removed later 12 } 13 14 System.Collections.Specialized.NameValueCollection? requestVars = Dynamicweb.Context.Current.Request.Params; 15 if(requestVars!=null && requestVars["quote"]!=null) 16 { 17 modelController.SalesQuoteNo=requestVars["quote"]!; 18 } 19 20 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? $"theme {Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower()}" : "alert-dark"; 21 22 var cpqPage = Dynamicweb.Content.Services.Pages.GetPage(Model.PageID); 23 string cpqTheme = cpqPage.Item["CPQ_Theme"]?.ToString() ?? "cpq-bold"; 24 25 string cardModelName = Pageview.Page.Item["CPQ_ModelVersionId"]?.ToString() ?? ""; 26 DW_CPQ_API.CPQCard card= new DW_CPQ_API.CPQCard(cardModelName); 27 28 string result=""; 29 if(requestVars!=null && requestVars["cardaction"]!=null && Dynamicweb.Context.Current.Request.HttpMethod == "POST") 30 { 31 if( requestVars["cardaction"].ToString()=="addcardtoquote") 32 { 33 34 string templateId=requestVars["templateId"]; 35 36 card.AddCardTempletetoQuote(modelController.SalesQuoteNo,templateId); 37 38 } 39 else if( requestVars["cardaction"].ToString()=="deletecarditem") 40 { 41 string itemdatakeyline=requestVars["itemdatakeyline"]; 42 CPQCard.DeleteCarditemInQuote(itemdatakeyline); 43 44 } 45 else if( requestVars["cardaction"].ToString()=="duplicatecarditem") 46 { 47 string itemdatakeyline=requestVars["itemdatakeyline"]; 48 CPQCard.DuplicateCarditemInQuote(itemdatakeyline); 49 50 } 51 else if( requestVars["cardaction"].ToString()=="createQuote") 52 { 53 result=CPQCard.CreateSalesQuoteFromCards(cardModelName,modelController.SalesQuoteNo); 54 } 55 56 Dynamicweb.Context.Current.Response.Redirect(Dynamicweb.Context.Current.Request.Url.AbsoluteUri); // to prevent resubmission when refreshing 57 return; 58 59 } 60 Dictionary<string,object> carditems =CPQCard.LoadCardItemsByQuote(cardModelName,modelController.SalesQuoteNo); 61 62 var targetPage = Dynamicweb.Content.Services.Pages 63 .GetPages() 64 .FirstOrDefault(p => 65 (p.NavigationTag?.Contains("cpqcustom") ?? false) && 66 (p.Item["CPQ_ModelVersionId"]?.ToString() ?? "") == cardModelName 67 ); 68 69 string editUrl = targetPage != null ? $"/Default.aspx?ID={targetPage.ID}" : "#"; 70 71 72 } 73 <script> 74 window.editUrl = "@editUrl"; 75 76 function addcardtolist(templateId) { 77 78 FormaddItem.templateId.value = templateId; 79 FormaddItem.submit(); 80 } 81 function editcarditem(keyline,pageid) { 82 Formedititem.itemdatakeyline.value = keyline; 83 Formedititem.action= "/Default.aspx?ID="+pageid; 84 Formedititem.submit(); 85 } 86 function deleteitem(keyline) { 87 FormdelItem.itemdatakeyline.value = keyline; 88 FormdelItem.submit(); 89 } 90 91 function duplicateitem(keyline) { 92 FormduplicateItem.itemdatakeyline.value = keyline; 93 FormduplicateItem.submit(); 94 } 95 96 function createSalesQuote() { 97 FormCreateQuote.submit(); 98 // to be implemented 99 } 100 </script> 101 102 @* need to be considered : 103 carditem's modelversionid can be different from cardtemplete's modelversionid or pageid's modelversion 104 our design is, here at cardtemplete user can combine manny carditems with different CPQ model (modelversionid) 105 *@ 106 107 <form name="FormaddItem" id="FormaddItem" method="post" action=""> 108 <input type="hidden" name="modelversionid" id="modelversionid" value="@(cardModelName)" /> 109 <input type="hidden" name="cardaction" id="cardaction" value="addcardtoquote" /> 110 <input type="hidden" name="salesQuoteNo" id="salesQuoteNo" value="@(modelController.SalesQuoteNo)" /> 111 <input type="hidden" name="templateId" id="templateId" value="" /> 112 </form> 113 <form name="FormduplicateItem" id="FormduplicateItem" method="post" action=""> 114 <input type="hidden" name="cardaction" id="cardaction" value="duplicatecarditem" /> 115 <input type="hidden" name="itemdatakeyline" id="itemdatakeyline" value="" /> 116 </form> 117 <form name="FormdelItem" id="FormdelItem" method="post" action=""> 118 <input type="hidden" name="cardaction" id="cardaction" value="deletecarditem" /> 119 <input type="hidden" name="itemdatakeyline" id="itemdatakeyline" value="" /> 120 </form> 121 <form name="Formedititem" id="Formedititem" method="post" action=""> 122 <input type="hidden" name="templatemodelversionid" id="modelversionid" value="@(cardModelName)" /> 123 <input type="hidden" name="pageid" id="pageid" value="" /> 124 <input type="hidden" name="cardaction" id="cardaction" value="editcarditem" /> 125 <input type="hidden" name="salesQuoteNo" id="salesQuoteNo" value="@(modelController.SalesQuoteNo)" /> 126 <input type="hidden" name="itemdatakeyline" id="itemdatakeyline" value="" /> 127 </form> 128 <form name="FormCreateQuote" id="FormCreateQuote" method="post" action=""> 129 <input type="hidden" name="modelversionid" id="modelversionid" value="@(cardModelName)" /> 130 <input type="hidden" name="cardaction" id="cardaction" value="createQuote" /> 131 <input type="hidden" name="quote" id="quote" value="@(modelController.SalesQuoteNo)" /> 132 133 </form> 134 <div class="container mt-3"> 135 @if( !string.IsNullOrEmpty(modelController.SalesQuoteNo) ) 136 { 137 <div class="action-bar"> 138 @foreach(var item in card.Cards) 139 { 140 <button class="action" onclick="addcardtolist('@(item.TemplateId)')"> 141 <span class="icon"> 142 @if(item.Image != null && item.Image != ""){ 143 <img src="@item.Image" width="50px" /> 144 } 145 </span> 146 <span class="label">+ @item.Name</span> 147 </button> 148 } 149 </div> 150 } 151 152 <div class="bc-list mb-3"> 153 @if (carditems == null || !carditems.Any()) 154 { 155 <div class="bc-empty list-group-item text-center text-muted no-item">No Item</div> 156 } 157 else 158 { 159 @foreach (var key in carditems.Keys.ToList()) 160 { 161 Dictionary<string,object> citem = (Dictionary<string,object>)carditems[key]; 162 string cpageid= citem.ContainsKey("pageid") ? citem["pageid"].ToString()! : ""; 163 string description= citem.ContainsKey("itemdescription") ? citem["itemdescription"].ToString()! : ""; 164 <div class="bc-row"> 165 <span class="cell desc">@key</span> 166 <span class="cell type">@description</span> 167 <span class="cell qty">qty</span> 168 <span class="cell code"><button onclick="editcarditem('@(key)','@(cpageid)')">Edit</button></span> 169 <span class="cell code"><button onclick="duplicateitem('@(key)')">Copy</button></span> 170 <span class="cell code"><button onclick="deleteitem('@(key)')">Delete</button></span> 171 </div> 172 } 173 } 174 </div> 175 176 <div class="ms-4 mt-8 text-end"> 177 @if( !string.IsNullOrEmpty(modelController.SalesQuoteLineNo) ) 178 { 179 <button class="me-4 btn al-button-primary" onclick="window.close()">Close</button> 180 } 181 else 182 { 183 <button class="me-4 btn al-button-primary" onclick="createSalesQuote()">Create Sales Quote</button> 184 <button class="me-4 btn al-button-primary" onclick="window.close()">Close</button> 185 } 186 </div> 187 </div>