Terrasoft.createCompareFilter, фильтрация справочника BPM 7

Добрый день!
BPM 7.1
у меня возникла проблема написать, вроде на первый взгляд не сложная, простой фильтр котрорый должен срабатывать при открытии Lookup.

type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
name: 'UsrPlanningPrice',
columnPath: 'UsrPlanningPrice',   //справочник, таблица [UsrCropInPlanning]
dataValueType: Terrasoft.DataValueType.LOOKUP,
visible: true,
filter: function() {
        var purchaseDate = this.get('UsrDate');
        if (!Ext.isEmpty(purchaseDate)) {

                var subSelect = Ext.create('Terrasoft.EntitySchemaQuery', {
                        rootSchemaName: 'UsrPlanning',
                        rowCount: 1
                });

                subSelect.addColumn('Id');
               
                subSelect.filters.add("TypeFilter",
                        subSelect.createColumnFilterWithParameter(
                        Terrasoft.ComparisonType.EQUAL,
                        'UsrType',
                        '1CC0703B-FA0D-4711-A1E4-14DEFA3C19EA')); //const
                               
                subSelect.filters.add("DateFilter",
                        subSelect.createColumnFilterWithParameter(
                        Terrasoft.ComparisonType.LESS_OR_EQUAL,
                        'UsrDate',
                        purchaseDate));

                return Terrasoft.createCompareFilter(
                        Terrasoft.ComparisonType.EQUAL,
                        'UsrPlanning',
                        subSelect);
        }
}

в результате хочу:

SELECT TOP 15 [UsrCropInPlanning].[Id] [Id]
        ,[UsrCropInPlanning].[UsrName] [UsrName]
FROM [dbo].[UsrCropInPlanning] [UsrCropInPlanning]
WHERE [UsrCropInPlanning].[UsrPlanningId] = (SELECT
        TOP 1 [Id]
        FROM [dbo].[UsrPlanning]
        WHERE UsrTypeId = @P1 AND [UsrPlanning].[UsrDate] = @P2)

то есть мне нужно отобрать в таблице поля справочника UsrPlanningPrice только те записи которые относяться к одному "планированию" выбраному по указаной дате.

прошу помочь, либо сказать как такое можно реализовать?
спасибо.

Нравится

5 комментариев

Добрый день!

Воспользуйтесь бизнес-правилом с типом "Фильтрация". Ниже пример из документации.

{
    type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
    name: 'Contact',
    columnPath: 'Contact',
    dataValueType: Terrasoft.DataValueType.ENUM,
    visible: true,
    rules: [{
        //Указываем тип правила
        ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
        //Указываем будет ли обратное автозаполнение
        autocomplete: true, 
        //Указываем мета-путь относительно базового обьекта('Contact')
        //по которому будем фильтровать
        baseAttributePatch: 'Account',
        //Указываем тип фильтрации
        comparisonType: Terrasoft.ComparisonType.EQUAL,
        //Указываем тип значения для фильтрации
        type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
        //Указываем атрибут модели для сравнения (если тип значения - атрибут) 
        attribute: 'Account',
        //Указываем мета-путь значения в выбранном атрибуте (если нужно)
        attributePath: '',
        //Если тип значения не атрибут, указываем значение 
        //(константа | имя системной настройки | имя системного значения)
        value: ''
    }]
}

Дмитрий, спасибо за предоставленный пример.

у моего случая есть одна особенность, записей в таблице может не быть за указаное число и нужно брать первый что был до указаной даты, для этого я и написал условия "TOP 1" и "<=":

SELECT TOP 1 
	[Id]
FROM [dbo].[UsrPlanning]
WHERE UsrTypeId = @P1
	AND [UsrPlanning].[UsrDate] <= @P2

Владимир, здравствуйте.

Попробую уточнить возможна ли такая реализация и сообщу Вам результат завтра в этой теме в течении дня.

Дмитрий, сообщите пожалуйста что удалось выяснить по данному вопросу.

С уважением,
Владимир Саварин
Айти-Сфера

Владимир, здравствуйте. С фильтрацией по типу и по дате проблем нет (можно указать два и более бизнес правила фильтрации), а вот вызвать топ(1), к сожалению, не выйдет. Возможно следует наложить дополнительные фильтры? Если они значения не имеют, тогда без разницы что выберет пользователь с этого набора.

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