Loading

Error "Tiene trabajo no confirmado pendiente. Confirme o revierta antes de llamar".

Fecha de publicación: Apr 24, 2026
Descripción

No se permiten las llamadas cuando hay una transacción no confirmada pendiente. Por ejemplo, si un punto de guardado se establece antes de una operación DML, la llamada no puede realizarse en base a los resultados de esa operación para confirmar o revertir el punto de guardado.

Escenario de ejemplo:
Cuando intenta realizar un punto de guardado, inserte la cuenta para encontrar duplicados y revertir y luego una llamada de servicio web para enviar los datos de cuenta a un sistema externo. Pero cuando se llama al servicio web, es posible que aparezca el error "Tiene trabajo no confirmado pendiente. Confirme o revierta antes de llamar".

 
Los siguientes pasos pueden resolver este error: 
  1. Introduce información en la interfaz de usuario para crear un nuevo cliente y hace clic en Guardar
  2. El sistema crea un punto de guardado y luego inserta el registro del cliente. 
  3. El desencadenador se inicia para encontrar duplicados.
  4. Si no hay duplicados revertirá la inserción del registro del cliente en base al punto de guardado establecido en el paso 2. 
  5. El sistema llamará a un servicio web para enviar los nuevos datos del cliente a un sistema externo y recibir un externalID.
  6. El sistema almacena el nuevo cliente en SFDC junto con el Id. externo.


 
Solución

No puede realizar llamadas con transacciones pendientes en el contexto de la solicitud. Del mismo modo, no es posible realizar una confirmación explícita. Una solución es realizar la llamada en un contexto separado. 
No puede realizar una operación DML antes de una llamada. Todas las operaciones DML deberían invocarse solo después de que termine con las llamadas. De este modo, realice una llamada de servicio web primero y luego guarde la solicitud.
Si está realizando llamadas múltiples, guarde todas las solicitudes en una lista o asigne y publique las llamadas cuando las guarde.
Seguir los pasos en este orden funcionará 
consulta
llamada
consulta
llamada
inserción
llamada
llamada 
llamada
inserción o actualización

El siguiente escenario de pasos fallará
llamada
inserción
llamada <---- falla aquí
  1. Tendrá que confirmar la transacción, realizar la llamada antes de realizar cualquier cambio en la base de datos o trasladar su llamada a un método @future (coloque la anotación @future en el método del servicio web).
  2. Divida la transacción en dos procesos separados de Ajax. El primero inserta el registro y el segundo realiza la llamada y es capaz de actualizar el registro que se acaba de insertar.
  3. Puede guardar los registros y luego responder al usuario con una página temporal con un mensaje "Cargando" mientras realiza la segunda llamada. Para que todo sea fluido, puede realizar también llamadas de AJAX sucesivas para guardar registros y para realizar la llamada mientras el usuario ve el mensaje "Cargando" al hacer clic en el botón "Guardar".
  4. Si no desea colocar la anotación @future en el método webservice puede ejecutar una acción para insertar el objeto y luego ejecutar la llamada webservice en el evento oncomplete de un commandButton. Luego, devuelva una PageReference dando al usuario información inmediata. Si la llamada webservice devuelve cualquier error, elimine el objeto y devuelva al usuario a la misma página.
Página de VisualForce
<apex:actionFunction name="executeWS" action="{!executeWS}"></apex:actionFunction>  <apex:commandButton value="Guardar" action="{!save}" oncomplete="executeWS()" />
Controlador
public PageReference save() {  insert obj; } public PageReference executeWS(){  obj = [SELECT ...];  try{ callout ws;  } catch(System.Exception ex){ delete obj; ApexPages.addMessages(e); return null;  }  return new PageReference('/' + id); }

Para obtener más información, este es un vínculo relacionado con Error -"Las llamadas desde desencadenadores no se admiten en estos momentos"
Número del artículo de conocimiento

000385708

 
Cargando
Salesforce Help | Article