163 instance_operation_ls
This commit is contained in:
+1
-1
@@ -51,7 +51,7 @@
|
||||
|
||||
//variables.framework.docs={};
|
||||
variables.framework.docs.APIName="svc-api";
|
||||
variables.framework.docs.APIVersion="0.162"; /*$ git config --global --unset user.password*/
|
||||
variables.framework.docs.APIVersion="0.163"; /*$ git config --global --unset user.password*/
|
||||
|
||||
variables.framework.globalHeaders = structNew();
|
||||
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
|
||||
|
||||
@@ -4,10 +4,147 @@
|
||||
<cfimport prefix="m" taglib="../lib"/>
|
||||
<cfset this.helper=CreateObject("component","lib.rest_api_helper")/><!---*** странно, почему мы его видим?---><!---вынести в апп?--->
|
||||
</cfsilent>
|
||||
|
||||
<!---спецификация полей, пригодных для фильтрации (и сортировки)--->
|
||||
<cfset this.fieldsSpec={
|
||||
"instance_operation_uid"={prefix="o", type="guid"},
|
||||
"instance_uid"={prefix="o", type="guid"},
|
||||
"dt_created"={prefix="o", type="date"},
|
||||
"dt_updated"={prefix="o", type="date"},
|
||||
"creator_id"={prefix="o", type="integer"},
|
||||
"updater_id"={prefix="o", type="integer"},
|
||||
"dt_submit"={prefix="o", type="date"},
|
||||
"submit_result"={prefix="o", type="string"},
|
||||
"dt_start"={prefix="o", type="date"},
|
||||
"dt_finish"={prefix="o", type="date"},
|
||||
"specification_id"={prefix="s", type="integer"},
|
||||
"specification_item_id"={prefix="i", type="integer"},
|
||||
"contract_id"={prefix="inr", type="integer"},
|
||||
"display_name"={prefix="e", type="string"},
|
||||
"service_id"={prefix="e", type="integer"},
|
||||
"svc"={prefix="v", type="string"}
|
||||
}
|
||||
/>
|
||||
|
||||
|
||||
<!--- <cffunction name="post" hint="Создание новой операции с параметрами. Принимаются CFS параметры, генерируются RFS параметры. Запускается операция отдельным вызовом. До запуска CFS параметры могут корректироваться (а надо?). Запущенная операция навсегда становится Read Only (при желании можем реализовать ее клонирование). Можем реализовать корректировку параметров, но непонятно, зачем. Когда мы конфигурируем инстанс, на самом деле мы задаем CFS параметры операции create. Можно править параметры, а можно пересоздать операцию с новыми параметрами. Предусмотреть удаление (метод DELETE) незапущенной операции?"> --->
|
||||
|
||||
<cffunction name="get" hint="Список операций">
|
||||
<cfargument name="pageSize" type="string" hint="type:integer" default="100"/>
|
||||
<cfargument name="page" type="string" hint="type:integer" default="1"/>
|
||||
<cfargument name="orderBy" type="string" hint="type:string, description:comma-separated list of fields to sort by, example:fld1.ASC,fld2.DESC,fld3.ASC" default=""/>
|
||||
|
||||
<cftry> <!--- отладка на время проблемы 404 --->
|
||||
<cfset local={}/>
|
||||
|
||||
<!---parse and validate request parameters--->
|
||||
<cftry>
|
||||
<cfset this.helper.validateField(arguments, "pageSize", "integer")/>
|
||||
<cfset this.helper.validateField(arguments, "page", "integer")/>
|
||||
|
||||
<!---мы мирно игнорируем поля, отсутствующие в спецификации, что позволяет не делать исключения для orderBy и т.п.--->
|
||||
<cfset var filter=this.helper.parseFilterParams(this.fieldsSpec)/>
|
||||
<!--- <cfset var order=this.helper.parseOrderBy(this.fieldsSpec, arguments.orderBy)/> --->
|
||||
|
||||
<cfcatch type="invalidParamValue"><!--- <cfreturn representationOf("Проверка связи 3")> --->
|
||||
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
|
||||
</cfcatch>
|
||||
<cfcatch type="any">
|
||||
<cfreturn representationOf(cfcatch)/>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
<cfset var out={}/>
|
||||
<cfset var maxrows=arguments.pageSize*arguments.page/>
|
||||
<cfset var startrow=arguments.pageSize*(arguments.page-1)+1/>
|
||||
|
||||
<!--- <cfset request.locateIamService()/> --->
|
||||
|
||||
<cfquery name="local.qRead" result="local.result">
|
||||
select
|
||||
<m:field_set titleMapOut="local.titleMap" lengthOut="local.fieldCount">
|
||||
<m:field title="operation">o.operation</m:field>
|
||||
<m:field title="instance_operation_uid">o.instance_operation_uid::text as instance_operation_uid</m:field>
|
||||
<m:field title="instance_uid">o.instance_uid::text as instance_uid</m:field>
|
||||
<m:field title="dt_created">to_char(o.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created</m:field>
|
||||
<m:field title="dt_updated">to_char(o.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_updated</m:field>
|
||||
<m:field title="Отправка">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 title="Начало">to_char(o.dt_start, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_start</m:field>
|
||||
<m:field title="Завершение">to_char(o.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_finish</m:field>
|
||||
<m:field title="Длит. сек">extract('epoch' from coalesce(o.dt_finish,CURRENT_TIMESTAMP)- o.dt_start) as duration</m:field>
|
||||
<m:field title="Успешно">o.is_successful</m:field>
|
||||
<m:field title="Экземпляр">e.display_name</m:field>
|
||||
<m:field title="service_id">e.service_id</m:field>
|
||||
<m:field title="Услуга">v.svc</m:field>
|
||||
<m:field>i.specification_item_id</m:field>
|
||||
<m:field>s.specification_id</m:field>
|
||||
<m:field>d.contract_id</m:field>
|
||||
<m:field>o.creator_id</m:field>
|
||||
<m:field>o.updater_id</m:field>
|
||||
<m:field>c.login as creator_login</m:field>
|
||||
<m:field>c.email as creator_email</m:field>
|
||||
<m:field>u.login as updater_login</m:field>
|
||||
<m:field>u.email as updater_email</m:field>
|
||||
</m:field_set>
|
||||
from instance_operation o
|
||||
join instance e on (o.instance_uid=e.instance_uid)
|
||||
left outer join specification_item i on (e.specification_item_id=i.specification_item_id)
|
||||
left outer join specification s on (i.specification_id=s.specification_id)
|
||||
left outer join contract d on (s.contract_id=d.contract_id)
|
||||
left outer join svc v on (e.service_id=v.svc_id)
|
||||
left outer join usr c on (e.creator_id=c.usr_id)
|
||||
left outer join usr u on (u.updater_id=u.usr_id)
|
||||
where
|
||||
s.specification_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.specificationId#/>
|
||||
<m:filter_build filter=#filter#/>
|
||||
order by <m:order_build sortCollection=#this.helper.parseNumericOrder(local.titleMap, arguments.orderBy)# fieldCount=0/><!---no sort length limit--->
|
||||
limit #maxrows#
|
||||
</cfquery>
|
||||
<!--- <cfdump var=#local.qRead#/><cfabort/> --->
|
||||
|
||||
|
||||
<cfquery name="local.qTotal">
|
||||
select count(*) as cnt
|
||||
from instance_operation o
|
||||
join instance e on (o.instance_uid=e.instance_uid)
|
||||
left outer join specification_item i on (e.specification_item_id=i.specification_item_id)
|
||||
left outer join specification s on (i.specification_id=s.specification_id)
|
||||
where
|
||||
s.specification_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.specificationId#/>
|
||||
</cfquery>
|
||||
|
||||
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount/>
|
||||
<cfset "out.total"=#local.qTotal.cnt#/>
|
||||
<cfset "out.resultSetSize"=#local.qRead.recordCount#/>
|
||||
<cfset "out.pageSize"=#arguments.pageSize*1#/>
|
||||
<cfset "out.page"=#arguments.page*1#/>
|
||||
<cfset "out.orderBy"=#arguments.orderBy#/>
|
||||
|
||||
<cfset var resultCollection=[]/>
|
||||
<cfloop query=#local.qRead# startRow=#startrow# endRow=#(startrow+maxrows-1)#>
|
||||
<cfset var rec={}/>
|
||||
<cfset this.helper.appendRecord(rec, "", local.titleMap, local.qRead, this.helper.snake2camel)/>
|
||||
<cfset arrayAppend(resultCollection, rec)/>
|
||||
</cfloop>
|
||||
|
||||
<cfset "out.size"=#arrayLen(resultCollection)#/>
|
||||
<cfset "out.results"=#resultCollection#/>
|
||||
<cfset "out.runDurationMs"=getTickCount()-request.startTickCount/>
|
||||
<!---<cfset "out.sql"=#local.result.sql#/>--->
|
||||
<cfreturn representationOf(out)/>
|
||||
|
||||
<cfcatch type="any">
|
||||
<cfreturn representationOf(cfcatch)/>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
</cffunction>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<cffunction name="post" hint="Создание новой операции. Отдельно загружаются CFS параметры, генерируются RFS параметры. Запускается операция отдельным вызовом. До запуска CFS параметры могут корректироваться (а надо?). Запущенная операция вместе с параметрами навсегда становится Read Only (при желании можем реализовать ее клонирование). Можем реализовать корректировку параметров, но непонятно, зачем. Когда мы конфигурируем инстанс, на самом деле мы задаем CFS параметры операции create. Можно править параметры, а можно пересоздать операцию с новыми параметрами. Предусмотреть удаление (метод DELETE) незапущенной операции?">
|
||||
<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"/>
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<cfcomponent extends="taffy.core.resource" taffy:uri="/servicesGrouped">
|
||||
|
||||
<!--- Внимание! Дублирование семантики с svc_ls (как правило, вносить изменения параллельно --->
|
||||
|
||||
<cfsilent>
|
||||
<cfimport prefix="m" taglib="../lib"/>
|
||||
<cfset this.helper=CreateObject("component","lib.rest_api_helper")/><!---*** странно, почему мы его видим?---><!---вынести в апп?--->
|
||||
|
||||
+26
-45
@@ -8,26 +8,27 @@
|
||||
<!---спецификация полей, пригодных для фильтрации (?и сортировки)--->
|
||||
<!---здесь для простоты без префикса, потому что мы используем вложенный селект, чтобы сделать композитное поле--->
|
||||
<cfset this.fieldsSpec={
|
||||
"dt_created"={type="date"},
|
||||
"dt_updated"={type="date"},
|
||||
"svc_id"={type="integer"},
|
||||
"dt_created"={prefix="sv", type="date"},
|
||||
"dt_updated"={prefix="sv", type="date"},
|
||||
"svc_id"={prefix="sv", type="integer"},
|
||||
<!--- svc_group_id={type="integer"}, --->
|
||||
"resource_realm_type_id"={type="integer"},
|
||||
"sort"={type="integer"},
|
||||
"is_production_ready"={type="boolean"},
|
||||
"svc"={type="string"},
|
||||
"svc_short"={type="string"},
|
||||
"svc_extended_name"={type="string"},
|
||||
"orchestrator_name"={type="string"},
|
||||
"synonyms"={type="string"},
|
||||
"code"={type="string"},
|
||||
"version"={type="string"},
|
||||
"descr"={type="string"},
|
||||
"man"={type="string"},
|
||||
"resource_realm_cnt"={type="integer"}
|
||||
"resource_realm_type_id"={prefix="sv", type="integer"},
|
||||
"sort"={prefix="sv", type="integer"},
|
||||
"is_production_ready"={prefix="sv", type="boolean"},
|
||||
"svc"={prefix="sv", type="string"},
|
||||
"svc_short"={prefix="sv", type="string"},
|
||||
"svc_extended_name"={prefix="sv", type="string"},
|
||||
"orchestrator_name"={prefix="sv", type="string"},
|
||||
"synonyms"={prefix="sv", type="string"},
|
||||
"code"={prefix="sv", type="string"},
|
||||
"version"={prefix="sv", type="string"},
|
||||
"descr"={prefix="sv", type="string"},
|
||||
"man"={prefix="sv", type="string"},
|
||||
"resource_realm_cnt"={prefix="sv", type="integer"}
|
||||
}
|
||||
/>
|
||||
|
||||
<!--- *** пока сортировка, пагинация и состав полей компонуются так, что приходится добавлять поле сортировки в резалтсет --->
|
||||
<cffunction name="get" hint="Список сервисов">
|
||||
<cfargument name="pageSize" type="string" hint="type:integer" default=100/>
|
||||
<cfargument name="page" type="string" hint="type:integer" default="1"/>
|
||||
@@ -152,36 +153,16 @@
|
||||
<m:field>(coalesce(s.svc,'') ||' '|| coalesce(s.svc_short,'') ||' '|| coalesce(s.synonyms,'')) as svc_extended_name</m:field>
|
||||
</m:field_set>
|
||||
|
||||
|
||||
|
||||
<!--- --->
|
||||
<!--- <cfdump var=#local.titleMap#/>
|
||||
<cfdump var=#local.fieldCount#/> --->
|
||||
<!--- fieldsToOutput:<cfdump var=#local.fieldsToOutput#/>
|
||||
fieldsToQueryFor:<cfdump var=#local.fieldsToQueryFor#/>
|
||||
definedRecordFields:<cfdump var=#local.definedRecordFields#/>
|
||||
<cfoutput>
|
||||
select <cfif listLen(local.fieldsToOutput)>#local.fieldsToOutput#<cfelse>*</cfif> from
|
||||
(
|
||||
select
|
||||
<cfif listLen(local.definedQueryFields)>
|
||||
#preserveSingleQuotes(local.definedQueryFields)#
|
||||
<cfelse>
|
||||
'' as placeholder
|
||||
</cfif>
|
||||
from svc s
|
||||
left outer join contragent k on (
|
||||
k.external_uid=<
|
||||
)
|
||||
) sv
|
||||
where 1=1
|
||||
order by <m:order_build sortCollection=#this.helper.parseNumericOrder(local.titleMap, arguments.orderBy)# fieldCount=0/>
|
||||
</cfoutput>
|
||||
<cfabort/> --->
|
||||
|
||||
<!--- <cfdump var=#local.titleMap#/>
|
||||
<cfdump var=#arguments.orderBy#/>
|
||||
<cfdump var=#this.helper.parseNumericOrder(local.titleMap, arguments.orderBy)#/>
|
||||
<cfdump var=#local.fieldsToOutput#/>
|
||||
<m:order_build sortCollection=#this.helper.parseNumericOrder(local.titleMap, arguments.orderBy)# fieldCount=1/>
|
||||
<cfabort/> --->
|
||||
|
||||
<!--- *** проблема: сортировка строится некорректно. пока добавим поля сортировки в резалтсет --->
|
||||
<cfquery name="local.qRead" result="local.result">
|
||||
select <cfif listLen(local.fieldsToOutput)>#local.fieldsToOutput#<cfelse>*</cfif> from
|
||||
select <cfif listLen(local.definedRecordFields)>#local.definedRecordFields#<cfelse>*</cfif> from
|
||||
(
|
||||
select
|
||||
<cfif listLen(local.definedQueryFields)>
|
||||
@@ -201,7 +182,7 @@
|
||||
</cfif>
|
||||
) sv
|
||||
where 1=1 <m:filter_build filter=#filter#/>
|
||||
order by <m:order_build sortCollection=#this.helper.parseNumericOrder(local.titleMap, arguments.orderBy)# fieldCount=0/><!---no sort length limit--->
|
||||
order by <m:order_build sortCollection=#this.helper.parseNumericOrder(local.titleMap, arguments.orderBy)# fieldCount=1/>
|
||||
</cfquery>
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user