Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Recursos para desarrolladores de aplicaciones

Biblioteca de eventos

La librería de evento permite a los desarrolladores rastrear qué datos ve y edita el usuario mientras utiliza una aplicación móvil habilitada con Device Sync. La Biblioteca de eventos puede registrar tres tipos de eventos:

  • Leer eventos

  • Write events

  • Eventos personalizados

Los desarrolladores pueden especificar las transacciones de lectura y escritura que se registrarán. Además, pueden configurar eventos personalizados para registrar información como las pulsaciones de botones o lo que el usuario ve en la aplicación frontend.

Este nivel de detalle permite a los auditores u otras partes interesadas evaluar exactamente qué sucedió y cuándo.

Importante

Se requiere sincronización basada en particiones

La biblioteca de eventos no admite la grabación AuditEvents Usando Sincronización Flexible. Esta función requiere una aplicación de servicios de sincronización basada en particiones para registrar datos AuditEvent.

La Biblioteca de eventos proporciona la capacidad de realizar auditorías para cumplir con los requisitos de cumplimiento en industrias altamente reguladas, como servicios de salud o financieros.

Ejemplo

Una enfermera en un centro médico usa una aplicación con la librería de eventos activada. La aplicación muestra a la enfermera signos vitales en tiempo real, información transmitida desde el equipo médico e información sobre el historial de tratamientos del paciente. La aplicación aplica el cumplimiento de manera inherente porque su código bloquea acciones que la enfermera no debe realizar según los datos que están siendo visualizados. La librería de eventos captura toda la información que la enfermera ve dentro de la interfaz de la aplicación, así como las acciones que la enfermera realiza después de ver esa información.

En algún momento, este enfermero trata a un paciente que posteriormente expone a la facultad a una demanda por mala praxis. El departamento legal debe revisar la información que estaba disponible para la enfermera durante el tratamiento.

La librería de Eventos captura los datos digitales que la enfermera vio durante el tratamiento, así como las acciones que realizó. Al revisar estos datos, el equipo legal puede determinar si el tratamiento fue razonable. Sin esta información, el departamento legal no puede saber ni demostrar si las acciones de la enfermera fueron razonables.

The Event Library opens a separate "event" realm on the user's device. This realm has access to any user realm that the developer chooses to monitor with the Event Library.

Cuando los desarrolladores implementan la Biblioteca de Eventos, especifican los tipos de eventos que desean registrar, así como los metadatos personalizados que desean añadir a las grabaciones de eventos. Al ejecutarse la aplicación cliente, registra las interacciones del usuario designadas en el dominio "evento" como eventos de lectura, escritura o personalizados.

While the client device has a network connection, Atlas Device Sync synchronizes this event realm data to an AuditEvent collection in the linked Atlas data source.

Tip

Para obtener información sobre cómo implementar la biblioteca de eventos en una aplicación cliente, consulte: Biblioteca de eventos - Swift SDK.

La librería de Eventos registra los datos de eventos en una colección llamada AuditEvent en tu base de datos Atlas vinculada. Cuando configures la Biblioteca de Eventos, utiliza el Modo de desarrollo para crear automáticamente esta colección y derivar un esquema a partir de los eventos sincronizados. Recuerda desactivar el Modo de desarrollo antes de llevar tu aplicación a producción.

Su colección AuditEvent debe tener un esquema que contenga los siguientes campos:

Nombre del campo
Tipo
Requerido

_id

ObjectId

Requerido

activity

String

Requerido

_partition

String

Requerido

timestamp

fecha

Requerido

event

String

Opcional

data

String

Opcional

Además, el esquema debe contener un campo de string opcional para cada clave de metadatos que utilices. Por ejemplo:

{
"<Metadata Key>": {
"bsonType": "string"
}
}

Tip

Para obtener información sobre cómo añadir un esquema a tu colección, consulta: Definir y aplicar un esquema.

Ejemplo

Si no estás usando metadatos personalizados, tu esquema podría ser similar a este:

