[
Выше] [Начало_этой_части] [Конец_этой_части] [Далее]===========================================
Глава содержит:
Сервер объектов Cache для ActiveX
Объекты Cache и Visual Basic
Конфигурирование проекта Visual Basic
Манипулирование объектами Cache в Visual Basic
Объекты Cache обеспечивают связь широкого разнообразия клиентских приложений и инструментальных средств через интерфейс ActiveX:
Объекты Cache включают следующие компоненты ActiveX:
Сервер объектов Cache для ActiveX: Сервер автоматизации ActiveX, который представляет объекты Cache как объекты ActiveX.
Visual Cache: набор инструментальных средств, которые расширяют прикладное развитие в Visual Basic. Эти инструментальные средства включают управление связыю объектов Cache (Cache Object Link Control), управление списками Cache (Cache List Control), управление запросами Cache (Cache Query Control) и мастера форм объектов Cache (Cache Object Form Wizard):
Сервер объектов Cache для ActiveX
Сервер объектов Cache для ActiveX – сервер автоматизации ActiveX, который дает приложениям клиента доступ к сервер-ориентированным объектам Cache. Внутренне, сервер объектов Cache для ActiveX создает объект ActiveX, который отражает объект на сервере Cache. Объектные свойства и методы представлены как свойства и методы ActiveX. Когда методы вызваны, они выполняются на машине сервера.
Каждый объект клиента Cache ObjInstance может обратиться к объекту на сервере. Возможно, что несколько объектов клиента обращаются к одному и тому же объекту на сервере. В любом случае, индекс ссылки серверного объекта увеличивается на единицу, если любые клиентские объекты связываются с серверным объектом.
Клиентские объекты, которые выполняют специальные функции (например, объекты SysList и ResultSet) и не являющиеся объектами Cache, не могут обращаться к объекту на сервере.
Клиентский объект Cache – объект ActiveX, использующий указатель на интерфейс IDISPATCH ("объект" в Visual Basic).
Например, можно обращаться к свойствам и методам объекта Patient из Visual Basic, используя следующий код:
patient.Name
’ возвращает значение Nama для объекта patient
patient.Admit
`запускает метод Admit() объекта patient на сервере
В отличие от типичных серверов автоматизации ActiveX, сервер объектов Cache для ActiveX не требует регистрации каждого класса объектов, который определен в операционной системе клиента. Сервер объектов Cache для ActiveX определяет информацию о классе во время выполнения. Это позволяет разрабатывать большие приложения со многими машинами клиента и многими сервер-ориентированными объектами без опасений относительно поддержки системного реестра ActiveX. Можно также
генерировать статическую библиотеку типов объектов для ActiveX, используя ExportTLBList^% apiOBJ().Сервер объектов Cache для ActiveX состоит из шести типов объектов ActiveX:
Cache ObjInstance: клиентский серверный объект Cache. Для каждого серверного объекта Cache в приложении клиента имеется один объект Cache ObjInstance.
Cache Factory: Объект Factory. Приложения используют этот объект для создания и управления Объектами Cache. Приложение требует создания только одного объекта класса Cache Factory.
Cache SysList: Объект манипуляции списком. Приложения используют этот объект, чтобы создавать и управлять данными Cache в формате $List.
Cache ResultSet: Объект обработки запроса. Приложения используют этот объект, чтобы выполнять запросы и обрабатывать результаты этих запросов.
Cache BinaryStream: Объект манипуляции двоичными потоками. Приложения используют этот объект для создания и управленияь данными в двоичных потоках Cache.
Cache CharStream:
Объект манипуляции символьными потоками. Приложения используют этот объект для создания и управленияь данными в символьных потоках Cache.В дополнение к обеспечению доступа к Cache из любого приложения, поддерживающего объекты ActiveX, интерфейс Cache ActiveX включают специальные инструментальные средства, именуемые Visual Cache, для использования только в Visual Basic. Хотя все примеры в этой главе используют Visual Basic, они не используют Visual Cache.
Конфигурированиее проекта Visual Basic
Хотя можно использовать объекты Cache в Visual Basic без настройки, проект Visual Basic следует настроить, если требуется использовать ранннее связывание. Ранннее связывание – особенность Visual Basic, которая позволяет объявлять объекты так, чтобы они несли информацию относительно их типа.
Например, с помощью раннего связывания можно определить:
Dim List as CacheObject.SysList
Раннее связывание также обеспечивает всплывающие меню, которые показывают возможные элементы завершения инструкции:
Раннее связывание также обеспечивают всплывающие окна синтаксиса для элементов объектов Cache:
Процесс настройки проекта Visual Basic состоит из выбора проектных ссылок. Когда в Visual Basic первый раз используется объект Cache, нужно добавить cacheobject.dll к проекту перед выбором проектных ссылок, для чего следует выполнить следующие действия:
Открыть окно ссылок, используя пункт меню Project|References.
Нажать на кнопку FIND.
Найти cacheobject.dll в каталоге <Cache root>\bin (<Cache root> – корневой каталог Cache) и дважды щелкнуть по нему.
Выбрать проектные ссылки, для чего нужно:
Открыть окно ссылок, используя пункт меню Project|References.
Выбрать переключатель слево от CacheObject.
Манипулирование объектами Cache в Visual Basic
В этой секции содержатся темы:
Соединение с сервером
Создание нового экземпляра объекта
Сохранение объекта
Открытие существующего объекта
Использование объектов Cache в Visual Basic
Использование функциональных возможностей обратной связи в Visual Basic
Запуск запроса в Visual Basic
Перехват ошибок в Visual Basic
В этом разделе экстенсивно используются объекты Cache Factory. Секция Объекты Cache Factory завершает описание этих объектов и их методов.
Как правило, одно из первых действий, выполняемых приложением клиента, - создание объекта Cache Factory и установка соединения с машиной сервера, содержащей объекты Cache.
Например, в рамках Visual Basic следующий код обеспечивает один из способов сделать вышесказанное:
` Программа Visual Basic
option Explicit
Dim factory As CacheObject.Factory
Private Sub Form_Load()
` Создание объекта Factory
` Следует использовать "Set", чтобы присвоить значение объекту
Set factory = CreateObject("CacheObject.Factory")
` Соединение с сервером, если его нет
If Not factory.IsConnected() Then
Dim connectstring As String
` Можно явно определить строку подключения:
connectstring = "cn_iptcp:127.0.0.1[6001]:USER"
‘ Можно поочередно включать диалог подключения
‘ Этот метод возвращает строку подключения.
connectionstring = factory.ConnectDlg()
Dim success As Boolean
success = factory.Connect(connectstring)
End If
Сначала нужно создать объект Cache Factory, вызвав функцию C
reateObject Visual Basic:Set factory = CreateObject("CacheObject.Factory")
CreateObject завершится неудачно, если не найдет или не сможет загрузить cacheobject.dll (который содержит объект Cache Factory).
Можно проверить объект Cache Factory на наличие установки подключения, используя метод Factory.IsConnected(). Этот метод возвращает истину, если подключение существует.
Затем, используя объект Cache Factory, выполняется подключение к серверу, используя метод Connect() объекта Cache Factory:
success = factory.Connect(connectstring)
Connect() выполняет строку подключения, содержащую протокол подключения, адрес IP или Полностью Квалифицированное Имя домена (FQDN) и номер порта, и рабочую область (namespace), отделенные двоеточиями. Протокол подключения – всегда cn_iptcp, указывает на то, что используется протокол TCP/IP. Адрес IP и порт вместе уникально определяют определенный сервер Cache. Номер порта задается в квадратных скобках ("[" и "]") сразу после адреса IP или FQDN. Namespace определяет, в какой рабочей области находятся пользовательские объекты Cache. Если namespace не указано, приложение соединится с namespace, задаваемой по умолчанию.
Можно непосредственно передавать строку подключения методу Connect() или можно позволить конечным пользователям определять информацию подключения в диалоговом окне подключения. Этот диалог появляется всякий раз, когда выполняется метод ConnectDlg() объекта Cache Factory. Как только конечный пользователь определит информацию подключения и щелкнет кнопку Okay, метод Conn
ectDlg() возвращает результирующую строку подключения, которую можно передать методу Connect() для выполнения соединения.Метод Connect() возвращает Истину, если соединение с сервером прошло успешно, и – Ложь, если соединение не выполнено.
Создание нового экземпляра объекта
Можно создать новый экземпляр объекта Cache, используя метод New() объекта Cache Factory:
Dim Patient As Object
Set Patient = factory.New("Patient")
Метод New() берет имя класса Cache как аргумент. New() делает следующее:
Он создает новый образец указанного объекта на сервере. В этом случае, это эквивалентно запросу ##class(Patient).%New() на сервере: возвращает значение OREF для серверного объекта на Сервер Объектов Cache для ActiveX.
Метод создает новый образец объекта ActiveX у клиента, который связан с серверным объектом. Возвращает маркер (дескриптор) (LPDISPATCH) этому объекту ActiveX.
Если New() не может создать указанный объект, он возвращает состояние ошибки.
Можно сохранить экземпляр независимо хранимого объекта, используя его метод %Save() (называемый sys_Save в Visual Basic). Следует обратить внимание, что sys_Save – метод объекта Cache, а не объекта Cache Factory. Например:
Dim status As String
status = patient.sys_Save
patient.sys_Close
Set patient = Nothing
Примечание: после завершения операций с объектом следует вызвать метод sys_Close объекта, чтобы закрыть объект на сервере. Кроме того, нужно заставить patient в Nothing закрыть объект в V
isual Basic.Открытие существующего объекта
Чтобы загрузить существующий объект Cache из базы данных, нужно использовать метод Open() объекта Cache Factory. Например:
Dim Patient As Object
Set Patient = factory.Open("Patient", oid)
Open() имеет два аргумента: имя открываемого класса Cache OID, с которым объект был сохранен в базе данных. Значение OID – строка в формате списка Cache. Open() делает следующее:
Он загружает указанный объект в память на сервере. В этом случае, это эквивалентно запросу ##class(Patient).%Open(oid) на сервере. Метод возвращает значение OREF серверного объекта на Сервер Объектов Cache для ActiveX.
Он создает новый образец объекта ActiveX у клиента, который связан с серверным объектом. Метод возвращает маркер (дескриптор) этого объекта ActiveX.
Если Open() не может открыть указанный объект(цель), то возвращается состояние ошибки.
Примечание: Если требуется открыть определенный объект, используя значение OID, задаваемое "вручную", можно использовать метод OpenId() объекта Cache Factory:
Dim Patient As Object
Set Patient = factory.OpenId(“Patient”,”22”)
OpenId() открывает объект класса с указанным именем класса и идентификатором образца.
Использование объектов Cache в Visual Basic
Как только экземпляр объекта Cache создан, вызывав методы New() или Open() объекта Cache Factory, объект можно использовать (как и любой другой объект Visual Basic).
Например, можно получать и устанавливать значение свойства:
Dim name As String
name = patient.Name
patient.Name = name
Можно вызывать методы на объект (обратите внимание, что методы выполнены на сервере):
patient.Admit()
Имеются некоторые различия между использованием объектов в Visual Basic и Cache ObjectScript: vетоды Cache ObjectScript, которые начинаются с "%", в Visual Basic начинаются с "sys _ ". Следовательно, метод %Save() ObjectScript. – это метод sys_Save() в Visual Basic.
Также следует отметить, что не следует пологаться на заданное по умолчанию свойство объектов Visual Basic.
Например, нужно использовать:
patient.Name = txtName.Text
вместо:
patient.Name = txtName ` Не используйте синтаксис свойств по умолчанию
Использование функциональных возможностей обратной связи в Visual Basic
Сервер объектов Cache для ActiveX поддерживает функциональные возможности обратной связи через метод SetOutput() класса Factory. Этот метод позволяет направлять системный вывод в приложение клиента. Например:
Set factory = CreateObject("CacheObject.Factory")
factory.SetOutput Text1
' Системный вывод теперь направлен в Text1
Чтобы отключать функциональные возможности вывода, можно вызывать SetOutput с пустой строкой:
factory.SetOutput ""
ual BasicCache обеспечивает устойчивый интерфейс для выполнения запросов. К этому интерфейсу можно обращаться из ActiveX, используя объект ResultSet. Объекты ResultSet существуют только в ActiveX; они не имеют никаких соответствующих объектов в Cache. Каждый объект ResultSet связан с определенным запросом класса Cache.
Например, выполнение запроса ByName в классе Person:
Dim rset As CacheObject.ResultSet
Dim columns As Integer
Set rset = factory.ResultSet("Person","ByName")
‘
Определение числа столбцов с данными.columns = rset.GetColumnCount()
‘
Теперь запускается запрос ByName, возвращающий всех людей,‘
чьи имена начинаются с указанного символа.rset.Execute("A")
‘
Цикл с возвратом строк и доступом к данным.While rset.Next()
For counter = 1 To columns
Print rset.GetData(counter)
Next counter
Wend
‘
Закрытие набора результатов.rset.Close()
В этом примере можно выполнять запрос ByName, определенный в классе Person (Человек). Этот запрос возвращает все объекты людей, чьи имена начинаются с указанного символа ("A"). После выполнения запроса можно двигаться от одной строки к следующей, вызывая rset.Next(). Можно использовать rset.GetColumnCount(), чтобы выяснить, сколько столбцов находится в каждой строке данных; затем, используется цикл FOR, в котором печатаются значения, сохраненные в каждом столбце текущей строки. Цикл с условием продолжения While выполняет перемещение от одной строки к следующей. Вместе, они позволяют напечатать все данные, возвращенные запросом. Как только все данные обработаны, следует
использовать rset.Close(), чтобы закрыть набор результатов.Перехват ошибок в Visual Basic
Объект Cache Factory вызывает ошибку Visual Basic, если он сталкивается с состоянием ошибки. В этом случае можно получить информацию об ошибке, используя объект err Visual Basic. Например:
Private Sub OpenObject(oid As String)
‘
Установка обработки ошибкиOn Error GoTo error_trap:
’
Попытка открыть несуществующий объектDim Patient As Object
Set patient = factory.Open("Patient", oid)
’......
Exit Sub
Error_trap:
‘
Ошибка дескриптора (показ строки ошибки в диалоговом окне)MsgBox (Err.Description)
End Sub
Поочередно можно использовать метод GetErrorText() класса Factory. Этот метод берет свойство описания сгенерированного объекта(цели) ошибки и возвращает текст сгенерированной ошибки. Например:
‘
Cache не мог сохранить класс MyClass.‘
Возврат ошибки, сформированной объектом errmsg = factory.GetErrorText(err.description)
‘
msg теперь содержит строку "Unable to save class: MyClass" (“Невозможно'
сохранить класс: MyClass”)Существуют три типа ошибок Cache в ActiveX:
Код ошибки |
Описание |
9990 |
Произошла Ошибка при попытке создать объект. Следует проверить, что класс, к которому делается попытка обращения, существует в namespace на выбранном сервере. |
9991 |
Произошла системная ошибка Cache. |
9992 |
В методе произошла Ошибка с возвратом кода состояния в %Status, установленным в Ложь. |
===========================================
[
Содержание_документа] [Конец_документа][
Выше] [Начало_этой_части] [Конец_этой_части] [Далее]===========================================
По вопросам поддержки любых продуктов InterSystems Corporation обращайтесь:
Россия 121019, Москва, Волхонка, 6, #14
Тел
.: +7 095 203-4649Факс
: +7 095 956-8268 info@intsys.dol.ru http://www.intersystems.ru
Copyright © 1999, InterSystems Corporation. Все права защищены.