Características específicas del trabajo con conjuntos de cambios
El objeto conjunto de cambios
(tipo Change\Entityconjunto de cambios
) representa la interfaz para recibir información sobre los cambios al editar objetos (por ejemplo, pedido o cliente). En la referencia del objeto, puede ver los métodos disponibles de este objeto.
Para saber cuál de las acciones se está realizando actualmente con el objeto (creación, modificación, eliminación), los métodos correspondientes se proporcionan en conjunto de cambios:
conjunto de cambios.isCreate() # Creacion
conjunto de cambios.isUpdate() # Alteracion
conjunto de cambios.isDelete() # Eliminacion
Por ejemplo, al crear un trigger o una validación para un pedido, especificando el parámetro conjunto de cambios.isCreate()
, la condición se ejecutará en el momento de la creación del pedido.
Los métodos más utilizados son hasChangedField()
, oldValue
y newValue
. Con hasChangedField()
puede determinar si el campo ha cambiado, y oldValue
y newValue
le permiten obtener el valor antiguo y nuevo del campo, respectivamente.
conjunto de cambios.hasChangedField("status") and conjunto de cambios.newValue("status").code == "complete" # El estado del pedido ha cambiado y su nuevo estado es "Completado".
Estos métodos toman como parámetro el nombre de servicio del campo en el formato underscore
. Los nombres de servicio de los campos disponibles para su uso se pueden ver en la referencia del objeto. Si nos referimos a un campo anidado, entonces el anidamiento se indica mediante un punto.
conjunto de cambios.hasChangedField("status") and conjunto de cambios.newValue("status").group.code == "complete" # El estado del pedido ha cambiado y su nuevo grupo de estado es "Completado"
En este ejemplo, se realiza una llamada al objeto anidado en status
group
, en el que el campo de código está anidado, respectivamente, esta verificación se realizará si el estado del pedido se cambia a un estado que está en el grupo Completado ".
Es importante comprender la diferencia entre verificación:
conjunto de cambios.hasChangedField("delivery_type") and conjunto de cambios.newValue("delivery_type").code == "correos" # el tipo de envío ha cambiado y su nuevo valor es "Correos"
desde
order.deliveryType.code == "correos" # tipo de entrega en el pedido "Correos"
La primera condición se activará solo en el momento en que cambiemos el tipo de envío a "Correos". El segundo funcionará en cuanto el tipo de envio se cambara a "Correos", así como con todos los cambios posteriores al pedido, hasta que cambiemos el tipo de envío a otro.
conjunto de cambios.hasChangedField("status") # Verificamos si el campo "Estado del pedido" ha cambiado
conjunto de cambios.oldValue("delivery_cost") # Obtenemos el valor anterior del campo "coste de envío"
conjunto de cambios.newValue("delivery_address.city") # Obtenemos el nuevo valor del campo Ciudad de entrega
conjunto de cambios.hasChangedField("delivery_type") and conjunto de cambios.newValue("delivery_type").code == "correos" # El tipo de envío ha cambiado y su nuevo valor es "Correos".
En estos ejemplos, observamos los cambios de campo:
order.status # status del pedido
order.deliveryCost # coste de envio
order.deliveryAddress.city # ciudad de entrega
order.deliveryType # tipo de entrega
Modificar campos personalizados
Los cambios en los campos personalizados se almacenan con el prefijo custom_
. Por ejemplo, para determinar si hay un cambio en el campo personalizado transaction_id
, escriba:
conjunto de cambios.hasChangedField("custom_transaction_id")
¡Importante!
Si se realiza un seguimiento de los cambios mediante los métodos
newValue
ooldValue
en campos personalizados con los tipos "Número" y "Entero", los valores de los campos estarán en formato numérico, todos los demás tipos de campos personalizados almacenan los valores en formato de texto.
Para diferentes tipos de campos personalizados, es necesario proporcionar una verificación correspondiente al tipo de campo, ejemplos de dichas verificaciones están disponibles en el artículo ["Cómo usar un conjunto de cambios para diferentes tipos de campos" ](https://docs.retailcrm.es/Developers/Automation/PipeLang/conjunto de cambios/Useconjunto de cambios).
Obtener el autor del cambio:
A veces es necesario que un gerente cambie un determinado campo, por ejemplo, puede asignar un gerente responsable de un pedido si cambió su composición.
Para saber qué administrador ha cambiado este o aquel campo, debe utilizar la función authorOfChange
, que devuelve el administrador que realizó el cambio (User)
o null
si el cambio lo realizó el propio sistema, mediante API o en un trigger.
conjunto de cambios.authorOfChange("status")
Si el usuario del sistema cambia el estado del pedido, el ejemplo anterior devolverá el objeto User
.
Para comprobar si hay un cambio en un campo específico, puede utilizar la función sourceOfChange
, que devuelve el código de carácter de la fuente del cambio:
api # API
user # Manager
rule # Trigger
code # Sistema
combine # Combinacion con otro objeto
copy # Copiando objetos
Esta verificación se activará si la API o el trigger cambia el estado del pedido:
conjunto de cambios.sourceOfChange("status") in ["api", "rule"]
También puede verificar si hay cambios de una fuente específica usando la función hasChangesWithSource
, especificando el código simbólico correspondiente a la fuente de cambios en los parámetros de la función:
conjunto de cambios.hasChangesWithSource("api")
Esta verificación funcionará si el cambio se inicia a través de la API.
Seguimiento de cambios mediante filtros de tubería:
El sistema proporciona filtros que le permiten trabajar con matrices de datos, por lo que pueden usarse para rastrear cambios en el objeto conjunto de cambios
. Puede familiarizarse con los filtros disponibles en el artículo "Lenguaje de expresión".
Por ejemplo, puede verificar el cambio en el estado de un artículo en un pedido:
conjunto de cambios | contains (product =>product.fieldName == 'order_product.status' and product.oldValue.code == 'new' and product.newValue.code == 'rechazado')
Esta verificación funcionará si hay un cambio en el estado de al menos un producto del pedido.