Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab1_2012_93.doc
Скачиваний:
2
Добавлен:
13.11.2019
Размер:
67.07 Кб
Скачать

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 (взнос) — ВСТРОЕННЫЙ, содержащий поля:

  1. sum (общая сумма взносов) — целое,

  2. уear (год последнего взноса) — целое.

В класс "ученик" - добавить свойство:

  1. many (прибыль) — объект класса взнос, СКРЫТОЕ (устанавливается в Инспекторе свойств в Студии).

и методы:

  1. szp (сумма, год) - устанавливает значения суммы и года для взноса ученика, выходных параметров нет. Обращение к полям через объектный синтаксис.

  2. gzp() — возвращает значение суммы взноса за текущий год.

В среде Cache` Терминал открыть объект ученика и продемонстрировать вызов методов для задания и просмотра его взносов. В среде Портала продемонстрировать содержимое таблицы ученик.

8.2. Переопределение обработчиков событий

Создать класс Arhiv (архив) — хранимый, содержащий поля:

  1. fio — строковое (ученик),

  2. name — строковое (класс=номер и буква),

  3. his (источник записи) — строковое.

В классе "ученик" переопределить метод класса для обработки события %OnDelete() так, чтобы он при удалении ученика добавлял в Архив запись с названием Класса удаляемого ученика (использовать встроенный SQL). Значение поля his = «obj».

В Терминале удалить ученика (метод %DeleteId()). В Портале продемонстрировать содержимое таблицы Архив.

В Портале удалить ученика (sql запрос DELETE). В Портале продемонстрировать содержимое таблицы Архив.

8.3.Вычисляемые поля

В класс "Класс" - добавить свойство:

  1. sal (сумма всех взносов) — целое, ВЫЧИСЛЯЕМОЕ.

и переопределить его методы:

  1. GET — возвращает суммарные взносы учеников для данного Класса (использовать встроенный SQL),

  2. SET — для всех учеников данного Класса увеличивает сумму взносов на указанную (использовать встроенный SQL).

В среде Cache` Terminal открыть объект класса и продемонстрировать работу с вычисляемым полем:

write объект.sal

set объект.sal=55

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

Задание 9: Дополнительные возможности работы с таблицами

9.1. Вычисляемые поля таблиц

В класс "Класс" - добавить свойство:

  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 ];

В классе "СпецКласс" - переопределить свойство:

  1. acol для вычисления средних взносов учеников за текущий год .

В среде Cache` Портал продемонстрировать содержимое таблиц Класс и СпецКласс.

9.2. Триггеры

В класс "ученик" добавить триггер:

  1. ПОСЛЕ УДАЛЕНИЯ - при удалении ученика добавлять в Архив запись с названием Класса удаляемого ученика (использовать встроенный SQL). Значение поля his = «sql».

В Терминале удалить ученика (метод %DeleteId()). В Портале продемонстрировать содержимое таблицы Архив.

В Портале удалить ученика (sql запрос DELETE). В Портале продемонстрировать содержимое таблицы Архив.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]