From aa0cfd2e13410abd0c6a1b539f153c2804392e75 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 13 Feb 2020 23:20:40 +0000 Subject: [PATCH] --- .../DataList/AyaDataListFieldDefinition.cs | 5 ++++ .../DataListSqlFilterCriteriaBuilder.cs | 30 +++++++++++++++++-- server/AyaNova/DataList/TestWidgetDataList.cs | 2 +- server/AyaNova/biz/UiFieldDataType.cs | 3 +- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/server/AyaNova/DataList/AyaDataListFieldDefinition.cs b/server/AyaNova/DataList/AyaDataListFieldDefinition.cs index d006d790..0111a222 100644 --- a/server/AyaNova/DataList/AyaDataListFieldDefinition.cs +++ b/server/AyaNova/DataList/AyaDataListFieldDefinition.cs @@ -66,5 +66,10 @@ namespace AyaNova.DataList } } + public bool HasIdColumn() + { + return !string.IsNullOrWhiteSpace(SqlIdColumnName); + } + } } \ No newline at end of file diff --git a/server/AyaNova/DataList/DataListSqlFilterCriteriaBuilder.cs b/server/AyaNova/DataList/DataListSqlFilterCriteriaBuilder.cs index d9c74735..0977505d 100644 --- a/server/AyaNova/DataList/DataListSqlFilterCriteriaBuilder.cs +++ b/server/AyaNova/DataList/DataListSqlFilterCriteriaBuilder.cs @@ -47,8 +47,6 @@ namespace AyaNova.DataList throw new System.ArgumentNullException($"DEV ERROR in DataListSqlFilterCriteriaBuilder.cs: field {fld} specified in template was NOT found in ObjectFields list"); } #endif - var SQLValueColumnName = DataListField.GetSqlValueColumnName(); - var SQLIdColumnName = DataListField.SqlIdColumnName; //get filter items collection for this field view definition var filterItems = (JArray)cm["filter"]["items"]; @@ -76,6 +74,9 @@ namespace AyaNova.DataList var opType = filterItem["op"].Value(); List tagList = new List(); string val = string.Empty; + + bool IsPossibleIdValue = filterItem["value"].Type == JTokenType.Integer; + if (filterItem["value"].Type != JTokenType.Array) val = filterItem["value"].Value(); else @@ -83,7 +84,24 @@ namespace AyaNova.DataList tagList = filterItem["value"].ToObject>(); } - sb.Append(DataFilterToColumnCriteria(SQLValueColumnName, (UiFieldDataType)dataType, opType, val, tagList, userId)); + //prep for possible ID field filter instead + string columnNameToFilter = string.Empty; + UiFieldDataType DataTypeToFilter = UiFieldDataType.NoType; + //Check if filtering by ID rather than by name + //this is indicated by this column being an id type + //and by the comparison operator being eq or neq + //and the value being a number not a string + if (DataListField.HasIdColumn() && IsPossibleIdValue && (opType == DataListFilterComparisonOperator.Equality || opType == DataListFilterComparisonOperator.NotEqual)) + { + columnNameToFilter = DataListField.SqlIdColumnName; + DataTypeToFilter = UiFieldDataType.InternalId; + } + else + { + DataTypeToFilter = (UiFieldDataType)dataType; + columnNameToFilter = DataListField.GetSqlValueColumnName(); + } + sb.Append(DataFilterToColumnCriteria(columnNameToFilter, DataTypeToFilter, opType, val, tagList, userId)); //close this item parenthesis if (y < filterItems.Count - 1) @@ -411,6 +429,7 @@ namespace AyaNova.DataList case UiFieldDataType.Enum://enums are just ints to the db, but it's a special type so the client can recognize it case UiFieldDataType.Decimal: case UiFieldDataType.Currency: + case UiFieldDataType.InternalId: case UiFieldDataType.Integer: //whole numbers, not only integer { //case 1795 - it's numeric, convert to locale independant format @@ -437,6 +456,11 @@ namespace AyaNova.DataList } } break; + case UiFieldDataType.InternalId: + { + //do nothing, it's a simple number + } + break; } diff --git a/server/AyaNova/DataList/TestWidgetDataList.cs b/server/AyaNova/DataList/TestWidgetDataList.cs index ea2bbd84..9a7f4d5e 100644 --- a/server/AyaNova/DataList/TestWidgetDataList.cs +++ b/server/AyaNova/DataList/TestWidgetDataList.cs @@ -37,7 +37,7 @@ cm=new JObject(); cm=new JObject(); cm.fld="widgetname"; dlistView.Add(cm); - +finish this // //name starts with filter to constrict to widgets that this test block created only // dynamic DataFilterNameStart = new JObject(); // DataFilterNameStart.fld = "widgetname"; diff --git a/server/AyaNova/biz/UiFieldDataType.cs b/server/AyaNova/biz/UiFieldDataType.cs index 6f943375..24c5087f 100644 --- a/server/AyaNova/biz/UiFieldDataType.cs +++ b/server/AyaNova/biz/UiFieldDataType.cs @@ -32,7 +32,8 @@ namespace AyaNova.Biz Tags = 9, Enum = 10, EmailAddress = 11, - HTTP = 12 + HTTP = 12, + InternalId = 13 } }