все написано на 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 должна быть зарегистрирована у всех клиентов иначе невозможно будет соединиться к этому классу
вот вреде бы и все