Объектный интерфейс IModify |
Для унификации способов модификации vip-объектов используется следующий obj-интерфейс:
objInterface IModify; function DoInsert : word; function DoUpdate : word; function DoFlush : word; function DoDelete : word; end;
При компиляции прототипа obj-интерфейса происходит создание константы pnAnyProperty идентифицирующей любое свойство. Это значение можно использовать в функции IsPropertyModified.
Каждое свойство имеет признак измененности. Этот признак выставляется в true, если данному свойству было присвоено значение.
Если прикладной программист желает, чтобы его vip-объект можно было сохранять /изменять /удалять из БД, то он должен:
имплементировать вышеописанный obj-интерфейс;
реализовать функции имплементируемого obj-интерфейса, в которых собственно и производить сохранение, изменение и удаление экземпляра в БД.
Пример:
vipInterface twKatPersons implements IKatPersons, IModify; //************************************************************ interface twKatPersons; create view as select KatPersons.* from KatPersons ; //------------------------------------------------------------ . . . // реализация методов и свойств IKatPersons //------------------------------------------------------------ function IModify.doInsert : word; { Result := insert current KatPersons; } //------------------------------------------------------------ function IModify.doUpdate : word; { Result := update current KatPersons; } //------------------------------------------------------------ function IModify.doDelete : word; { Result := delete current KatPersons; } //------------------------------------------------------------ implementation IModify.doFlush abstract; index IKatPersons.KatPersons0 auto; end.
Правила реализации функций:
Все функции должны возвращать признак завершения операции (константы с перфиксом ts). Например: tsOk - в случае если операция завершена успешна.
Если функция завершена успешно, то в функции надо сбросить признак измененности всех свойств, вызвав для этого зарегистрированную сервисную функцию PropertiesAreModified c параметром flag равное false.
Так же имеются зарегистрированные сервисные функции:
function IsPropertyModified (propertyNumber : longInt ) : boolean; function PropertyIsModified (propertyNumber : longInt; flag : boolean ) : word; function PropertiesAreModified (flag : boolean) : word;