Creo que este problema lo había reportado antes, lo que he detectado es que al guardar y enviar a autorizar el procedimiento antes de guardar se llama dos veces; la primera vez como insert (como se espera) y la segunda vez como update (lo cual no se espera). El problema se da cuando en la segunda vez (cuando hace update) entra a una validación y le coloca valor a @mensaje_validacion
System.Transactions.TransactionAbortedException: The transaction has aborted. at System.Transactions.TransactionStatePromotedAborted.BeginCommit(InternalTransaction tx, Boolean asyncCommit, AsyncCallback asyncCallback, Object asyncState) at System.Transactions.CommittableTransaction.Commit() at System.Transactions.TransactionScope.InternalDispose() at System.Transactions.TransactionScope.Dispose() at Aseinfo.VH4.Estructura.Controllers.PuestoController.SavePuesto(Puesto entity, Int32 codigoGrupoCorporativo, Nullable`1 codigoCategoriaPuesto, Nullable`1 codigoNivelComportamiento, Boolean inserting, Nullable`1 iniciaFlujo, List`1 aliasPuesto) in C:h4VH4EstructuraControllersPuestoController.cs:line 1030 at Aseinfo.VH4.Estructura.Controllers.PuestoController.Create(Puesto entity, Int32 codigoGrupoCorporativo, Nullable`1 codigoCategoriaPuesto, Nullable`1 codigoNivelComportamiento, Nullable`1 iniciaFlujo, List`1 aliasPuesto) in C:h4VH4EstructuraControllersPuestoController.cs:line 362 at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<begininvokesynchronousactionmethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<invokeactionmethodfilterasynchronouslyrecursive>b__3d() at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<invokeactionmethodfilterasynchronouslyrecursive>b__3f() at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<invokeactionmethodfilterasynchronouslyrecursive>b__3f() at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<invokeactionmethodfilterasynchronouslyrecursive>b__3f() at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<invokeactionmethodfilterasynchronouslyrecursive>b__3f() at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<invokeactionmethodfilterasynchronouslyrecursive>b__3f() at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.<begininvokeaction>b__1c() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<begininvokeaction>b__1e(IAsyncResult asyncResult)
Esta es la validación que entra cuando le doy guardar y autorizar al puesto:
IF @accion='Update'
BEGIN
IF EXISTS (SELECT 1 FROM eor.pue_puestos WHERE pue_codigo=@codigo AND pue_estado_workflow != 'Pendiente')
SET @mensaje_validacion = 'No es permitido modificar el puesto porque el estado del flujo no es Pendiente'
END
ya lo he resuelto pero sugiero que no omita la segunda llamada al procedimiento.
asked
19 Sep '17, 13:17
Jimy Tobar ♦♦
(suspended)
accept rate:
56%