Esquema de recopilación de eventos de auditoría
{
"title": "AuditEvent",
"bsonType": "object",
"required": [
"_id",
"_partition",
"timestamp",
"activity"
],
"properties": {
"_id": {
"bsonType": "objectId"
},
"_partition": {
"bsonType": "string"
},
"timestamp": {
"bsonType": "date"
},
"activity": {
"bsonType": "string"
},
"event": {
"bsonType": "string"
},
"data": {
"bsonType": "string"
}
}
}

La biblioteca de eventos registra tres tipos de eventos:

  • Leer eventos

  • Write events

  • Eventos personalizados

La Biblioteca de Eventos guarda los datos devueltos como resultado de una query como eventos de lectura. Los eventos de lectura también registran cualquier vez que se instancia un objeto Realm, como al seguir un enlace o buscar un objeto por llave primaria.

The Event Library records read events as a JSON object with two fields:

  • type: almacena el nombre de la clase

  • value: stores an array of serialized objects

Los eventos de lectura almacenan valores de la siguiente manera:

  • Eventos de lectura de un solo objeto: el valor es una matriz que tiene un solo elemento

  • Objetos que coinciden con una query: el valor es un arreglo de todos los objetos que coinciden con la query, incluso si nunca se utilizan los objetos

  • Lecturas que ocurren durante una transacción de escritura: el valor son los datos que tenía el objeto antes de que comenzara la transacción de escritura; no refleja ningún cambio que ocurra durante el evento de escritura.

  • Objetos que no existen cuando comienza una transacción de escritura: los objetos que se crean en una transacción de escritura no producen ningún evento de lectura.

Importante

La biblioteca de eventos no puede determinar si solo se muestra un subconjunto de la consulta en la aplicación cliente. Por ejemplo, supongamos que la aplicación cliente tiene una vista de lista. El evento de lectura de la biblioteca de eventos no registra la información de desplazamiento, sino el resultado completo de la consulta. Los desarrolladores deben usar eventos personalizados para registrar cuándo una aplicación cliente muestra solo un subconjunto del resultado de una consulta.

Un flujo de cada evento de lectura podría producir muchos eventos "duplicados" sobre los mismos objetos que no añaden información. Para reducir estos eventos 'duplicados', la Evento Librería descarta y fusiona algunos eventos.

La biblioteca de eventos descarta:

  • Queries which match no objects

  • Queries which match only newly-created objects

  • Object reads where the object is matched by a previous query

La biblioteca de eventos fusiona:

  • Varias consultas en la misma tabla en una única consulta fusionada.

Un objeto de evento de lectura tiene este formato:

{
"_id": "62b396f4ebe94d2b871889bb",
"_partition":"events-62b396f4ebe94d2b871889ba",
"activity":"read object",
"data": "{
"type":"Person",
"value": [{
"_id": "62b396f4ebe94d2b871889b9",
"_partition":"",
"employeeId":1,
"name":"Anthony"
}]
}",
"event":"read",
"timestamp": 2022-06-23T14:54:37.756+00:00
}

The Event Library represents embedded objects by creating a link in the parent object to the primary key of the embedded object. When the user does not follow the link, the primary key is the only representation of the embedded object. When the user does follow the link, the embedded object resolves within the parent object.

This also produces a top-level object read for the embedded object.

Ejemplo

Un objeto Person tiene un objeto incrustado Office que contiene detalles sobre la ubicación donde trabaja la persona. Si no se sigue el enlace para ver ninguno de los detalles office, el objeto principal Person solo muestra el ID del objeto incrustado.

Parent Object's data Payload with an Unfollowed Link for office
{
"type": "Person",
"value": [{
"_id": "62b47624265ff7b58e9b204e",
"_partition": "",
"employeeId": 1,
"name": "Michael Scott",
"office": "62b47624265ff7b58e9b204f"
}]
}

Al seguir el enlace para ver los detalles del Office objeto incrustado, este se resuelve dentro del objeto principal.Además, se produce una segunda lectura de nivel superior solo del objeto secundario; en este caso, nuestro Office objeto.

