SQLWhereLanguageDef
- класс-построитель функций для наложения ограничений на вычитываемые объекты.
Существует расширение базового функционального языка SQLWhereLanguageDef
, `ExternalLangDef.
Подключение:
using ICSSoft.STORMNET.FunctionalLanguage;
using ICSSoft.STORMNET.FunctionalLanguage.SQLWhere;
Построение функции, метод GetFunction
Построение функции начинается с вызова метода ICSSoft.STORMNET.FunctionalLanguage.FunctionalLanguageDef.GetFucntion(string, params object[));
В качестве первого параметра метод принимает тип функции (список доступных функций приведен ниже). Далее метод принимает набор параметров функции, количество и типы параметров варьируются в зависимости от типа функции, подробное их описание можно посмотреть в статье, посвященной определенному типу функции.
Метод возвращает объект типа ICSSoft.STORMNET.FunctionalLanguage.Function
.
В зависимости от типа функции параметром функции GetFunction
может передаваться описание переменной, задаваемое в помощью класса VariableDef.
Наложение ограничений на перечислимый тип
[Enumerations | Перечислимые типы) хранятся в базе как строки. Соответственно, при конструировании описания переменной (VariableDef) необходимо использовать StringType . В качестве аргумента для сравнения рекомендуется использовать Caption объекта перечисления, получить Caption можно при помощи класса EnumCaption , который является частью ICSSoft.STORMNET . |
Например:
Чтобы наложить ограничение на пол клиента, необходимо составить следующую функцию:
using ICSSoft.STORMNET;
// ...
var ld = SQLWhereLanguageDef.LanguageDef;
var onlyMenFunction = ld.GetFunction(ld.funcEQ, new VariableDef(ld.StringType, Information.ExtractPropertyPath<Клиент>(x => x.Пол)), EnumCaption.GetCaptionFor(tПол.Мужской));
Наложение ограничений на компоненты даты
Чтобы наложить ограничение на часть даты (на год, месяц или день), можно воспользоваться функциями DayPart
, MonthPart
и YearPart
для задания ограничений на компоненты даты.
Пример
//ICSSoft.STORMNET.Windows.Forms.ExternalLangDef (ExternalLangDef.dll)
//ICSSoft.STORMNET.Windows.Forms.ExternalLangDeflangdef = ExternalLangDef.LanguageDef;
using ICSSoft.STORMNET.Windows.Forms;
var langdef = ExternalLangDef.LanguageDef;
var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof (Кредит), Кредит.Views.КредитE);
lcs.LimitFunction = langdef.GetFunction(langdef.funcEQ,
langdef.GetFunction("YearPart", new VariableDef(langdef.DateTimeType, "ДатаВыдачи")), "2013");
var only2013year = DataServiceProvider.DataService.LoadObjects(lcs);
lcs.LimitFunction = langdef.GetFunction(langdef.funcEQ,
langdef.GetFunction("MonthPart", new VariableDef(langdef.DateTimeType, "ДатаВыдачи")), "12");
var onlyDecember = DataServiceProvider.DataService.LoadObjects(lcs);
lcs.LimitFunction = langdef.GetFunction(langdef.funcAND,
langdef.GetFunction(langdef.funcEQ,
langdef.GetFunction("YearPart", new VariableDef(langdef.DateTimeType, "ДатаВыдачи")), "2012"),
langdef.GetFunction(langdef.funcEQ,
langdef.GetFunction("MonthPart", new VariableDef(langdef.DateTimeType, "ДатаВыдачи")), "12"));
var onlyDecember2012 = DataServiceProvider.DataService.LoadObjects(lcs);
Примеры использования
Далее будут приведены несколько примеров наложения ограничений:
Наложение ограничений на строковую переменную
var langdef = ExternalLangDef.LanguageDef;
var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof (Личность), Личность.Views.ЛичностьE);
lcs.LimitFunction = langdef.GetFunction(langdef.funcEQ,
new VariableDef(langdef.StringType, Information.ExtractPropertyPath<Личность>(x => x.Фамилия)), "Петров");
var клиентыФамилияПетров = DataServiceProvider.DataService.LoadObjects(lcs);
Наложение ограничений на мастеровой объект (по ключу)
var langdef = ExternalLangDef.LanguageDef;
var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof (Кредит), Кредит.Views.КредитE);
lcs.LimitFunction = langdef.GetFunction(langdef.funcEQ,
new VariableDef(langdef.GuidType, Information.ExtractPropertyPath<Кредит>(x => x.Личность)), "64F45BC3-339B-4FBA-A036-C5E9FE9EAE53");
var кредиты = DataServiceProvider.DataService.LoadObjects(lcs);
Наложение ограничений на мастеровой объект (по полю мастера)
var langdef = ExternalLangDef.LanguageDef;
var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof (Кредит), Кредит.Views.КредитE);
lcs.LimitFunction = langdef.GetFunction(langdef.funcEQ,
new VariableDef(langdef.GuidType, Information.ExtractPropertyPath<Кредит>(x => x.Личность.Фамилия)), "Петров");
var кредиты = DataServiceProvider.DataService.LoadObjects(lcs);
КредитE
есть мастер Личность
и его поле Фамилия
, иначе произойдёт ошибка при выполнении запроса.