Última actualización el 18 de abril de 2022 por Rakesh Gupta

Gran idea o pregunta duradera:

  • ¿Cómo resuelve MIXED_DML_OPERATION: la operación DML en el objeto de configuración no está permitida después de haber actualizado un error de objeto que no es de configuración (o viceversa)?

El flujo activado por registros es una forma de automatizar los procesos comerciales. Record-Triggered Flow es una poderosa herramienta para que los administradores y desarrolladores de sistemas implementen procesos comerciales sin escribir código. Sin embargo, un gran poder conlleva una gran responsabilidad : si un usuario comienza a crear un nuevo flujo para cada requisito, o crea flujos sin comprender las limitaciones de Salesforce, entonces, un usuario puede encontrar muchos problemas, ya sea en el futuro o durante la fase de prueba/implementación. . Comencemos con uno de los errores más comunes : el error de operación del lenguaje mixto de manipulación de datos (DML).

Objetivos:

Después de leer este blog, podrá:

  • Comprender qué es un error de operación DML mixta
  • Resolver error de operación DML mixta
  • y mucho más

¿Qué es un error de operación DML mixta?

Cuando las operaciones DML en ciertos sObjects a veces se denominan objetos de configuración ( como un objeto de usuario ) , junto con el objeto que no es de configuración ( como cuentas ), en la misma transacción, se genera un error de DML mixto. un usuario.

El error de DML mixto se genera cuando un usuario realiza acciones de DML en objetos de configuración y que no son de configuración en la misma transacción, porque algunos sObjects afectan el acceso del usuario a los registros en la organización. Por lo tanto, un usuario debe insertar o actualizar estos tipos de sObjects en diferentes transacciones para evitar que se realicen operaciones con permisos de nivel de acceso incorrectos. Por ejemplo, un usuario no puede actualizar una cuenta y un rol de usuario en una sola transacción. Sin embargo, eliminar una operación DML no tiene restricciones (consulte la ayuda de Salesforce).

A continuación, le mostraré cómo usar Salesforce Flow para evitar obtener un error de operación de DML mixto.

En primer lugar , realizaré operaciones DML en objetos de configuración ( Usuario ) y objetos que no son de configuración ( CollaborationGroupMember ) en la misma transacción. Esto generará un error de operación DML mixta porque no se puede realizar una operación DML en objetos de configuración y que no son de configuración en la misma transacción.

A continuación , le mostraré cómo usar una Ruta programada o dependiente del tiempo , en el Flujo de Salesforce, para realizar operaciones DML en Objetos de configuración y que no son de configuración en el mismo Flujo sin incurrir en un error de operación DML mixto. La acción dependiente del tiempo/programada se usa porque ayuda a separar las operaciones DML en los objetos de configuración y los que no son de configuración.

Donna Serdula trabaja como administradora de sistemas en Gurukul on Cloud (GoC) . Acaban de implementar el Sistema de Gestión de Licencias en Salesforce. Serdula tiene un requisito de su gerente de que, tan pronto como se cree un nuevo usuario en Salesforce, haga lo siguiente:

  1. Acreditación automática de una licencia para cada categoría: médica , informal y ganada .

requisitos previos

Lea primero este artículo y asegúrese de completar los pasos enumerados ¿Perfil? ¡Asi que ayer! – Asignar automáticamente un grupo de conjuntos de permisos a un usuario .

En lugar de crear un nuevo flujo, usaremos el flujo posterior al guardado existente en el objeto Usuario.

Crear un flujo que genere un error MIXED_DML_OPERATION

Para solucionar este requerimiento, modificaremos el flujo creado para Profile? ¡Asi que ayer! – Asignar automáticamente un grupo de conjuntos de permisos a un usuario . Comencemos a construir este proceso de automatización.

Paso 1: Clonar flujo existente

  1. Haga clic en Configuración .
  2. En el cuadro Búsqueda rápida, escriba Flujos .
  3. Seleccione Flujos y luego haga clic en el nombre del flujo que se modificará. En este caso, asignación automática de grupo de conjuntos de permisos .
  4. Haga clic en el botón Guardar como en la parte superior derecha del generador de flujo.
  5. Haga clic en Guardar .