Cargas útiles de datos de ambos objetos con un enlace seguido para la oficina
{
"type":"Person",
"value": [{
"_id": "62b47975a33224558bdf8b4d",
"_partition": "",
"employeeId": 1,
"name": "Michael Scott",
"office": {
"_id": "62b47975a33224558bdf8b4e",
"_partition": "",
"city": "Scranton",
"locationNumber": 123,
"name": "Dunder Mifflin"
}
}]
}
{
"type": "Office",
"value": [{
"_id": "62b47975a33224558bdf8b4e",
"_partition": "",
"city": "Scranton",
"locationNumber": 123,
"name": "Dunder Mifflin"
}]
}

Nota

Leer combinación de eventos

La combinación de eventos de lectura puede afectar los objetos que ve cuando consulta un objeto y luego sigue un vínculo de objeto incrustado.

En el ejemplo anterior, si previamente consultaste el Person, eso produciría un evento de lectura donde el objeto office no está resuelto dentro del objeto persona; solo verías el ObjectID en el evento de lectura inicial. Luego, si más adelante sigues un enlace que resuelve el objeto incrustado, verías la lectura separada de nivel superior para el objeto incrustado, pero no obtendrías la lectura del objeto padre que muestre el objeto incrustado resuelto dentro del objeto padre.

The Event Library records write events when:

  • Se crean nuevos objetos

  • Los objetos existentes se modifican

  • Los objetos se eliminan

The write event records both the before and after state of the object. For new objects created, the before state is null. For deletes, the after state of the object is null.

Por cada transacción de escritura que el cliente confirma durante un alcance de registro de eventos, la Biblioteca de eventos registra un solo evento de escritura. Este evento de escritura registra todos los cambios realizados durante la transacción de escritura.

La carga útil es un objeto codificado por nombres de clase. Cada tipo de objeto que tuvo objetos creados, modificados o eliminados tiene una entrada.

La Librería de eventos registra cambios en un tipo de objeto Realm como un objeto con tres arreglos:

  • inserciones: contienen los objetos serializados que se insertaron, utilizando el mismo esquema de serialización que las lecturas

  • modificaciones: informar tanto los valores antiguos como los nuevos de cada propiedad

  • eliminaciones: contienen los objetos serializados que se borraron, utilizando el mismo esquema de serialización que la lectura

En una modificación, el objeto newValue solo incluye propiedades diferentes a las del objeto oldValue. Si una transacción de escritura asigna valores a un objeto, pero no modifica el valor de ninguna propiedad,

Un objeto de evento de escritura tiene este formato:

Inserted object's data payload
{
"Person": {
"insertions": [{
"_id": "62b47ead6a178a314ae0eb52",
"_partition": "",
"employeeId": 1,
"name": "Anthony"
}]
}
}
Carga útil de los datos del objeto modificado
{
"Person":{
"modifications": [{
"newValue": {
"name": "Tony"
},
"oldValue": {
"_id": "62b47d83cdac49f904c5737b",
"_partition": "",
"employeeId": 1,
"name": "Anthony"
}
}]
}
}
Carga útil de datos de un objeto borrado
{
"Person":{
"deletions":[{
"_id":"62b47ead6a178a314ae0eb52",
"_partition":"",
"employeeId":1,
"name":"Tony",
"userId":"tony.stark@starkindustries.com"
}]
}
}

Los eventos personalizados pueden registrar tipos de eventos que no leen ni escriben en la base de datos, como:

  • Cuando se muestra una pantalla específica

  • When the user clicks a button

Puedes usar eventos personalizados para contextualizar eventos de lectura y escritura, como registrar un evento personalizado cuando la aplicación cliente muestra una pantalla determinada. De esta forma, puedes inferir que los eventos de lectura y escritura posteriores al evento personalizado que registra la carga de la pantalla de la aplicación ocurrieron en esa pantalla.

Los eventos personalizados pueden almacenar cualquier dato que desee el desarrollador, o no almacenar datos en absoluto.

Ejemplo de evento personalizado
{
"_id": "62b4804c15659310991e5e0a",
"_partition": "events-62b4804b15659310991e5e09",
"activity": "login",
"event": "custom event",
"timestamp": 2022-06-23T15:01:31.941+00:00
}

Volver

Transmitir datos desde el cliente a Atlas

En esta página