Пример исходного текста объекта для Ultima-S

Следует отметить, что хранимые процедуры для объектов Ultima-S пишутся не на чистом Transact-SQL (хотя и так можно), а с использованием макросов. Специальная программа CASP раскрывает макросы в TSQL и компилирует процедуры в сервер, также облуживает версионность процедур. Макросы в основном скрывают и облегчают работу через объектные протоколы обмена, т.е. реально за ними стоят команды типа insert/update Detailed и т.д.

Каждая процедура обработчик события содержит три параметра, из которых наиболее важен @p1. Он играет роль self-указателя (UDN), чтобы обработчик мог узнать с каким именно экземпляром объекта он работает.

Приведен пример простейшего объекта с двумя полями, который может использоваться как элемент справочника. Обратите внимение, что данный пример иллюстрирует как объект работает с собственной таблицей данных SocratData. Естественно пример искусственный для демонстрации технологии. Такой объект в Ultima-S можно создать без программирования (пользователь может из интерфейса создавать производные классы существующих объектов и добавлять к ним новые поля).

---Install

create procedure InstallSocrat

-- Процедура установки объекта. Создает таблицу для его данных и регистриует сам объект.

as

create table SocratData( UDN int, Data varchar(255))

exec ObjCreateClass 'Socrat', 'Socrat', 'Doc', 0,0,0,0,0 -- Объект унаследован от класса 'Doc'

print 'Объект Socrat успешно установлен'

go

 

CREATE PROCEDURE edit_gets_Socrat_

@p1 integer, @p2 integer, @p3 integer

-- Обработчик события "Get Schema", которое возвращает экранный вид объекта при его

-- создании (Ultima-S.exe делает exec GetSchema @DocClass='Socrat', @Folder)

AS

BeginDetail -- Подготовка объектного протокола обмена с клиентом БД в буферной таблице Detailed

WindowTitle({'Новый Socrat'}) -- Заголовок окна

EditString 'Name', 'sName', '' -- Поле редактирования типа String с лейблом "Name".

EditString 'Data', 'sData', ''

GO

 

CREATE PROCEDURE edit_cre_Socrat_

@p1 integer, @p2 integer, @p3 integer

-- Обработчик события "Create" вызывается после gets при записи вновь созданного объекта (Ultima-S.exe делает exec PutDown @UDN, @Folder, @newUDN output)

AS

declare @cnt integer

-- Name записываем в Docs

update Docs set Name=

GetString({'Name'}) -- Извлекаем поле из таблицы обмена объектного протокола с клиентом Detailed

where UDN=@p2

insert SocratData(UDN, Data)

select @p2, GetString({'Data'})

GO

CREATE PROCEDURE edit_getp_Socrat_

@p1 integer, @p2 integer, @p3 integer

-- Событие "Get Properties" выдает набор свойств объекта, которые отображаются как popup-меню объекта в клиенте БД

-- (Ultima-S.exe делает exec GetProperties @UDN)

AS

BeginProperties

ViewProperty 'view','Просмотр Socratа'

EditProperty 'edit','Редактирование Socratа'

GO

CREATE PROCEDURE edit_read_Socrat_

@p1 integer, @p2 integer, @p3 integer

-- Событие "read for edit", считывает на редактирование объект в клиент

-- (Ultima-S.exe делает exec DoDetail @UDN, @ViewMode='edit', @Folder integer)

AS

BeginDetail

WindowTitle({'Socrat'})

EditString 'Name', 'sName', Name

from Docs where UDN=@p1

EditString 'Data', 'sData', Data

from SocratData where UDN=@p1

GO

 

CREATE PROCEDURE edit_put_Socrat_

@p1 integer, @p2 integer, @p3 integer

-- Событие "Put down" вызывается при записи объекта пользователем после его редактирования

-- (Ultima-S.exe делает exec PutDown @UDN)

AS

declare @ret int, @name varchar(128), @Data varchar(128)

VarString({@name},{'Name'})

VarString({@Data},{'Data'})

update Docs set Name=@name where UDN=@p1

Syncronize({@p1}) -- Указание клиенту БД на необходимость синхронизации полей объекта отображаемых в его списках объектов с новыми значениями в БД

update SocratData set Data=@name where UDN=@p1

GO

 

CREATE PROCEDURE view_read_Socrat_

@p1 integer, @p2 integer, @p3 integer

-- Событие "read for view", считывает на просмотр объект в клиент

-- (Ultima-S.exe делает exec DoDetail @UDN, @ViewMode='edit', @Folder)

AS

BeginDetail

WindowTitle({'Socrat'})

ViewString 'Name', 'sName', Name

from Docs where UDN=@p1

ViewString 'Data', 'sData', Data

from SocratData where UDN=@p1

GO