From deb5141feb9b5e75501b266fdc899690fd8fa5c9 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 20 Jan 2020 23:26:31 +0000 Subject: [PATCH] --- server/AyaNova/biz/WidgetBiz.cs | 39 ++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/server/AyaNova/biz/WidgetBiz.cs b/server/AyaNova/biz/WidgetBiz.cs index e6e0e69d..e4f23cc4 100644 --- a/server/AyaNova/biz/WidgetBiz.cs +++ b/server/AyaNova/biz/WidgetBiz.cs @@ -416,6 +416,26 @@ namespace AyaNova.Biz var AyaObjectFields = AyaObjectFieldDefinitions.AyaObjectFields(AyaObjectFieldDefinitions.TEST_WIDGET_USER_EMAIL_ADDRESS_LIST_KEY); + + //TODO: PUt this in the template biz class ultimately and modify sqlselectbuilder to use it + + //PARSE THE TEMPLATE INTO A STRING ARRAY + //SO WE KNOW WHICH FIELDS TO RETURN FROM QUERY + var jtemplate = JObject.Parse(MOCK_WIDGET_USER_EMAIL_DISPLAY_TEMPLATE_JSON); + + //convert to strings array (https://stackoverflow.com/a/33836599/8939) + string[] templateFieldList; + if (listOptions.Mini) + { + templateFieldList = ((JArray)jtemplate["mini"]).ToObject(); + } + else + { + templateFieldList = ((JArray)jtemplate["full"]).ToObject(); + } + //manually add the default field + templateFieldList.Prepend("df"); + //BUILD THE QUERY /* Select awidget.id, awidget.name, auser.name, auser.id, auseroptions.emailaddress @@ -468,10 +488,10 @@ namespace AyaNova.Biz //RETURN OBJECTS - int returnRowCount = AyaObjectFields.Count(); + int returnRowColumnCount = templateFieldList.Count();//AyaObjectFields.Count(); List> rows = new List>(); long totalRecordCount = 0; - + //RUN THE QUERY using (var command = ct.Database.GetDbConnection().CreateCommand()) @@ -485,11 +505,11 @@ namespace AyaNova.Biz { while (dr.Read()) { - List row = new List(returnRowCount); + List row = new List(returnRowColumnCount); //GetOrdinal is flakey in npgsql so just going by field definition and ordinal numerically - int nCurrentColumnPointer=0; + int nCurrentColumnPointer = 0; //flag to handle first column which has no display value, just an id instead - bool isFirstDFColumn=true; + bool isFirstDFColumn = true; //Iterate object fields, build return row list as required //WAIT A SECOND, this is not correct, we are meant to return the template fields only, not all the fields in the objectfieldefinition which is a superset of the template @@ -498,11 +518,14 @@ namespace AyaNova.Biz //See the select builder, IIRC it already does select only the fields required, it's probably just this block of code below that needs adapting //INSERT INTO THE RETURN ROWS LIST - foreach (AyaObjectFieldDefinition f in AyaObjectFields) + foreach (string TemplateField in templateFieldList) { + //get the AyaObjectFieldDefinition + AyaObjectFieldDefinition f = AyaObjectFields.FirstOrDefault(x => x.FieldKey == TemplateField); + AyaFieldData AyaField = new AyaFieldData(); AyaField.v = dr.GetValue(nCurrentColumnPointer); - + nCurrentColumnPointer++; if (!isFirstDFColumn && f.SqlIdColumnName != null)//skip over df column id, it's not there { @@ -510,7 +533,7 @@ namespace AyaNova.Biz nCurrentColumnPointer++; } - isFirstDFColumn=false; + isFirstDFColumn = false; row.Add(AyaField); } rows.Add(row);