Estoy tratando de manera programática de stop/anular/deshacer una operación de edición en el interior de una de ArcSDE medio ambiente. Mi entorno es actualmente Oracle, ArcSDE 9.3.1 y en nuestro código personalizado (I heredó una gran fea parte de un sistema) a los desarrolladores hacer uso StartEditing/StartEditOperation y StopEditing/StopEditOperation de flujo de trabajo, pero SÓLO el uso de IWorkspaceEdit interfaz y no Imultiversion de la interfaz.
Por desgracia, fuera de la base de datos NO versionados y todas las ediciones hecho con ArcMap se realiza mediante eliminando la opción de Deshacer/Rehacer - por lo tanto, todos mis deshacer falla (a Excepción de COM).
Estoy tratando de capturar a un OnDeleteEvent y dentro de el, puedo comprobar si una determinada condición, y entonces yo llamo AbortOperation, pero la operación no se anula. Necesito parar toda la sesión de edición y preguntar para no guardar "rollback" mis ediciones. Este consistentes con ESRI docs.
Mi conjetura es que aquí, la elimine ya pasó y entregado a la base de datos? Si sí, ¿qué es una estrategia para no permitir que esta edición a suceder? Hay algunos escenarios que necesito para cancelar la operación de edición. Sé que IEditEvents2 tiene un BeforeStopOperation evento, pero ESRI explícitamente nos dice que no llame AbortOperation dentro de estos eventos.
También hay otros problemas con esta configuración: me echa para todas las ediciones en un stopEditOperation y generar algunas de las notificaciones con ella. Todas las ediciones vienen a mí como vacío. Esto podría tener algo que hacer con él?
Por favor, ayuda?
Gracias chicos!
Ejemplo de código (onDeleteEvent):
void events_OnDelete(IObject obj)
{
ITable table = null;
IDataset dataset = obj.Table as IDataset;
IFeatureWorkspace workspace = dataset.Workspace as IFeatureWorkspace;
IWorkspaceEdit edit = workspace as IWorkspaceEdit;
edit.EnableUndoRedo();
IQueryFilter filter = new QueryFilterClass();
try
{
foreach (string s in VariousTables())
{
table = workspace.OpenTable(s);
if (s.Contains("vertex"))
filter.WhereClause = "clause A";
else
filter.WhereClause = "clause B";
if (table.RowCount(filter) > 0)
{
edit.AbortEditOperation(); --> this still deletes the point
// edit.UndoEditOperation() --> this breaks, as the workspace does not support Undos
break;
}
}
}
catch (Exception ex)
{
MessageBox.Show("ErroR",ex);
}
}