224 subparam compute fix

This commit is contained in:
2026-04-02 12:38:30 +03:00
parent b42aa109f0
commit 9409b2cd74
5 changed files with 62 additions and 57 deletions
@@ -30,11 +30,10 @@ arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //In
<!--- *** Важно: мы должны уметь посчитать параметр, если он не сохранен, то есть мы знаем его класс, а не инстанс --->
<!--- Вероятно, нам не очень нужно вычислять набор значений для инстанса параметра, мы всегда знаем класс --->
<!--- контест: --->
<cfargument name="svcOperationCfsSubparamId" type="string" required=false hint="type:integer"/>
<cfargument name="svcOperationCfsSubparamId" type="string" required=true hint="type:integer"/>
<cfargument name="keys" type="string" default={} hint="type:json keys we depend on: of the param uid itself, or operation uid, instance uid, service operation cfs param - if not all entities intstantiated yet"/>
<cfargument name="params" type="string" default="{}" hint="type:json any posted parameters we depend on"/>
<cftry>
<cfset this.helper.validateField(arguments, "svcOperationCfsSubparamId", "integer")/>
<cfset this.helper.validateField(arguments, "keys", "json")/> <!--- *** может, не лучшая идея передавать ключ в контексте --->
@@ -45,12 +44,12 @@ arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //In
</cftry>
<cfset local={}/>
<cfset local.expression = ""/> <!--- нет смысла выносить это в поля класса, оно нужно только локально --->
<cfset local.calculatedValueList = ""/>
<cfset local.keys = deserializeJson(arguments.keys)/>
<cfset local.params = deserializeJson(arguments.params)/>
<cfset "local.expression" = ""/> <!--- нет смысла выносить это в поля класса, оно нужно только локально --->
<cfset "local.calculatedValueList" = ""/>
<cfset "local.keys" = deserializeJson(arguments.keys)/>
<cfset "local.params" = deserializeJson(arguments.params)/>
<cfset local.keys.svcOperationCfsSubparamId = arguments.svcOperationCfsSubparamId/> <!--- *** сомнительное дело гонять аргументы туда-сюда ---><!--- *** по-моему, не используется, поэтому достанем svcOperationCfsParamId прямо тут --->
<cfset "local.keys.svcOperationCfsSubparamId" = arguments.svcOperationCfsSubparamId/> <!--- *** сомнительное дело гонять аргументы туда-сюда ---><!--- *** по-моему, не используется, поэтому достанем svcOperationCfsParamId прямо тут --->
<cfquery name="local.qCfsSubparam" result="local.result">
select
@@ -69,12 +68,12 @@ arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //In
<cfreturn representationOf(this.helper.formatMessage("Service Operation CFS Parameter Not Found")).withStatus(404)/>
</cfif>
<cfset local.expression=local.qCfsSubparam.expression/>
<cfset local.keys.svcOperationCfsParamId = local.qCfsSubparam.svc_operation_cfs_param_id/>
<cfset "local.expression"=local.qCfsSubparam.expression/>
<cfset "local.keys.svcOperationCfsParamId" = local.qCfsSubparam.svc_operation_cfs_param_id/>
<!--- *** можно обратить внимание, что мы инстанциируем не субпараметр, а параметр (цинично пользуясь их функциональной идентичностью... но некрасиво) --->
<cfif len(local.expression)>
<cfset calculatedValueList=createObject("component","lib.expression_parser")
<cfset local.calculatedValueList=createObject("component","lib.expression_parser")
.eval(
local.expression,
{/*context*/
@@ -87,7 +86,9 @@ arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //In
<cfelse>
<cfreturn representationOf(this.helper.formatMessage("Expression Not Found")).withStatus(404)/>
</cfif>
<!--- <cfdump var=#local.keys#/>
<cfdump var=#local.params#/>
<cfdump var=#local.calculatedValueList# abort=true/> --->
<!--- Тут нам еще придется сформатировать лист в массив. Но обошлось довольно просто --->
<cfset var out=structNew("linked")/>
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount/>
@@ -95,6 +96,5 @@ arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //In
<cfset "out.runDurationMs"=getTickCount() - request.startTickCount/>
<cfreturn representationOf(out) />
</cffunction><!--- get --->
</cfcomponent>