Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Справка




При выполнения были изучены основы языка Cache` Object Script и использованы следующие команды и операторы:

· для ввода данных команду read,

· для вывода - write,

· для присвоения значения переменной - set,

· для вызова процедуры - do,

· для организации циклов - for или while,

· для задания условия блок - if { } else { },

· для выходя из процедуры - quit,

· для конкатенации - оператор "_".

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

· %New() - создать объект,

· %Save() - сохранить объект в базе,

· %OpenId() - открыть объект, хранящийся в базе, по его идентификатору,

· %DeleteId() - удалить объект из базы данных,

· SetAt() - сохранить значение элемента массива,

· GetAt() - извлечь значение элемента массива.

Для обращения к базе данных можно использовать класс %ResultSet и его методы:

· Prepare() - подготовить запрос,

· Execute() - выполнить запрос,

· Next() - извлечь строку из результата запроса,

· Data() - получить значение поля в текущей строке.

Для работы с глобалами можно использовать функции:

· $Get - получить значение глобала,

· $Order - получить очередной в последовательности глобал,

· $Data - проверить существование глобала.

 

Исходный код приложения Cache` оформляется в виде проекта. Проект может содержать следующие компоненты: классы, программы, CSP-файлы. Можно создавать новые проекты, открывать и изменять существующие. Также существует возможность добавления или удаления компонентов из проекта.

Класс в Caché Studio можно создать вручную (используя конструкции UDL), или автоматически (используя Class Wizard). Для вызова мастера необходимо выбрать пункт меню Файл - Создать, нажать комбинацию клавиш Ctrl-n или кликнуть на значок панели «Стандартная». В появившемся окне необходимо выбрать элемент проекта, который нужно создать - в данном случае класс Caché (рис. 5).

Рис. 5 - Окно создания элементов проекта

Выбираем «Класс Caché» и нажимаем OK. На экране открывается окно с первым шагом создания класса.

На первом этапе мастера (рис. 6) указываются общие сведения о создаваемом класс - имя пакета, имя класса и комментарий (опционально). Если определенного пакета еще не существует в БД, тогда Caché создает новый пакет автоматически. Отмечаем имя пакета - «USER», имя класса - «Book» и комментарий - «общие сведения о книге».

Пример:Отобразить запрос на ввод и ввести с консоли имя сотрудника, название компании и должность.

Код программы выглядит так:

write !,"Завершение ввода происходит по двойному нажанию на 'Enter' ",!
for
{
read !,"Введите имя сотрудника: ",Name
quit:Name=""
read !,"Введите название компании: ",CompanyName
quit:CompanyName=""
read !,"Введите должность: ",Post
quit:Post=""
}



Команда writeвыведет сообщение на экран монитора. Восклицательный знак выполняет переход на новую строку. Далее организован цикл с помощью безаргументной формы команды for, в которой нет ни переменной цикла, ни начального, ни конечного значения. Команда read выдаст подсказку пользователю о том, что необходимо ввести, и введет ответы пользователя в переменные Name, CompanyName, Post. Далее идет постусловная конструкция вида: quit:<условие>. Команда quit выполнится, если истинно условие.

 

Пункт 2

Пример: Создим новый объект класса "Руководитель", если должность "руководитель" или объект класса "Сотрудник" в противном случае. Определить поля объекта: имя и должность.

Основной синтаксис для создания новых экземпляров объектов - это использование метода класса %New:

set oref = ##Class(ClassName).%New()

, где oref - ссылка OREF на новый объект, ClassName - это имя класса, чувствительно к регистру букв и может содержать имя пакета, ##Class() - это макровызов, который используется для вызова методов класса.

В нашем случае необходимо создать объект класса "Руководитель", если должность "руководитель". Для этого используется конструкция if:

if (Post="руководитель"){code} else {code}



В блоке кода создается новый объект:

set NewWM = ##Class(User.Manager).%New()

Далее идет строка, необходимая для указания даты и время назначения сотрудника, если он является руководителем. Используется системная переменная $Horolog, которая содержит текущее время в виде пары чисел: первое число задает внутренний формат даты, второе число задает количество секунд, прошедших с полуночи. Второй аргумент функции $ZDateTime - это формат возвращаемой даты.

