Просмотр даты изменения feature class в SDE

0 голосов
спросил 12 Март, 08 от NIPI (1,900 баллов) в категории Программные продукты Esri
Есть ли возможность доступа к информации о времени последнего изменения feature class - а, хранящегося в SDE? И как ее можно извлечь программно? (через какие объекты)?

3 Ответы

0 голосов
ответил 12 Март, 08 от sschainik (4,900 баллов)
вроде бы я такого не видел
была похожая задача просмотра изменений в feature class изменений по дате. В sde есть возможность на класс повесить COM компонент путем указания его GUID который бутед обрабатывать события изменения объектов класса, так вот и сделал
0 голосов
ответил 12 Март, 08 от Alexander1 (32,520 баллов)
0 голосов
ответил 13 Март, 08 от sschainik (4,900 баллов)
все написано на VB6 для ArcGis 9.0
надо написать com объект (*.dll) с использованием интерфейса IObjectClassEvents, переделай под свои нужды пример из хелпа "IObjectClassEvents in a class extension sample". У IObjectClassEvents есть три события OnChange(ByVal obj As esriGeoDatabase.IObject), OnCreate(ByVal obj As esriGeoDatabase.IObject), OnDelete(ByVal obj As esriGeoDatabase.IObject) соответсвенно можно получить OID
Мне нужно было вести журнал событий (лог), поэтому был выбран этот путь и дополнительно получал информацию о пользователе и компьютере

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
    (ByVal lpBuffer As String, _
    ByRef nSize As Long) As Long
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" _
    (ByVal lpBuffer As String, _
    ByRef nSize As Long) As Long

.........................................................................

Private Function GetUser() As String
    Dim Ret As Long
    Dim Buffer As String * 40
    Ret = GetUserName(Buffer, 40)
    GetUser = Left$(Buffer, InStr(Buffer, Chr(0)) - 1)
End Function

Private Function GetComp() As String
    Dim Ret As Long
    Dim Buffer As String * 40
    Ret = GetComputerName(Buffer, 40)
    GetComp = Left$(Buffer, InStr(Buffer, Chr(0)) - 1)
End Function

Все события генерируются во время сеанса редактирования, поэтому надо создать механизм отката если пользователь после редактирования не сохранил изменения

далее надо зарегистировать GUID этой *.dll в ОС и повесить на класс в базе SDE. как в sde это делать я не понял, поэтому напрямую залез в SQL и в таблице [data_base_name].sde.GDB_OBJECTCLASSES в поле (EXTCLSID) нужного класса внес свой GUID ("{7508E813-424A-4D55-B6A7-0C898A4CF705}")
причем *.dll должна быть зарегистрирована у всех клиентов иначе невозможно будет соединиться к этому классу
вот вреде бы и все
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...