213 empty lists repesented as empty arrays (lib/field, lib/rest_api_helper, instance_operation_default)

This commit is contained in:
2026-03-12 14:59:15 +03:00
parent 5f995381df
commit 589b06bcc4
5 changed files with 25 additions and 9 deletions
+10 -1
View File
@@ -8,6 +8,7 @@
<!--- v0.05 2025-11-20 multiple field entries in filter, filter became array instead of structure--->
<!--- v0.06 2025-11-22 custom url parser used to prevent comma collision in lists--->
<!--- v0.06 2026-01-22 json-type field validation (isValidX)--->
<!--- v0.06 2026-03-12 empty2null off--->
<cffunction name="empty2null"
access="public"
@@ -56,6 +57,7 @@
<cfloop list=#structKeyList(ARGUMENTS.fieldMap)# index="local.col">
<cfset var obj=container/>
<cfset var formatter = structFind(ARGUMENTS.fieldMap[local.col], "formatter")/>
<cfset var type = structFind(ARGUMENTS.fieldMap[local.col], "type")/>
<cfif structKeyExists(ARGUMENTS.fieldMap[#local.col#],"container")>
<cfset var subContainerName = structFind(ARGUMENTS.fieldMap[local.col], "container")/>
@@ -68,7 +70,14 @@
</cfif>
<cfif queryColumnExists(ARGUMENTS.query, local.col)>
<cfset obj[ARGUMENTS.fieldNameDecorator(local.col)]=empty2null(formatter(ARGUMENTS.query[local.col][ARGUMENTS.query.currentRow]))/>
<cfif type EQ "list">
<!--- *** workaround for empty lists - keep them empty instead of null - should designate field type as list --->
<cfset obj[ARGUMENTS.fieldNameDecorator(local.col)]=formatter(ARGUMENTS.query[local.col][ARGUMENTS.query.currentRow])/>
<cfelse>
<cfset obj[ARGUMENTS.fieldNameDecorator(local.col)]=empty2null(formatter(ARGUMENTS.query[local.col][ARGUMENTS.query.currentRow]))/>
</cfif>
<!--- *** преобразование пустой строки в null преобразует в нулл также пустые списки, что искажает факт --->
</cfif>
<!---*** не уверен в надежности конструкции во всех реализациях CF, контекст query передастся ли--->
</cfloop>