Создание объекта класса "Сотрудник" в блоке кода else:

set NewWM = ##Class(User.Worker).%New()

Полностью эта часть кода выглядит так:

if (Post="руководитель")
{
set NewWM = ##Class(User.Manager).%New()
set NewWM.HireDate = $ZDateTime($Horolog,3)
}
else
{
set NewWM = ##Class(User.Worker).%New()
}
set NewWM.WorkerName = Name //определение поля имя
set NewWM.WorkerPost = Post //определение поля должность

 

Пункт 3

Пример: Используя запрос SQL, получим ссылку на компанию с указанным названием и присвоим эту ссылку полю компания.

Используем объект класса %ResultSet для подготовки динамического SQL-запроса:

set rset = ##class(%ResultSet).%New("%DynamicQuery:SQL")
Do rset.Prepare("SELECT ID FROM SQLUser.Organization WHERE Name = '"_CompanyName_"'")
Do rset.Execute() //выполнение запроса

Метод Prepare - подготавливает (компилирует) запрос для выполнения, метод Execute - выполняет запрос.

Присвоение ссылки идет в теле конструкции if в блоке кода else:

set CompanyID = rset.Data("ID")
set Company = ##class(User.Organization).%OpenId(CompanyID)

 

Пункт 4

Пример:Если компании с указанным названием не существует, то введем с консоли по запросу город, улицу и номера, создать новый объект класса компания, вызвав соответствующий метод класса .Присвоим ссылку на компанию объекту сотрудника из п.2.

Код этой части программы выглядит следующим образом:

