Добрый день!
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 только те записи которые относяться к одному "планированию" выбраному по указаной дате.
прошу помочь, либо сказать как такое можно реализовать?
спасибо.
Нравится
Добрый день!
Воспользуйтесь бизнес-правилом с типом "Фильтрация". Ниже пример из документации.
[javascript]
{
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: ''
}]
}
[/javascript]
Дмитрий, спасибо за предоставленный пример.
у моего случая есть одна особенность, записей в таблице может не быть за указаное число и нужно брать первый что был до указаной даты, для этого я и написал условия "TOP 1" и "<=":
[sql]
SELECT TOP 1
[Id]
FROM [dbo].[UsrPlanning]
WHERE UsrTypeId = @P1
AND [UsrPlanning].[UsrDate] <= @P2
[/sql]
Владимир, здравствуйте.
Попробую уточнить возможна ли такая реализация и сообщу Вам результат завтра в этой теме в течении дня.
Дмитрий, сообщите пожалуйста что удалось выяснить по данному вопросу.
С уважением,
Владимир Саварин
Айти-Сфера
Владимир, здравствуйте. С фильтрацией по типу и по дате проблем нет (можно указать два и более бизнес правила фильтрации), а вот вызвать топ(1), к сожалению, не выйдет. Возможно следует наложить дополнительные фильтры? Если они значения не имеют, тогда без разницы что выберет пользователь с этого набора.