Paso 2: Agregar acción: crear un registro

El siguiente paso es crear un registro para agregar un registro de saldos de licencia para nuevos usuarios, usaremos el elemento Crear registros .

  1. En Flow Designer, haga clic en el icono + y seleccione el elemento Crear registros .
  2. Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
  3. Ingrese la siguiente información :
    1. Ingrese la etiqueta , el nombre de la API se completará automáticamente.
    2. Cuántos registros crear : uno
    3. Cómo establecer los campos de registro : use recursos separados y valores literales
    4. Objeto : Dejar saldo
    5. Establecer valores de campo para el saldo de vacaciones
    6. Fila 1:
      1. Campo : Licencia_obtenida__c
      2. Valor : 1
    7. Haga clic en Agregar campo
    8. Fila 2:
      1. Campo : Nombre_empleado__c
      2. Valor : {!$Record.Id}
    9. Haga clic en Agregar campo
    10. Fila 3:
      1. Campo : Medical_Leave__c
      2. Valor : 1
    11. Haga clic en Agregar campo
    12. Fila 4:
      1. Campo : Casual_Leave__c
      2. Valor : 1
  4. Haga clic en Listo .

Al final, Donna's Flow se verá como la siguiente captura de pantalla:

¡Casi ahí! Una vez que todo se vea bien, haga clic en el botón Activar .

Prueba de concepto

  1. Cree un nuevo usuario en Salesforce, como se muestra en la siguiente captura de pantalla:
  2. Una vez que haya terminado, haga clic en el botón Guardar . Boooommmm, encuentra un error MIXED_DML_OPERATION , como se muestra en la siguiente captura de pantalla:

👉 Como se mencionó anteriormente, el motivo del error es que estamos asignando un registro de grupo de conjunto de permisos y creando saldos de licencia en la misma transacción. Significa que estamos realizando operaciones DML en objetos de configuración y no configuración en la misma transacción.

Solucionar error MIXED_DML_OPERATION

Para corregir el error MIXED_DML_OPERATION en un flujo, tenemos que separar las transacciones de objetos de configuración y no configuración utilizando

  • Ruta programada
  • Ruta asíncrona
  • Elemento de pausa
  • Evento de plataforma
  • Flujo activado programado
  • Llamada futura a través de Apex

Realice las siguientes instrucciones para solucionar el error MIXED_DML_OPERATION en un Flujo usando Ruta Programada. La mejor manera de resolver este problema es usar el Evento de plataforma, dado que queremos aplicar uno después de guardar el flujo por objeto.

Paso 1: Clonar flujo existente

  1. Haga clic en Configuración .
  2. En el cuadro Búsqueda rápida, escriba Flujos .
  3. Seleccione Flujos y luego haga clic en el nombre del flujo que se modificará. En este caso, asignación automática de grupo de conjuntos de permisos .
  4. Haga clic en el botón Guardar como en la parte superior derecha del generador de flujo.
  5. Haga clic en Guardar .

Paso 2: Flujo de Salesforce: agregue rutas programadas

El propósito de usar una ruta programada es ejecutar el flujo después de 0 horas de la creación del usuario. El propósito de poner una acción dependiente del tiempo es evitar errores MIXED DML.

  1. En Inicio , seleccione Agregar rutas programadas (opcional) .
  2. En RUTAS PROGRAMADAS, haga clic en Nueva ruta programada .
  3. En Detalles de rutas programadas ,   ingrese la etiqueta , el nombre de la API se completará automáticamente.
  4. Hora Origen: Usuario: Fecha de creación
  5. Número de compensación: 0
  6. Opciones de compensación: Horas después
  7. Opciones avanzadas
    1. Tamaño del lote : 200
  8. Haga clic en Listo .

Paso 3: agregar un elemento Obtener registro para encontrar el registro de saldo de licencia para el usuario

