Вопрос

Подфильтр в запросе

Здравсвствуйте! Помогите пожалуйста составить примерно такой фильтр 

select a.* from "ScVwSLPBalanseFApp" a
  where NOT EXISTS (SELECT t.* FROM "SpecInCondition" t 
      LEFT JOIN "SpecTableValue" spect ON spect."Id" = t."SpecTableValueXId"
      WHERE t."ScParentSCFApplication" = a."ScFApplicationId" AND spect."ScDate" = a."ScDate")

делал что-то типа такого

var filterNotExist = this.Terrasoft.createNotExistsFilter("[SpecInCondition:ScParentSCFApplication:ScFApplication].Id");
 filterNotExist.subFilters.addItem(Terrasoft.createFilter(
	Terrasoft.ComparisonType.EQUAL, "[SpecTableValue:Id:SpecTableValueX].ScDate", "ScDate"));

у меня выдает ошибку ("SpecInCondition"."ScDate": недопустимый идентификатор), в фильтре пытается найти колонку ScDate в объекте SpecInCondition, если да, то как мне перейти к этой колонке колонку к корневой схеме, подскажите пожалуйста в чем причина.

Нравится

6 комментариев
Лучший ответ

Дульский Александр,

В теории средствами bpm'online такой фильтр построить возможно.

Вы смотрели, какой запрос идет в базу данных?

Еще можно рассмотреть вариант реализации на стороне сервера, если с клиентом не получается.

Думаю, что в данном случае все можно сделать гораздо проще, Вы можете реализовать sql-представление, за основу которого взять именно этот запрос и дальше уже с ним работать.

Доброе утро!

Для того, чтобы понять в чем ошибка, запустите sql-профайлер и посмотрите, какой запрос идет в базу данных.

Сначала свяжите таблицу основного запроса и фильтра not exists, а потом реализуйте нужные фильтры в подзапросе not exists. Сейчас в Вашем примере Вы все смешали "в кучу''.

Посмотрите здесь похожий пример.

Алла Савельева,

Не совсем понял о чем вы, и про какую "кучу", фильтр filterNotExist он уже связан с объектом ScVwSLPBalanseFApp, и у этого фильтра формируется подфильтр. Но я пытаюсь реальзовать конструкцию (spect."ScDate" = a."ScDate") из моего запроса, но не выходит.

Алла Савельева,

Да пример похожий, такой фильтр построить я могу, но там нет интересующего меня момента, это join в подзапросе, а именно сравнение колонки этого join'a "ScDate" с колонкой "ScDate" основного объекта  "ScVwSLPBalanseFApp".

На академми сказано, что фильтр createFilter 

leftColumnPath Путь к проверяемой колонке относительно корневой схемы rootSchema.

rightColumnPath Путь к колонке-фильтру относительно корневой схемы rootSchema.



т.е. rightColumnPath это пусть у колонке главной схемы фильтра, а не основного объекта?!

 

В общем я так понимаю такой фильтр построить нельзя в принципе, в bpm?

select a.* from "ScVwSLPBalanseFApp" a
  where NOT EXISTS (SELECT t.* FROM "SpecInCondition" t 
      LEFT JOIN "SpecTableValue" spect ON spect."Id" = t."SpecTableValueXId"
      WHERE t."ScParentSCFApplication" = a."ScFApplicationId" AND spect."ScDate" = a."ScDate")

 

Дульский Александр,

В теории средствами bpm'online такой фильтр построить возможно.

Вы смотрели, какой запрос идет в базу данных?

Еще можно рассмотреть вариант реализации на стороне сервера, если с клиентом не получается.

Думаю, что в данном случае все можно сделать гораздо проще, Вы можете реализовать sql-представление, за основу которого взять именно этот запрос и дальше уже с ним работать.

Александр, насколько понимаю, этот фильтр без передаваемых в него параметров, а объект ScVwSLPBalanseFApp сделан из view? В таком случае можно в эту же или в новую view прямо вписать это условие, чтобы оно всегда применялось. PS: пока писал, Алла выше посоветовала то же самое.laugh

Показать все комментарии