2012-07-29 21 views
14

¿Hay alguna manera de detectar que un registro insertado es el resultado de una operación de clonación en un desencadenador?Detectar cuando se está clonando un registro en el desencadenador

Como parte de un paquete administrado, me gustaría borrar algunos de los campos personalizados cuando se clonan los registros OpportunityLineItem y Opportunity.

¿O no es un activador el lugar correcto para evitar que se clonen ciertos campos?

Consideré la creación de código dedicado para invocar sObject.Clone() y excluir los campos que no son necesarios. Esto no parece ser una solución ideal para un paquete administrado, ya que también excluiría cualquier otro campo personalizado en Opportunity.

+0

ideas: [Clone - capacidad de controlar qué campos se clonan] (http://success.salesforce.com/ideaview?id=08730000000BpUXAA0) –

Respuesta

6

En el Winter '16 release, Apex tiene dos métodos nuevos que le permiten detectar si se está clonando un registro y de qué origen se graba la identificación. Puedes usar esto en tus disparadores.

  • isClone() - Devuelve verdadero si una entidad se clona desde algo, incluso si la entidad no se ha guardado.
  • getCloneSourceId() - Devuelve el ID de la entidad desde la que se clonó un objeto.

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_sobject.htm#apex_System_SObject_getCloneSourceId

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_sobject.htm#apex_System_SObject_getCloneSourceId

+0

Esto necesita más amor – booky99

1

No se puede detectar la operación de clonación dentro del activador. Se trata como operación "Insertar".

Puede seguir usando el código dedicado para invocar sObject.Clone() y excluir los campos que no son necesarios. Puede asegurarse de incluir todos los campos utilizando la información de descripción de sObject para obtener todos los campos de ese objeto y luego excluir los campos que no son necesarios.

Espero que esto tenga sentido!

Anup

5

Un enfoque, aunque tipo de kludgy, sería la creación de un nuevo campo, dicen original_id__c, que se rellena por un flujo de trabajo (o de disparo, dependiendo de su preferencia por el order of execution) cuando en blanco con el ID de Salesforce del registro. Para nuevos registros, este campo coincidirá con el id. De Salesforce estándar, para los registros clonados no lo harán. Hay una serie de variaciones sobre cuándo y cómo y con qué rellenar el campo, pero la clave es darse tu propio gancho para diferenciar los registros nuevos y clonados.

Si solo desea controlar la experiencia del usuario final (en lugar de un desarrollador que amplíe su paquete administrado) puede anular el botón de clonación estándar con una página personalizada que borre los valores de un subconjunto de campos usando url hacking. Hay algunas advertencias, a saber, que el campo es editable y visible en el diseño de página para el usuario que hizo clic en el botón de clonación. Al escribir estas líneas, no creo que pueda empaquetar las anulaciones de botones estándar, pero la lista de posibles cambios siempre se publica.

Cuestiones relacionadas