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
+11 -3
View File
@@ -260,13 +260,20 @@ arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //In
<!--- Секретность игнорируется. Все секреты доступны, как есть --->
<!--- правда, мы тут можем работать только с сохраненными параметрами. Можем попробовать полагаться на правило: зависимые параметры всегда позже (не факт, что это получится при конкурентном сохранении) --->
<!--- проблема: нам нужен тут instance_operation_uid, но таскать его в аргументах по всей цепочке вызовов неудобно. Если бы это у нас был метод CFS параметра, все было бы просто - это у нас поле параметра --->
<cfif structKeyExists(this.params,arguments.param)><!--- AND len(this.params[arguments.param]) --->
<!--- ошибка: в строке параметров у нас ключ param.subparam, а в аргументах он разобран по частям
при этом мы ожидаем в параметрах структуру paramName:{subparamName:subparamValue}
но почему не находим в сохраненных? возможно такое совпадение, что в сценарии у нас как раз надо выбрать svcId а они не --->
<!--- {"startupConfiguration":{"vdcUid":"ea81db31-2197-407d-b32b-e60577c2671c"}} --->
<!--- this.params <cfdump var=#this.params#/>
arguments <cfdump var=#arguments# /> --->
<cfif structKeyExists(this.params,arguments.param)><!--- AND len(this.params[arguments.param]) --->
<cfif structKeyExists(arguments,"subparam")><!--- *** не изящно, но просто и понятно --->
<cfreturn deserializeJson(this.params[arguments.param])[arguments.subparam]/>
<cfelse>
<cfreturn (this.params[arguments.param])[arguments.subparam]/>
<cfelse>this.params[arguments.param] <!--- <cfdump var=#this.params[arguments.param]#/> --->
<cfreturn this.params[arguments.param]/>
</cfif>
</cfif>
<!--- не нашли параметра в запросе, ищем в сохраненных --->
<cfquery name="local.qCfsParam">
select p.param_value
from instance_operation_cfs_param p
@@ -274,6 +281,7 @@ arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //In
where p.instance_operation_uid = <cfqueryparam cfsqltype="cf_sql_other" value=#this.instance_operation_uid# null=#!isValid('guid',this.instance_operation_uid)#/>
AND s.svc_operation_cfs_param = <cfqueryparam cfsqltype="cf_sql_varchar" value=#arguments.param#/>
</cfquery>
<!--- <cfdump var=#this.keys#/> --->
<cfif structKeyExists(arguments,"subparam")><!--- *** не изящно, но просто и понятно --->
<cfset var value = deserializeJson(local.qCfsParam.param_value)/>
<cfif isStruct(value) AND structKeyExists(value, arguments.subparam)>