El siguiente paso es utilizar el elemento Obtener registros para encontrar el registro de saldo de licencias para el registro actual.

  1. En Flow Designer, debajo del nodo 0 h después , haga clic en el icono + y seleccione el elemento Obtener registros .
  2. Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
  3. Seleccione el objeto Dejar saldo de la lista desplegable.
  4. Seleccione Se cumplen todas las condiciones (Y) .
  5. Establecer condiciones de filtro
    1. Fila 1:
      1. Campo : Nombre_empleado__c
      2. Operador : Igual
      3. Valor : {!$Record.Id}
  6. Cuántos registros almacenar:
    1. seleccione Solo el primer registro
  7. Cómo almacenar datos de registro:
    1. Elija la opción para Almacenar automáticamente todos los campos .
  8. Haga clic en Listo .

Paso 4: uso del elemento de decisión para verificar si se encontró o no el registro de saldo de licencia  

Ahora, usará el elemento Decisión para verificar si el elemento Obtener registros anterior devuelve un registro de saldo de licencia o no.

  1. En Flow Designer, haga clic en el icono + y seleccione el elemento Decisión .
  2. Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
  3. En Detalles del resultado , ingrese la etiqueta que el nombre de la API se completará automáticamente.
  4. Requisitos de condición para ejecutar el resultado : se cumplen todas las condiciones (Y)
    1. Fila 1:
      1. Recurso: {!Get_Public_Group}
      2. Operador: es nulo
      3. Valor: {!$ConstanteGlobal.Falso}
  5. Cuándo ejecutar Resultado : Si se cumplen los requisitos de la condición .
  6. Haga clic en Listo .

Paso 5: Agregar acción: crear un registro

El siguiente paso es crear un registro para agregar un registro de saldos de licencia para un nuevo usuario, usaremos el elemento Crear registros .

  1. En Flow Designer, haga clic en Dejar saldo no encontrado y seleccione el elemento Crear registros .
  2. Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
  3. Ingrese la siguiente información :
    1. Ingrese la etiqueta , el nombre de la API se completará automáticamente.
    2. Cuántos registros crear : uno
    3. Cómo establecer los campos de registro : use recursos separados y valores literales
    4. Objeto : Dejar saldo
    5. Establecer valores de campo para el saldo de vacaciones
    6. Fila 1:
      1. Campo : Licencia_obtenida__c
      2. Valor : 1
    7. Haga clic en Agregar campo
    8. Fila 2:
      1. Campo : Nombre_empleado__c
      2. Valor : {!$Record.Id}
    9. Haga clic en Agregar campo
    10. Fila 3:
      1. Campo : Medical_Leave__c
      2. Valor : 1
    11. Haga clic en Agregar campo
    12. Fila 4:
      1. Campo : Casual_Leave__c
      2. Valor : 1
  4. Haga clic en Listo .

Al final, Donna's Flow se verá como la siguiente captura de pantalla:

¡Casi ahí! Una vez que todo se vea bien, haga clic en el botón Activar .

Prueba de concepto

  1. Cree un nuevo usuario en Salesforce, como se muestra en la siguiente captura de pantalla:
  2. Una vez que haya terminado , haga clic en el botón Guardar . Lo redirigirá a la página de detalles del registro de un usuario. Tenga en cuenta que el grupo de conjuntos de permisos se asigna automáticamente mediante el flujo activado por registro.
  3. Espere unos minutos y luego vaya a la pestaña Dejar saldos. Se crea un nuevo registro de licencia para el nuevo empleado Ian Young, como se muestra en la siguiente captura de pantalla:

Evaluación formativa:

¡Quiero saber de ti!

¿Qué es una cosa que aprendiste de esta publicación? ¿Cómo imagina aplicar este nuevo conocimiento en el mundo real? Siéntase libre de compartir en los comentarios a continuación.

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://automationchampion.com/2022/04/17/how-to-fix-mixed-dml-operation-error-2/

Entradas recomendadas