if 'rset.Next() //проверяем, имеет ли набор данные
{
read !,"Введите город, где расположена компания: ",City
read !,"Введите название улицы, где расположена компания: ",Street
do
{
read !,"Введите дом-корпус-квартиру, где расположена компания: ",Numberz
}
while ('(Numberz ?.N1"-".N1"-".N))

set Company = ##class(User.Organization).CreateOrganization(CompanyName,City,Street,Numberz)
}
else
{
set CompanyID = rset.Data("ID")
set Company = ##class(User.Organization).%OpenId(CompanyID)
}
set NewWM.WorkerOrganization = Company
do NewWM.%Save()

Рассмотрим пояснения к тексту программы. Конструкция вида:

do
{
read !,"Введите дом-корпус-квартиру, где расположена компания: ",Numberz
}
while ('(Numberz ?.N1"-".N1"-".N))

означает, что ввод производится до тех пор, пока введенные данные не будут соответствовать шаблону ("?" - оператор соответствия шаблону).

Создаем новый объект класса "компания", вызвав соответствующий метод класса:

set Company = ##class(User.Organization).CreateOrganization(CompanyName,City,Street,Numberz)

Пояснение блока кода else смотрите выше в п.3. Присваиваем ссылку на компанию объекту сотрудника из п.2:

set NewWM.WorkerOrganization = Company

 

Пункт 5

Пример:Сохранить новый объект "Сотрудник" (или "Руководитель") в базе данных.

Для этого используется конструкция:

do NewWM.%Save()

Объединим все части и посмотрим листинг этой программы полностью.

Листинг программы

write !,"Завершение ввода происходит по двойному нажанию на 'Enter' ",!
for
{
read !,"Введите имя сотрудника: ",Name
quit:Name=""
read !,"Введите название компании: ",CompanyName
quit:CompanyName=""
read !,"Введите должность: ",Post
quit:Post=""

if (Post="руководитель")
{
set NewWM = ##Class(User.Manager).%New()
set NewWM.HireDate = $ZDateTime($Horolog,3)
}
else
{
set NewWM = ##Class(User.Worker).%New()
}
set NewWM.WorkerName = Name
set NewWM.WorkerPost = Post
set rset = ##class(%ResultSet).%New("%DynamicQuery:SQL")
Do rset.Prepare("SELECT ID FROM SQLUser.Organization WHERE Name = '"_CompanyName_"'")
Do rset.Execute()
if 'rset.Next()
{
read !,"Введите город, где расположена компания: ",City
read !,"Введите название улицы, где расположена компания: ",Street
do
{
read !,"Введите дом-корпус-квартиру, где расположена компания: ",Numberz
}
while ('(Numberz ?.N1"-".N1"-".N))
set Company = ##class(User.Organization).CreateOrganization(CompanyName,City,Street,Numberz)
}
else
{
set CompanyID = rset.Data("ID")
set Company = ##class(User.Organization).%OpenId(CompanyID)
}
set NewWM.WorkerOrganization = Company
do NewWM.%Save()
}

Теперь в среде Cache` Terminal посмотрим, как эта программа работает.

Аналогично создаются остальные классы.

Для создания новых свойств в Caché Studio используется мастер свойств. Его можно вызвать из меню «Класс» -> «Добавить» -> «Новое свойство», или нажав на следующую пиктограмму на панели «Члены». Первый шаг мастера (рис. 9) создания свойства заключается в заполнении общей информации о свойстве: имя свойства - «name» и комментария - «название книги» (опционально).

Рис. 9 – Первый шаг

 

На втором шаге (рис. 10) предлагается выбрать вид свойства - атомарное свойство (т.е. свойство типа% String,% Number, собственный тип и т.п.), коллекция или отношения.

Рис. 10 - Второй шаг мастера создания атомарного свойства

 

Рис. 11 - Третий шаг мастера создания атомарного свойства

 

На третьем шаге мастера (рис. 11) предлагается определить следующие характеристики свойства:

- Required - обязательное свойство;

- Indexed - проиндексирована свойство;

- Unique - уникальные значения в свойства;

- Calculated - данное свойство будет рассчитываться и ее значение не сохраняется в БД, а рассчитывается на основе значений других свойств;

- Sql field name - служит для определения имя свойства в SQL запросе.

На четвертом шаге мастера (рис. 12) определяются параметры свойства, с помощью которых можно, например, контролировать допустимые значения свойства.

Пятый шаг мастера (рис. 13) дает возможность определить собственные методы работы со значением свойства, такие как Get и Set.

 

Рис. 12 - Четвертый шаг мастера создания атомарного свойства

 

Рис. 13 - Пятый шаг мастера создания атомарного свойства

 

Завершаем работу мастера нажатием кнопки «Готово».

В результате работы мастера получаем выражение:

/// название книги

Property name As %String;

Аналогично создаются другие свойства-константы, ссылки на объекты, встроенные объекты, потоки данных. В случае создания ссылки на объект или встроенного объекта на втором шаге мастера необходимо выбрать категорию Persistent, или ту, к которой относится необходимый класс, и найти в ней соответствующий пакет и класс рис. 14).

Рис. 14 - Второй шаг мастера создания ссылки на объект (встроенного объекта)

 

В случае, если нужно создать свойство-коллекцию, то на втором шаге мастера нужно выбрать вид свойства «Коллекция типа» и необходимый тип коллекции, а также выбрать класс, к которому будут принадлежать все элементы данной коллекции (рис. 15).

Для создания свойства-отношения на втором шаге мастера необходимо выбрать вид свойства - отношение (рис. 16).

На третьем шаге мастера необходимо выбрать вид ссылки (one, many, parent, children), выбрать класс, с которым будет устанавливаться отношение, и выбрать поле в выбранном классе, в котором будут храниться данные, по отношению (рис. 17).

На четвертом шаге мастера Caché предлагает:

- Создать класс, с которым мы хотим установить отношения, если он еще не существует;

- Создать свойство в которой будет храниться отношение, если она еще не существует;

- Если свойство существует, ее тип изменяется;

- Создать индекс для свойства.

В результате работы получим следующие изменения в классе Book:

/// перелік кодів УДК

Relationship udk As USER.Code [ Cardinality = many, Inverse = id ];

И последующие изменения в классе Code:

Relationship id As USER.Book [ Cardinality = one, Inverse = udk ];
Index idIndex On id;

 

Рис. 15 - Второй шаг мастера создания свойства-коллекции массива

 

 

 

Рис. 16 - Второй шаг мастера создания свойства-отношения


Рис.17 - Третий шаг мастера создания свойства-отношения

 

 

 

 


mylektsii.ru - Мои Лекции - 2015-2019 год. (0.016 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал