- •4.1. Создание и вызов методов класса. Объектный синтаксис и встроенный sql.
- •«Номер буква — руководитель — количество_учеников»
- •«Направление - Номер буква — руководитель — количество_учеников»
- •5.1. Создание и вызов метода класса. Объектный синтаксис
- •6.1. Создание процедур. Виртуальные вызова и полиморфизм. Динамический sql
- •6.2. Освоить работу с запросами
- •Дополнительное задание:
- •Вопросы для самопроверки:
- •В отчет:
6.1. Создание процедур. Виртуальные вызова и полиморфизм. Динамический sql
В среде Cache` Студия создать процедуру InYear(номер), которая выдает список учеников, имеющихся в указанных классах, и информацию об их Классах. Входной параметр — номер. Процедура создает и выполняет динамический запрос SQL, который возвращает ID учеников, Классы которых имеют указанный номер, с сортировкой по букве Класса. На основе ID открываются объекты учеников (метод %OpenId()), и на экран выводятся их ФИО и результат выполнения функции Inf() для Классов ученика.
Пример процедуры:
Proc(параметры) Public
{
код процедуры
quit
}
Пример работы с динамическим запросом:
set o=##class(%ResultSet).%New("%DynamicQuery:SQL") do o.Prepare("select поля from таблица where условие" ) do o.Execute() while o.Next() { set a=o.Data("поле") write !,a }
В среде Cache` Terminal вызвать процедуру:
do процедура^программа(параметр)
Преобразовать процедуру в метод класса ученика и продемонстрировать ее выполнение в Терминале как метод класса и в Портале как хранимую процедуру.
6.2. Освоить работу с запросами
В среде Cache` Студия создать запрос InDop(направление), который возвращает список учеников, учащихся в СцецКлассах (по указанному направлению), а также название и руководителя Класса.
Определить запрос как хранимую процедуру и продемонстрировать ее выполнение в Портале.
Дополнительное задание:
Задание 7.1. Работа с коллекциями.
В класс "ученик" - добавить свойство:
Prize - победы на конкурсах — список (массив) строковых.
В среде Cache` Портал (раздел SQL, пакет USER) продемонстрировать выполнение SQL операторов для выполнения запросов, например:
Просмотр списка всех учеников, имеющих победы.
Добавление/удаление победы ученику.
В среде Cache` Terminal продемонстрировать (или написать соответствующую процедуру) для добавления/удаления победы, используя объектный синтаксис.
В среде Cache` Terminal продемонстрировать (или написать соответствующую процедуру) для добавления/удаления победы, используя глобалы.
Задание 7.2. Преобразование классов объектов.
В среде Cache` Terminal продемонстрировать (или написать соответствующую процедуру на языке Cache` Object Script в среде Cache` Studio и вызвать ее из среды Cache` Terminal) преобразование объекта класса «Класс» в объект класса «СпецКласс» и наоборот с указанием направления. Реализуется через обращение к глобалам.
Задание 8. Дополнительные возможности работы с объектами
8.1. Скрытые свойства. Вложенные объекты
Создать класс Price (взнос) — ВСТРОЕННЫЙ, содержащий поля:
sum (общая сумма взносов) — целое,
уear (год последнего взноса) — целое.
В класс "ученик" - добавить свойство:
many (прибыль) — объект класса взнос, СКРЫТОЕ (устанавливается в Инспекторе свойств в Студии).
и методы:
szp (сумма, год) - устанавливает значения суммы и года для взноса ученика, выходных параметров нет. Обращение к полям через объектный синтаксис.
gzp() — возвращает значение суммы взноса за текущий год.
В среде Cache` Терминал открыть объект ученика и продемонстрировать вызов методов для задания и просмотра его взносов. В среде Портала продемонстрировать содержимое таблицы ученик.
8.2. Переопределение обработчиков событий
Создать класс Arhiv (архив) — хранимый, содержащий поля:
fio — строковое (ученик),
name — строковое (класс=номер и буква),
his (источник записи) — строковое.
В классе "ученик" переопределить метод класса для обработки события %OnDelete() так, чтобы он при удалении ученика добавлял в Архив запись с названием Класса удаляемого ученика (использовать встроенный SQL). Значение поля his = «obj».
В Терминале удалить ученика (метод %DeleteId()). В Портале продемонстрировать содержимое таблицы Архив.
В Портале удалить ученика (sql запрос DELETE). В Портале продемонстрировать содержимое таблицы Архив.
8.3.Вычисляемые поля
В класс "Класс" - добавить свойство:
sal (сумма всех взносов) — целое, ВЫЧИСЛЯЕМОЕ.
и переопределить его методы:
GET — возвращает суммарные взносы учеников для данного Класса (использовать встроенный SQL),
SET — для всех учеников данного Класса увеличивает сумму взносов на указанную (использовать встроенный SQL).
В среде Cache` Terminal открыть объект класса и продемонстрировать работу с вычисляемым полем:
write объект.sal
set объект.sal=55
В среде Портала продемонстрировать соответствующие изменения в таблице учеников.
Задание 9: Дополнительные возможности работы с таблицами
9.1. Вычисляемые поля таблиц
В класс "Класс" - добавить свойство:
acol (средние взносы всех учеников данного Класса) — целое, SQL-ВЫЧИСЛЯЕМОЕ. Не переопределены методы Get и Set. Определить SQL-формулу для вычисления.
Пример:
Property cs As %Integer [ Calculated,
SqlComputeCode = { set n={поле} &sql(select поле into :c from таблица where поле=:n) set {cs}=c}, SqlComputed ];
В классе "СпецКласс" - переопределить свойство:
acol для вычисления средних взносов учеников за текущий год .
В среде Cache` Портал продемонстрировать содержимое таблиц Класс и СпецКласс.
9.2. Триггеры
В класс "ученик" добавить триггер:
ПОСЛЕ УДАЛЕНИЯ - при удалении ученика добавлять в Архив запись с названием Класса удаляемого ученика (использовать встроенный SQL). Значение поля his = «sql».
В Терминале удалить ученика (метод %DeleteId()). В Портале продемонстрировать содержимое таблицы Архив.
В Портале удалить ученика (sql запрос DELETE). В Портале продемонстрировать содержимое таблицы Архив.