WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 |
Cach Objects QuickStart Москва, 24 марта 2003 Copyright © InterSystems, 2003 Cach Objects QuickStart 2 Оглавление Создание класса 3 Работа с объектами в Cach Object Script 5 Создание и работа с запросами _6 Создание SQL View _7 Экспорт данных в XML-файл 7 Связанные классы8 Наследование _11 Коллекции13 Отношения _14 Сервер Cach Object для ActiveX 16 Создание проекта Visual Basic_16 Класс Factory _17 Соединение с сервером _17 Открытие существующего объекта Cach 18 Класс ResultSet 18 Мастер форм Cach (CachForm Wizard) _18 Что дальше 19 Приложение 1 _19 Приложение 2 (ClassDefinition) 20 Приложение 3 (Работа с Delphi) _20 Cach Objects QuickStart 3 Создание класса Для создания и редактирования классов в Cach предназначена утилита Cach Studio.

Подключитесь к Cach, используя Локальное соединение (File Connect).

Создайте новый проект (File New Project) и сохраните его под именем First (File Save Project). Проект Cach Studio объединяет классы, программы на CachObjectScript, Cach Basic и страницы Cache Server Pages.

Создайте новый класс Human (File New Cache Class Definition) типа Persistent.

Добавьте к классу Human два свойства (Class Add New Property):

- Name c типом %String - Age c типом Integer Cach Objects QuickStart 4 Добавьте к классу Human метод Report, не имеющий аргументов и не возвращающий никакого значения.

Обратите внимание, что каждой строчке предшествует как минимум один пробел.

Добавьте индекс по свойству Name.

Скомпилируйте класс (Ctrl + F7).

Простейший класс Human с двумя свойствами и одним методом готов.

Cach Objects QuickStart 5 Работа с объектами в Cach Object Script Войдите в Cach Terminal.

Создайте новый экземпляр объекта Human – объект h USER>set h=##class(User.Human).%New() Определите свойства объекта USER>Set h.Name=”Иван” USER>Set h.Age=11 Выполните метод Report объекта h USER>do h.Report() Имя: Иван Возраст: Сохраните и закройте объект h USER>do h.%Save() USER>kill h Таким же образом создайте и сохраните еще два объекта типа Human, например, Петр – 12 лет и Василий – 10 лет.

Откройте один из созданных объектов USER>set h=##class(User.Human).%OpenId(2) Проверьте значения его свойств:

USER>write h.Name Петр USER>write h.Age Удалите из базы этот объект.

USER>do ##class(User.Human).%Delete(h.%Oid()) Данная операция удаляет объект из базы, но не из памяти. Поэтому необходимо закрыть экземпляр объекта в памяти, не сохраняя его на диске.

USER>kill h Cach Objects QuickStart Создание и работа с запросами Создайте в классе Human при помощи мастера запросов запрос byAge. Запрос будет основан на SQL-утверждении (Implementation: This Query is based on SQL statement).

Запрос должен принимать один параметр AgeLimit, типа %Integer, и возвращать поля Name и Age, при условии, что поле Age объекта больше или равно значению параметра AgeLimit.

Возвращаемые запросом объекты должны быть отсортированы по полю Age.

Скоипилируйте класс.

В Cache Script работа с запросами выглядит следующим образом:

Открытие запроса:

USER>set rs=##class(%ResultSet).%New("User.Human.byAge") Cach Objects QuickStart Инициализация запроса:

USER>do rs.Execute(10) Переход на следующую строку результата:

USER>write rs.Next() 1 – данные присутствуют, 0 – данных больше нет.

Извлечение данных:

USER>write rs.Get("Name") Петр Закрытие запроса:

USER>kill rs Cach Terminal позволяет выполнять запрос в режиме командной строки. Для создания программ создадим в нашем проекте простейшую программу (File New Cache ObjectScript Routine), которая выводит результаты запроса на экран:

QueryHuman(AgeLimit) new rs set rs=##class(%ResultSet).%New("User.Human.byAge") do rs.Execute(AgeLimit) while rs.Next() { write "Human",! write rs.Get("Name")_" "_rs.Get("Age") write ! } quit Вы должны сохранить программу в проекте First под именем QueryHuman.MAC и откомпилировать её. Результат выполнения этой программы показан ниже:

