Terrasoft.createCompareFilter, фильтрация справочника BPM 7
Добрый день!
BPM 7.1
у меня возникла проблема написать, вроде на первый взгляд не сложная, простой фильтр котрорый должен срабатывать при открытии Lookup.
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);
}
}
в результате хочу:
,[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 только те записи которые относяться к одному "планированию" выбраному по указаной дате.
прошу помочь, либо сказать как такое можно реализовать?
спасибо.
Нравится
Добрый день!
Воспользуйтесь бизнес-правилом с типом "Фильтрация". Ниже пример из документации.
{ 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), к сожалению, не выйдет. Возможно следует наложить дополнительные фильтры? Если они значения не имеют, тогда без разницы что выберет пользователь с этого набора.