076 instance_operation.resource_realm_id

This commit is contained in:
msyu
2025-04-06 11:16:02 +03:00
parent c6f9b72d9f
commit 080252cf2c
6 changed files with 86 additions and 83 deletions
+1 -1
View File
@@ -51,7 +51,7 @@
//variables.framework.docs={}; //variables.framework.docs={};
variables.framework.docs.APIName="Deck API"; variables.framework.docs.APIName="Deck API";
variables.framework.docs.APIVersion="0.075"; variables.framework.docs.APIVersion="0.076";
variables.framework.globalHeaders = structNew(); variables.framework.globalHeaders = structNew();
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location"; variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
+1 -33
View File
@@ -291,32 +291,7 @@
<cfreturn noData().withStatus(204, "No Content") /> <cfreturn noData().withStatus(204, "No Content") />
</cffunction> </cffunction>
<!--- <cffunction name="checkDisplayName" access="public" hint="возвращает пустую строку при успешной проверке, иначе описание ошибки">
<cfargument name="display_name"/>
<cfargument name="usr_id"/>
<cfargument name="instance_uid"/>
<cfif len(arguments.display_name) LT 3>
<cfthrow type="invalidParamValue" message="Имя должно быть не короче 3 символов"/>/>
<cfelseif len(arguments.display_name) GT 80>
<cfthrow type="invalidParamValue" message="Имя должно быть не длиннее 80 символов"/>/>
<cfelse>
<cfquery name="qUniqueDisplayName">
select count(*) as cnt from instance e
join specification_item i on (e.specification_item_id=i.specification_item_id)
join specification s on (i.specification_id=s.specification_id)
join contract d on (s.contract_id=d.contract_id)
join contragent k on (d.contragent_id=k.contragent_id)
join usr u on (k.contragent_id=u.contragent_id)
where u.usr_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.usr_id#/>
AND lower(e.display_name)=lower(<cfqueryparam cfsqltype="cf_sql_varchar" value=#arguments.display_name#/>)
AND e.instance_uid <> <cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instance_uid#/>
</cfquery>
<cfif qUniqueDisplayName.cnt GT 0>
<cfthrow type="invalidParamValue" message="Имя должно быть уникальным"/><!--- *** в пределах контракта/спецификации --->
</cfif>
</cfif>
</cffunction> ---><!--- *** оказывается, я независимо реализовал почти точно такую же функцию для POST, и забыл --->
<!--- неудобно бегать из одного компонента в соседний при том, что разделение ответственности между ними получается довольно странное <!--- неудобно бегать из одного компонента в соседний при том, что разделение ответственности между ними получается довольно странное
Решил, что логичнее повесить проверки уникальности и генерацию дефолтов на коллекцию, тем более и связей так меньше ---> Решил, что логичнее повесить проверки уникальности и генерацию дефолтов на коллекцию, тем более и связей так меньше --->
@@ -329,11 +304,4 @@
<cfset CreateObject("component", "instance_ls").checkDisplayName(arguments.displayName, arguments.usrId, arguments.instanceUid)/> <cfset CreateObject("component", "instance_ls").checkDisplayName(arguments.displayName, arguments.usrId, arguments.instanceUid)/>
</cffunction> </cffunction>
<!--- <cffunction name="generateDefaultName">
<cfargument name="service_id" type="numeric"/>
<cfreturn CreateObject("component", "instance_ls").generateDefaultName(arguments.service_id)/>
</cffunction> --->
</cfcomponent> </cfcomponent>
+3
View File
@@ -22,6 +22,8 @@
<m:field_set titleMapOut="local.titleMap" lengthOut="local.fieldCount"> <m:field_set titleMapOut="local.titleMap" lengthOut="local.fieldCount">
<m:field>o.instance_operation_uid::text as instance_operation_uid</m:field> <m:field>o.instance_operation_uid::text as instance_operation_uid</m:field>
<m:field>o.operation</m:field> <m:field>o.operation</m:field>
<m:field>o.resource_realm_id</m:field>
<m:field>r.resource_realm</m:field>
<m:field>o.instance_uid::text as instance_uid</m:field> <m:field>o.instance_uid::text as instance_uid</m:field>
<m:field>to_char(o.dt_submit, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_submit</m:field> <m:field>to_char(o.dt_submit, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_submit</m:field>
<m:field>o.submit_result</m:field> <m:field>o.submit_result</m:field>
@@ -49,6 +51,7 @@
join contragent k on (d.contragent_id=k.contragent_id) join contragent k on (d.contragent_id=k.contragent_id)
join svc v on (e.service_id=v.svc_id) join svc v on (e.service_id=v.svc_id)
join svc_operation so on (v.svc_id=so.svc_id AND o.operation=so.operation) join svc_operation so on (v.svc_id=so.svc_id AND o.operation=so.operation)
join resource_realm r on (o.resource_realm_id=r.resource_realm_id)
left outer join usr u on (o.updater_id=u.usr_id) left outer join usr u on (o.updater_id=u.usr_id)
where <!--- u.usr_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.usrId#/> AND---> where <!--- u.usr_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.usrId#/> AND--->
o.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationUid#" null=#!isValid('guid',arguments.instanceOperationUid)#/> o.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationUid#" null=#!isValid('guid',arguments.instanceOperationUid)#/>
@@ -186,12 +186,15 @@
/> />
</cffunction> </cffunction>
<cffunction name="checkParam"> <cffunction name="checkParam" returnType="void">
<!--- проверка параметров по метаданным, независимо от семантики самого параметра --->
<cfargument name="svcOperationCfsParamId" type="numeric" required = true/> <cfargument name="svcOperationCfsParamId" type="numeric" required = true/>
<cfargument name="paramValue" required = true/> <cfargument name="paramValue" required = true/>
<cfargument name="instanceOperationCfsParamUid" type="guid" required = false/><!--- передавать для существующего параметра - используется при проверке уникальности ---> <cfargument name="instanceOperationCfsParamUid" type="guid" default="00000000-0000-0000-0000-000000000000"/><!--- используется при проверке уникальности, чтобы не сравнивать с собой --->
<!--- *** Вероятно, стоит возвращать конкретную ругань ---> <!--- *** Вероятно, стоит возвращать конкретную ругань --->
<!--- принадлежит ли параметр к данному сервису, проверяется выше ---> <!--- принадлежит ли параметр данному сервису, проверяется выше --->
<!--- получаем метаданные параметра --->
<cfquery name="qSvcOperationCfsParam"> <cfquery name="qSvcOperationCfsParam">
select sop.svc_operation_cfs_param_id select sop.svc_operation_cfs_param_id
,sop.svc_operation_cfs_param ,sop.svc_operation_cfs_param
@@ -211,7 +214,7 @@
<cfif qSvcOperationCfsParam.is_required GT 0 AND len(arguments.paramValue) EQ 0> <cfif qSvcOperationCfsParam.is_required GT 0 AND len(arguments.paramValue) EQ 0>
<!--- <cfreturn "Missing required parameter (#qSvcOperationCfsParam.svc_operation_cfs_param#)"/> ---> <!--- <cfreturn "Missing required parameter (#qSvcOperationCfsParam.svc_operation_cfs_param#)"/> --->
<cfthrow type="invalidParamValue" message="Missing required parameter (#qSvcOperationCfsParam.svc_operation_cfs_param#)"/> <cfthrow type="invalidParamValue" message="Missing required parameter (#qSvcOperationCfsParam.svc_operation_cfs_param#)"/>
<cfelseif len(arguments.paramValue) AND NOT checkValue(arguments.paramValue,qSvcOperationCfsParam.data_type)> <cfelseif len(arguments.paramValue) AND NOT validateDataType(arguments.paramValue,qSvcOperationCfsParam.data_type)>
<!--- <cfreturn "Invalid format (#qSvcOperationCfsParam.svc_operation_cfs_param#)"/> ---> <!--- <cfreturn "Invalid format (#qSvcOperationCfsParam.svc_operation_cfs_param#)"/> --->
<cfthrow type="invalidParamValue" message="Invalid format (#qSvcOperationCfsParam.svc_operation_cfs_param#)"/> <cfthrow type="invalidParamValue" message="Invalid format (#qSvcOperationCfsParam.svc_operation_cfs_param#)"/>
</cfif> </cfif>
@@ -244,7 +247,25 @@
<!--- ****** Внимание! Этот код сравнивает параметры одноименных операций, но уникальность должна быть и между create-modify и т.п. ---> <!--- ****** Внимание! Этот код сравнивает параметры одноименных операций, но уникальность должна быть и между create-modify и т.п. --->
<!--- *** при этом мы не исключаем уделенные инстансы, что неудобно ---> <cfset checkUniqueness(
qSvcOperationCfsParam.svc_operation_cfs_param_id, <!--- *** есть в аргументах, но было так - пока не меняю --->
arguments.svcOperationCfsParamId,
arguments.paramValue,
qSvcOperationCfsParam.unique_scope,
arguments.instanceOperationCfsParamUid
)/>
</cffunction>
<cffunction name="checkUniqueness" returnType="void">
<!--- использую void, потому что с исключением проще передавать информацию о конкретном характере ошибки. Чем возвращать объект ошибки - проше бросить исключение --->
<cfargument name="svcOperationCfsParamId" type="integer"/>
<cfargument name="svcOperationCfsParamName" type="string"/><!--- нужен только для формирования текста сообщения об ошибке --->
<cfargument name="paramValue" type="string"/>
<cfargument name="scope" type="string"/>
<cfargument name="instanceOperationCfsParamUid" type="guid"/>
<!--- request.usr_id passed implicitly --->
<cfswitch expression=#qSvcOperationCfsParam.unique_scope#> <cfswitch expression=#qSvcOperationCfsParam.unique_scope#>
<cfcase value="provider"> <cfcase value="provider">
<cfquery name="qUnique"> <cfquery name="qUnique">
@@ -253,18 +274,19 @@
join instance_operation o on (p.instance_operation_uid=o.instance_operation_uid) join instance_operation o on (p.instance_operation_uid=o.instance_operation_uid)
join instance e on (o.instance_uid=e.instance_uid) join instance e on (o.instance_uid=e.instance_uid)
where p.param_value=<cfqueryparam cfsqltype="cf_sql_varchar" value=#arguments.paramValue#/> where p.param_value=<cfqueryparam cfsqltype="cf_sql_varchar" value=#arguments.paramValue#/>
AND p.svc_operation_cfs_param_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#qSvcOperationCfsParam.svc_operation_cfs_param_id#/> AND p.svc_operation_cfs_param_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.svcOperationCfsParamId#/>/*limit to the current svc param*/
<cfif structKeyExists(arguments,"instanceOperationCfsParamUid")> <cfif arguments.instanceOperationCfsParamUid NEQ "00000000-0000-0000-0000-000000000000">
AND p.instance_operation_cfs_param_uid <> <cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceOperationCfsParamUid#/><!--- null=#!isValid("guid",arguments.instanceOperationCfsParamUid)# ---> <!--- не решаюсь оставить эту проверку на БД, потому что наличие записи с 00000000-0000-0000-0000-000000000000 может все сломать --->
AND p.instance_operation_cfs_param_uid <> <cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceOperationCfsParamUid#/>/*exclude itself*/
</cfif> </cfif>
AND (select cast(st.instance_data->>'isDeleted' as boolean) from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) IS NOT TRUE AND (select cast(st.instance_data->>'isDeleted' as boolean) from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) IS NOT TRUE /*ignore deleted instances*/
</cfquery> </cfquery><!--- ****** здесь может таиться трудно понимаемый баг с отсутствием записи --->
<!--- <cfdump var=#qUnique#/><cfabort/> ---> <!--- <cfdump var=#qUnique#/><cfabort/> --->
<cfif qUnique.cnt GT 0> <cfif qUnique.cnt GT 0>
<!--- <cfreturn '#qSvcOperationCfsParam.svc_operation_cfs_param# = "#arguments.paramValue#" is not unique in the provider scope'/> ---> <cfthrow type="invalidParamValue" message='#arguments.svcOperationCfsParamName# = "#arguments.paramValue#" is not unique in the provider scope'/>
<cfthrow type="invalidParamValue" message='#qSvcOperationCfsParam.svc_operation_cfs_param# = "#arguments.paramValue#" is not unique in the provider scope'/>
</cfif> </cfif>
</cfcase> </cfcase>
<cfcase value="tenant"> <cfcase value="tenant">
<cfquery name="qUnique"> <cfquery name="qUnique">
select count(*) as cnt select count(*) as cnt
@@ -277,29 +299,31 @@
join contragent k on (d.contragent_id=k.contragent_id) join contragent k on (d.contragent_id=k.contragent_id)
join usr u on (k.contragent_id=u.contragent_id) join usr u on (k.contragent_id=u.contragent_id)
where p.param_value=<cfqueryparam cfsqltype="cf_sql_varchar" value=#arguments.paramValue#/> where p.param_value=<cfqueryparam cfsqltype="cf_sql_varchar" value=#arguments.paramValue#/>
AND svc_operation_cfs_param_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#qSvcOperationCfsParam.svc_operation_cfs_param_id#/> AND svc_operation_cfs_param_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.svcOperationCfsParamId#/>/*limit to the current svc param*/
AND u.usr_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#request.usr_id#/> AND u.usr_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#request.usr_id#/>/*limit to the contragent of current user*/
<cfif structKeyExists(arguments,"instanceOperationCfsParamUid")> <cfif arguments.instanceOperationCfsParamUid NEQ "00000000-0000-0000-0000-000000000000">
AND p.instance_operation_cfs_param_uid <> <cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceOperationCfsParamUid#/> <!--- null=#!isValid("guid",arguments.instanceOperationCfsParamUid)# ---> <!--- не решаюсь оставить эту проверку на БД, потому что наличие записи с 00000000-0000-0000-0000-000000000000 может все сломать --->
AND p.instance_operation_cfs_param_uid <> <cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceOperationCfsParamUid#/>/*exclude itself*/
</cfif> </cfif>
AND (select cast(st.instance_data->>'isDeleted' as boolean) from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) IS NOT TRUE AND (select cast(st.instance_data->>'isDeleted' as boolean) from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) IS NOT TRUE /*ignore deleted instances*/
/*to ignore deleted instances*/ </cfquery><!--- ****** здесь может таиться трудно понимаемый баг с отсутствием записи --->
</cfquery>
<!--- <cfdump var=#qUnique#/> ---> <!--- <cfdump var=#qUnique#/> --->
<cfif qUnique.cnt GT 0> <cfif qUnique.cnt GT 0>
<!--- <cfreturn '#qSvcOperationCfsParam.svc_operation_cfs_param# = "#arguments.paramValue#" is not unique in the tenant scope'/> ---> <cfthrow type="invalidParamValue" message='#arguments.svcOperationCfsParamName# = "#arguments.paramValue#" is not unique in the tenant scope'/>
<cfthrow type="invalidParamValue" message='#qSvcOperationCfsParam.svc_operation_cfs_param# = "#arguments.paramValue#" is not unique in the tenant scope'/>
</cfif> </cfif>
</cfcase> </cfcase>
<cfdefaultcase></cfdefaultcase> <cfdefaultcase></cfdefaultcase>
</cfswitch> </cfswitch>
<!--- <cfreturn ""/> --->
</cffunction> </cffunction>
<cffunction name="checkValue" returnType="boolean"> <cffunction name="validateDataType" returnType="boolean">
<cfargument name="value" type="string"/> <cfargument name="value" type="string"/>
<cfargument name="dataType" type="string"/> <cfargument name="dataType" type="string"/>
<!--- Что возвращать-то?
<!--- Что возвращать-то?
Идею бросать исключение при некорректном вводе надо отринуть. Все введенные параметры надо обработать и не терять ---> Идею бросать исключение при некорректном вводе надо отринуть. Все введенные параметры надо обработать и не терять --->
<cfswitch expression=#arguments.dataType#> <cfswitch expression=#arguments.dataType#>
@@ -322,7 +346,7 @@
<cfreturn isNumeric(arguments.value)/> <cfreturn isNumeric(arguments.value)/>
</cfcase> </cfcase>
<cfcase value="uuid"> <cfcase value="uuid">
<cfreturn isValid("guid",arguments.value)/><!--- *** или GUID? Или принимать оба формата и приводить к одному? А как быть с БД---> <cfreturn isValid("guid",arguments.value)/><!--- *** или GUID? Или принимать оба формата GUID UUID и приводить к одному? А как быть с БД--->
</cfcase> </cfcase>
<cfdefaultcase><cfreturn true/> <cfdefaultcase><cfreturn true/>
<cfthrow type="custom" detail="unsupported CFS parameter value type (#arguments.dataType#)"/> <cfthrow type="custom" detail="unsupported CFS parameter value type (#arguments.dataType#)"/>
+3 -1
View File
@@ -10,6 +10,7 @@
<cffunction name="post" hint="Создание новой операции. Отдельно загружаются CFS параметры, генерируются RFS параметры. Запускается операция отдельным вызовом. До запуска CFS параметры могут корректироваться (а надо?). Запущенная операция вместе с параметрами навсегда становится Read Only (при желании можем реализовать ее клонирование). Можем реализовать корректировку параметров, но непонятно, зачем. Когда мы конфигурируем инстанс, на самом деле мы задаем CFS параметры операции create. Можно править параметры, а можно пересоздать операцию с новыми параметрами. Предусмотреть удаление (метод DELETE) незапущенной операции?"> <cffunction name="post" hint="Создание новой операции. Отдельно загружаются CFS параметры, генерируются RFS параметры. Запускается операция отдельным вызовом. До запуска CFS параметры могут корректироваться (а надо?). Запущенная операция вместе с параметрами навсегда становится Read Only (при желании можем реализовать ее клонирование). Можем реализовать корректировку параметров, но непонятно, зачем. Когда мы конфигурируем инстанс, на самом деле мы задаем CFS параметры операции create. Можно править параметры, а можно пересоздать операцию с новыми параметрами. Предусмотреть удаление (метод DELETE) незапущенной операции?">
<cfargument name="instanceUid" type="string" required=true hint="type:guid"/> <cfargument name="instanceUid" type="string" required=true hint="type:guid"/>
<cfargument name="operation" type="string" required=true hint="type:string decsiption: operation name, e.g. create"/> <cfargument name="operation" type="string" required=true hint="type:string decsiption: operation name, e.g. create"/>
<cfargument name="resourceRealmId" type="string" default=-1 hint="type:integer decsiption: идентификатор ресурсной платформы"/>
<!--- *** полноценная валидация операции предполагает проверку, что операция поддерживается для данного сервиса и текущего состояния инстанса. Можно представить себе зависимость этого от параметров, но хотелось бы избежать такого усложнения ---> <!--- *** полноценная валидация операции предполагает проверку, что операция поддерживается для данного сервиса и текущего состояния инстанса. Можно представить себе зависимость этого от параметров, но хотелось бы избежать такого усложнения --->
<!--- Можно отметить, что, например, допустимость операции delete зависит от контекста - сколько времени сервис остановлен ---> <!--- Можно отметить, что, например, допустимость операции delete зависит от контекста - сколько времени сервис остановлен --->
<cftry> <cftry>
@@ -40,7 +41,7 @@
<cftry> <cftry>
<cfquery name="local.qSave"> <cfquery name="local.qSave">
insert into instance_operation insert into instance_operation
(instance_uid, instance_operation_uid, operation, dt_created, creator_id, dt_updated, updater_id) (instance_uid, instance_operation_uid, operation, dt_created, creator_id, dt_updated, updater_id,resource_realm_id)
values values
( (
<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceUid#" /> <cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceUid#" />
@@ -50,6 +51,7 @@
,<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.usrId#" /> ,<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.usrId#" />
,<cfqueryparam cfsqltype="cf_sql_timestamp" value="#Now()#" /> ,<cfqueryparam cfsqltype="cf_sql_timestamp" value="#Now()#" />
,<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.usrId#" /> ,<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.usrId#" />
,<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.resourceRealmId#" />
); );
</cfquery> </cfquery>
+29 -23
View File
@@ -63,13 +63,15 @@
left outer join instance_operation_cfs_param iop on (sop.svc_operation_cfs_param_id=iop.svc_operation_cfs_param_id AND iop.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationUid#" null=#!isValid('guid',arguments.instanceOperationUid)#/>) left outer join instance_operation_cfs_param iop on (sop.svc_operation_cfs_param_id=iop.svc_operation_cfs_param_id AND iop.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationUid#" null=#!isValid('guid',arguments.instanceOperationUid)#/>)
where sop.svc_operation_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#local.qSvcOperation.svc_operation_id#"/> where sop.svc_operation_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#local.qSvcOperation.svc_operation_id#"/>
</cfquery><!--- <cfdump var=#local.qCheckCfsParams#/><cfabort/> ---> </cfquery><!--- <cfdump var=#local.qCheckCfsParams#/><cfabort/> --->
<cfset local.cfsParamChecker = CreateObject("component", "instance_operation_cfs_param_ls")/> <cfset local.cfsParamChecker = CreateObject("component", "instance_operation_cfs_param_ls")/>
<!--- we could check existence of required parameters right in the query, <!--- we could check existence of required parameters right in the query,
but for possible value chech and verbosity do it in the loop ---> but for possible value chech and verbosity do it in the loop --->
<cfloop query=#local.qCheckCfsParams#> <cfloop query=#local.qCheckCfsParams#>
<cfif (local.qCheckCfsParams.is_required GT 0 AND NOT len(local.qCheckCfsParams.instance_operation_cfs_param_uid) GT 0)> <cfif (local.qCheckCfsParams.is_required GT 0 AND NOT len(local.qCheckCfsParams.instance_operation_cfs_param_uid) GT 0)><!--- check CFS param existence --->
<cfreturn representationOf(this.helper.formatMessage("required CFS parameter #local.qCheckCfsParams.svc_operation_cfs_param# (#local.qCheckCfsParams.svc_operation_cfs_param_id#) is missing", "Missing required CFS parameter")).withStatus(409)/> <cfreturn representationOf(this.helper.formatMessage("required CFS parameter #local.qCheckCfsParams.svc_operation_cfs_param# (#local.qCheckCfsParams.svc_operation_cfs_param_id#) is missing", "Missing required CFS parameter")).withStatus(409)/>
<cfelse> <cfelse><!--- validate CFS param--->
<cfset local.cfsParamChecker.checkParam(local.qCheckCfsParams.svc_operation_cfs_param_id, qCheckCfsParams.param_value, qCheckCfsParams.instance_operation_cfs_param_uid)/> <cfset local.cfsParamChecker.checkParam(local.qCheckCfsParams.svc_operation_cfs_param_id, qCheckCfsParams.param_value, qCheckCfsParams.instance_operation_cfs_param_uid)/>
</cfif> </cfif>
</cfloop><!--- <cfdump var=#local.qCheckCfsParams#/><cfabort/> ---> </cfloop><!--- <cfdump var=#local.qCheckCfsParams#/><cfabort/> --->
@@ -77,7 +79,10 @@
<!--- ***** тут должен быть контроль доступа на уровне параметров. Желательно по максимуму параноидальный ---> <!--- ***** тут должен быть контроль доступа на уровне параметров. Желательно по максимуму параноидальный --->
<!--- ***** или при сабмите. Может быть, и на уровне RFS параметров тоже ---> <!--- ***** или при сабмите. Может быть, и на уровне RFS параметров тоже --->
<cfset generateRfsParams(arguments.instanceOperationUid, arguments.usrId, arguments.contragentId, arguments.contractId)/> <cfset generateRfsParams(arguments.instanceOperationUid, arguments.usrId, arguments.contragentId, arguments.contractId)/>
<!--- **************************** --->
<cfset submitJob(arguments.instanceOperationUid)/> <cfset submitJob(arguments.instanceOperationUid)/>
<!--- **************************** --->
<cfcatch type="invalidParamValue"> <cfcatch type="invalidParamValue">
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/> <cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
@@ -102,16 +107,18 @@
<cfargument name="contractId" type="numeric"/> <cfargument name="contractId" type="numeric"/>
<cfquery name="qSvcOperation"> <cfquery name="qSvcOperation">
select so.svc_operation_id, io.instance_uid, so.operation select so.svc_operation_id, io.instance_uid, so.operation, r.resource_realm
from instance_operation io from instance_operation io
join instance e on (io.instance_uid=e.instance_uid) join instance e on (io.instance_uid=e.instance_uid)
join svc_operation so on (e.service_id=so.svc_id AND io.operation=so.operation) join svc_operation so on (e.service_id=so.svc_id AND io.operation=so.operation)
left outer join resource_realm r on so.resource_realm_id=r.resource_realm_id
where io.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceOperationUid# null=#!isValid("guid",arguments.instanceOperationUid)#/> where io.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceOperationUid# null=#!isValid("guid",arguments.instanceOperationUid)#/>
</cfquery> </cfquery>
<!--- поступим проще, по engine/generate_rfs_12.cfm ---> <!--- поступим проще, по engine/generate_rfs_12.cfm --->
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "instanceUid", qSvcOperation.instance_uid)/> <cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "instanceUid", qSvcOperation.instance_uid)/>
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "operationUid", arguments.instanceOperationUid)/> <cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "operationUid", arguments.instanceOperationUid)/>
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "modifierId", arguments.usrId)/> <cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "modifierId", arguments.usrId)/>
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "resourceRealm", qSvcOperation.resource_realm)/>
<cfif qSvcOperation.operation EQ "create"><!--- несколько костыльно ---> <cfif qSvcOperation.operation EQ "create"><!--- несколько костыльно --->
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "billingObject", "underconstruction")/> <cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "billingObject", "underconstruction")/>
@@ -148,24 +155,24 @@
</cfquery> </cfquery>
</cffunction> </cffunction>
<!--- <!---
-- полезный селект, не выбрасывать -- полезный селект, не выбрасывать
<cfquery name="qSvcOperationCfsParam"> <cfquery name="qSvcOperationCfsParam">
select sop.svc_operation_cfs_param_id select sop.svc_operation_cfs_param_id
,iop.instance_operation_cfs_param_uid::text as instance_operation_cfs_param_uid /*pgjdbc issue fix*/ ,iop.instance_operation_cfs_param_uid::text as instance_operation_cfs_param_uid /*pgjdbc issue fix*/
,iop.param_value ,iop.param_value
,sop.svc_operation_cfs_param ,sop.svc_operation_cfs_param
,sop.data_type ,sop.data_type
,sop.is_required ,sop.is_required
,sop.maxlength,sop.minlength,sop.regex,sop.unique_scope ,sop.maxlength,sop.minlength,sop.regex,sop.unique_scope
from instance_operation io from instance_operation io
join instance e on (io.instance_uid=e.instance_uid) join instance e on (io.instance_uid=e.instance_uid)
join svc_operation so on (e.service_id=so.svc_id AND io.operation=so.operation) join svc_operation so on (e.service_id=so.svc_id AND io.operation=so.operation)
join svc_operation_cfs_param sop on (so.svc_operation_id=sop.svc_operation_id) join svc_operation_cfs_param sop on (so.svc_operation_id=sop.svc_operation_id)
left outer join instance_operation_cfs_param iop left outer join instance_operation_cfs_param iop
on (sop.svc_operation_cfs_param_id=iop.svc_operation_cfs_param_id AND io.instance_operation_uid=iop.instance_operation_uid) on (sop.svc_operation_cfs_param_id=iop.svc_operation_cfs_param_id AND io.instance_operation_uid=iop.instance_operation_uid)
where iop.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceOperationUid# null=#!isValid("guid",arguments.instanceOperationUid)#/>) where iop.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceOperationUid# null=#!isValid("guid",arguments.instanceOperationUid)#/>)
</cfquery> </cfquery>
---> --->
<cffunction name="submitJob"> <cffunction name="submitJob">
@@ -192,8 +199,7 @@
set dt_submit=<cfqueryparam cfsqltype="cf_sql_timestamp" value=#now()#/> set dt_submit=<cfqueryparam cfsqltype="cf_sql_timestamp" value=#now()#/>
,dt_start=null, dt_finish=null, submit_result='0' ,dt_start=null, dt_finish=null, submit_result='0'
where instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceOperationUid#/> where instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceOperationUid#/>
</cfquery> </cfquery>
<cftry> <cftry>
<cfhttp method="post" <cfhttp method="post"