USER>do ^QueryHuman(10) Human Петр Иван Создание SQL View Создайте новый запрос класса без параметров. Объявите его SQLView. Обратитесь к этому виду через SQL Manager.

Экспорт данных в XML-файл В Cach Studio в окне Inspector добавьте классу User.Human суперкласс %XML.Adaptor Создайте метод класса для экспорта данных в XML-файл:

Cach Objects QuickStart ClassMethod Export(file As %String) As %Status { open file:"WNS" use file write "",! write "",! set rs=##class(%ResultSet).%New("Human:Extent") set rc=rs.Execute() for { quit:'rs.Next() set id=rs.GetData(1) set human=##class(Human).%OpenId(id) do human.XMLExport() } write "",! close file quit $$$OK } Запустите метод из Терминала USER>Do ##class(User.Human).Export(“c:/humans.xml”) Присвойте значение Attribute параметру XMLPROJECTION свойства Name.

Запустите метод еще раз.

Связанные классы Создайте Persistent класс Address с атрибутами Country, City, Street и Index, причем для атрибута Street укажите максимальную длину 255. Вы можете добавлять свойства с помощью соответствующего Мастера или вручную.

Cach Objects QuickStart Для свойства Street в окне Inspector задайте значение параметра MAXLEN = 255:

Скомпилируйте класс.

Добавьте в класс Human свойство Home, типом которого будет являться Address, а поскольку Address сам является объектным классом (а не литеральным, как, например, %Integer), то атрибут Home будет представлять собой ссылку на объект типа Address.



Скомпилируйте класс Human.

В Cach Terminal создайте объекты h и a, классов Human и Address соответственно и заполните их свойства.

Cach Objects QuickStart USER>set h=##class(User.Human).%New() USER>set h.Name="Евгений" USER>set h.Age=USER>set a=##class(User.Address).%New() USER>set a.Country="Россия" USER>set a.City="Москва" USER>set a.Index=USER>set a.Street="Волхонка 6, офис 14" Присвойте атрибуту Home объекта h значение – ссылку на объект a:

USER>set h.Home=a Теперь все свойства объекта a становятся доступны через ссылку h.Home USER>write h.Home.Street Волхонка 6, офис Сохраните и закройте объект a.

USER>do a.%Save() USER>kill a Несмотря на то, что объект a больше не находится в памяти, Вы по прежнему можете обрааться к нему через ссылку h.Home:

USER>set h.Home.Country="Российская Федерация" USER>write h.Home.Country Российская Федерация Технология, позволяющая по ссылке обращаться к свойствам и методам объекта, не выполняя дополнительных операций по его открытию и закрытию, называется Свиззлинг (Swizzling).

Сохраните и закройте объект h.

USER>do h.%Save() USER>kill h Cach Objects QuickStart Наследование Создайте класс Patient, унаследованный от Human Класс Patient унаследовал от Human все свои свойства и методы. Добавьте в класс Patient новое свойство Diagnosis типа %String и переопределите метод Report таким образом, чтобы он показывал и диагноз:

write "Имя: "_..Name write ! write "Возраст: "_..Age write ! write "Диагноз: "_..Diagnosis quit В Cach Terminal создайте экземпляр класса пациент и сохраните его.

USER>set p=##class(User.Patient).%New() USER>set p.Name="Никодим" USER>set p.Age=USER>set p.Diagnosis="Ангина" USER>do p.Report() Имя: Никодим Возраст: Диагноз: Ангина Cach Objects QuickStart USER>do p.%Save() USER>kill p В Проводнике Cach посмотрите на глобаль ^User.HumanD области USER.

По структуре глобали видно, что в ней содержатся данные объектов класса Human и унаследованных от него классов. Также видно, что объекты класса и его подклассов имеют общую сквозную нумерацию, а последний сохраненный вами объект класса Patient имеет ID=5.

Поскольку класс Patient унаследован от класса Human, то любой объект класса Patient является также и объектом класса Human. Откройте объект с ID=5 как объект класса Human:

USER>set h=##class(User.Human).%OpenId(5) USER>do h.Report() Имя: Никодим Возраст: Диагноз: Ангина Как видно, объект класса Patient может быть адресован как объект своего родительского класса, но при этом продолжает себя вести как объект класса, в качестве экземпляра которого он был создан.

Cach Objects QuickStart Коллекции Добавьте к классу Patient свойство Symptoms типа %String и являющееся коллекцией типа список (List).

В Cach Terminal откройте существующий объект класса Patient.

USER>set p=##class(User.Patient).%OpenId(5) Вставка элементов в конец списка:

USER>do p.Symptoms.Insert("Кашель") USER>do p.Symptoms.Insert("Насморк") Вставка элемента в конкретное место списка:

USER>do p.Symptoms.InsertAt("Жар",2) Количество элементов в списке:

USER>write p.Symptoms.Count() Получение значения конкретного элемента:

USER>write p.Symptoms.GetAt(2) Жар Изменение значения элемента списка:

Cach Objects QuickStart USER>do p.Symptoms.SetAt("Температура",2) Удаление элемента из списка:

USER>do p.Symptoms.RemoveAt(2) Сохраните и закройте объект.

Отношения Создайте Persistent-класс Doctor со свойством Name.

Предположим, доктор может одновременно лечить нескольких пациентов, в то время как один пациент может наблюдаться только у одного доктора. В этом случае наши классы объединены отношением типа Один-ко-Многим.

У пациента создайте поле Physician, которое будет ссылкой на объект класса Doctor и объявите ее отношением типа один ко многим с мощностью связи поля Physician – One.

Укажите имя связанного свойства со стороны класса Doctor – Patients. Это свойство будет определять отношение в классе Doctor.

Скомпилируйте оба класса.

Создайте в памяти двух пациентов и доктора:

USER>set p1=##class(Patient).%New() USER>set p1.Name="Иван" Cach Objects QuickStart USER>set p2=##class(Patient).%New() USER>set p2.Name="Петр" USER>set d=##class(User.Doctor).%New() USER>set d.Name="Профессор Иванов" Свяжите пациентов и доктора двумя возможными способами:

USER>set p1.Physician=d USER>do d.Patients.Insert(p2) Теперь Вы можете получать информацию о связанных объектах с обеих сторон отношения:

USER>w d.Patients.GetAt(1).Name Иван USER>w d.Patients.GetAt(2).Name Петр USER>w p1.Physician.Name Профессор Иванов Как видите, со стороны Many (Doctor) работа с отношением аналогична работе с коллекцией, а со стороны One с обычной ссылкой.

Сохраните доктора и посмотрите на глобалы, соответствующие обоим классам.

USER>do d.%Save() Как видите, сохранение доктора привело и к сохранению пациентов.

Теперь закройте все объекты и попытайтесь удалить объект Doctor с ID=1.

USER>w ##class(User.Doctor).%DeleteId(1) 0 User.Patient.Physician USER>do $system.OBJ.DisplayError() ERROR #5823: Cannot delete object, referenced by 'User.Patient.Physician' Как видите, операция не удалась. В отношении типа Один-ко-Многим автоматически поддерживается ссылочная целостность. Пока Вы не удалите (переключите на другого доктора) всех пациентов конкретного доктора, Вы не сможете удалить доктора из базы.





Попробуйте реализовать отношение типа Parent-Child на примере классов Book и Chapter.

Обратите внимание, на то, что экземпляры Chapter хранятся в глобали класса Book, а удаление объекта Book приводит к удалению всех связанных с ним объектов класса Chapter.

Cach Objects QuickStart Сервер Cach Object для ActiveX Интерфейс Cach Objects с ActiveX позволяет организовать взаимодействие многочисленных клиентских приложений и инструментальных средств разработки (Visual Basic, Delphi, C++ Builder) с объектами Cach.

Cach Objects состоит из следующих компонентов ActiveX:

• Сервер Cach Object для ActiveX. Сервер автоматизации (automation server), представляющий объекты Cach в виде объектов ActiveX.

• Cach Object Form Wizard (мастер форм Cach). Дополнительно подключаемый модуль (Add-In) для Visual Basic, позволяющий автоматически создавать формы для быстрого доступа к объектам Cach.

Сервер Cach Object для ActiveX обеспечивает удобный доступ к объектам Cach любым приложениям, поддерживающим объекты ActiveX.

Сервер Cach Object для ActiveX – это библиотека CacheObject.dll, которая содержит шесть типов ActiveX объектов:

1. Cach Factory – фабрика объектов Cach.

2. Cach ObjInstance – класс клиентских объектов, соответствующих объектам сервера Cach 3. Cach ResultSet – интерфейс для выполнения запросов.

4. Cach SysList – класс, предназначенный для обработки данных, имеющих формат списка Cach ($LB).

5. Cach BinaryStream – интерфейс для использования потоков данных Cache.

6. Cach CharStream - интерфейс для использования потоков данных Cache.

В данном документе рассматривается использование первых трех типов ActiveX объектов.

В качестве примера для изучения ActiveX интерфейса Cach рассмотрим работу с Visual Basic.

Создание проекта Visual Basic Создайте новый стандартный проект Visual Basic.

Вы должны добавить в проект ссылку на CachObject:

1. Выберите библиотеку CacheObject (через опцию меню Project | References) Cach Objects QuickStart Если Вы не нашли библиотеку CacheObject (как правило она устанавливается автоматически), Вы должны её добавить.

2. Щелкните по кнопке Browse… 3. Выберите файл CacheObject.dll, отыскав его по вложенной папке Вашей инсталляции Cach (обычно \CacheSys\bin) и открыв щелчком по кнопке Open.

Далее в ходе создания учебного проекта будет рассмотрено использование классов Factory и ResultSet. Кроме этого, будет описана работа с Мастером форм Cach (CachForm Wizard).

Класс Factory Класс Factory предназначен для установления и управления соединением с сервером Cache.

Кроме этого, этот класс служит «фабрикой объектов» для создания экземпляров новых объектов ActiveX типа ObjInstance: либо путем открытия существующих, либо путем создания новых объектов Cach.

Класс Factory располагает следующими основными методами:

• метод Connect() устанавливает соединение с сервером Cache;

• метод ConnectDlg() открывает окно диалога для задания параметров соединения;

• метод Disconnect() разрывает соединение с сервером Cache;

• метод IsConnected() проверяет, существует ли соединение с сервером Cache;

• метод New() создает новый объект ActiveX;

• метод OpenId() открывает существующий объект, используя имя класса и ID;

Соединение с сервером Для того чтобы установить соединение с сервером Cach наберем следующий код:

Option Explicit Dim Factory As CacheObject.Factory Dim connectstring As String Dim success As Boolean Private Sub Form_Load() ‘Создаем экземпляр класса Factory ‘Для присваивания объекту значения используется Set Set Factory = CreateObject(“CacheObject.Factory”) ‘Если соединение с сервером отсутствует, создаем его If Not Factory.IsConnected() Then ‘Строка параметров соединения может быть задана явно:

connectstring = “cn_iptcp:127.0.0.1[1972]:USER” ‘В качестве альтернативы можно использовать диалоговое окно:

‘connectstring = Factory.ConnectDlg() success = Factory.Connect(connectstring) End If End Sub Cach Objects QuickStart Открытие существующего объекта Cach После соединения с сервером Cach откроем объект класса User.Human с Id=1 и выведем на экран значения свойств Name и Age этого объекта.

Для этого воспользуемся методом Open объекта Cach Factory:

Dim human As CacheObject.objinstance Set human = factory.OpenId(“User.Human”,1) Далее Вы получаете доступ к свойствам и методам этого объекта.

MsgBox (human.Name + " " + human.Age) Дополнительную информацию об интерфейсе Cach Object для ActiveX Вы можете получить в документации Cach в разделах Cach ActiveX Class Reference и Developing with Cach Objects (глава 11 «The ActiveX Binding»).

Класс ResultSet Класс ResultSet представляет собой интерфейс для выполнения запросов. Каждый объект ResultSet связывается с конкретным запросом из определения класса Cach. Объект ResultSet позволяет не только выполнить запрос, но и проанализировать результат. Объект ResultSet располагает следующими основными методами:

• метод Execute() выполняет запрос, с которым связан объект ResultSet;

• метод Next() осуществляет переход на следующую строку выборки;

• метод Get() возвращает значение из заданного поля (столбца);

• метод Close() закрывает ResultSet после завершения его использования.

Кроме этого Вы можете получить информацию о запросе с помощью методов GetParamCount(), GetParamName(),GetColumnCount() и GetColumnName().

Усовершенствуйте Ваш проект. Добавьте компонент ListBox и по какому-либо событию вызовете следующий код:

Pages:     || 2 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.