109 cfs subparams

This commit is contained in:
msyu
2025-05-19 15:48:41 +03:00
parent e4832ee878
commit e51a2c0cf5
6 changed files with 194 additions and 137 deletions
+8 -46
View File
@@ -146,15 +146,17 @@
"svcId":#local.qInstanceOperation.service_id#,
"contractId":#arguments.contractId#
}/> <!--- если появятся новые аргументы у новых функций, будем добавлять их сюда --->
<cfset local.qCfsParam.value_list=generateValueList(argumentCollection=#args#)/> <!--- можно перечислить именованные аргументы обычным порядком, но с коллекцией потенциально более гибко --->
<!--- <cfdump var=#local.qCfsParam#/><cfabort/> --->
<!--- <cfset local.qCfsParam.value_list=generateValueList(argumentCollection=#args#)/> --->
<cfinvoke component="instance_operation_cfs_param" method="generateValueList" argumentCollection=#args# returnVariable="local.qCfsParam.value_list"/>
<!--- можно перечислить именованные аргументы обычным порядком, но с коллекцией потенциально более гибко --->
<cfif len(trim(local.qCfsParam.value_list)) AND listLen(local.qCfsParam.value_list) EQ 1>
<cfset local.qCfsParam.default_value=local.qCfsParam.value_list/>
</cfif>
</cfif><!--- преобразование к массиву выполняется при финальном форматировании резалтсета --->
</cfif>
<cfif data_type EQ "map">
<cfset var map={}/>
<cfinvoke component="instance_operation_cfs_param" method="processMap" qParam=#local.qCfsParam#/>
<!--- <cfset var map={}/>
<cftry>
<cfset var map=deserializeJson(param_value)/>
<cfcatch type="any"><cfrethrow/></cfcatch>
@@ -223,7 +225,7 @@
</cfloop>
<cfset local.qCfsParam.data_descriptor = mapDescriptor/>
<cfset local.qCfsParam.param_value = serializeJson(map)/>
<cfset local.qCfsParam.param_value = serializeJson(map)/> --->
</cfif><!---/map --->
</cfloop>
@@ -250,47 +252,7 @@
<cfreturn representationOf(out) />
</cffunction>
<!--- *** дублируются --->
<cffunction name="getAvailableResourceRealms" returnType="string">
<cfargument name="svcId"/>
<cfargument name="contractId"/>
<cfset var local={}/>
<cfquery name="local.qAvailableResourceRealm"><!--- *** distinct халява, но придумывать корректную формулировку времени мало --->
select distinct r.resource_realm, r.sort
from resource_realm r
join resource_realm_access a on
(r.resource_realm_id=a.resource_realm_id
AND (a.contract_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.contractId# null=#!isValid("integer", arguments.contractId)#/>
OR a.contract_id=0) /*0 means access to any contract*/
AND a.is_enabled)
join svc s on r.resource_realm_type_id=s.resource_realm_type_id
where s.svc_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.svcId# null=#!isValid("integer", arguments.svcId)#/>
order by r.sort, r.resource_realm
</cfquery> <!--- <cfdump var=#arguments#/> cfdump здесь провоцирует NPE --->
<cfreturn valueList(local.qAvailableResourceRealm.resource_realm)/>
</cffunction>
<cffunction name="generateValueList" returntype="string">
<cfargument name="functionName" type="string" required="true"/>
<!--- остальные атрибуты необязательные, в argumentCollection (еще вопрос, насколько безопасно объявлять один из аргументов без остальных) --->
<cfswitch expression=#arguments.functionName#>
<cfcase value="">
<cfreturn ""/>
</cfcase>
<cfcase value="getAvailableResourceRealms">
<cfreturn getAvailableResourceRealms(arguments.svcId, arguments.contractId)/>
</cfcase>
<cfcase value="getSampleList"><!--- for debug --->
<cfreturn "dummy1,dummy2"/>
</cfcase>
<cfdefaultcase>
<cfreturn "function not found"/>
</cfdefaultcase>
</cfswitch>
</cffunction>
</cfcomponent>