Soporte de valores por defecto

A la hora de crear el Esquema JSON e Instancias JSON de una Entidad, se pueden definir valores por defecto para los atributos de la Entidad.

Esta funcionalidad va a permitir que los siguientes tipos de atributos:

  • string

  • number

  • integer

  • boolean

  • date

  • timestamp

  • timestamp-mongo

se puedan utilizar para, por ejemplo, poder realizar inserciones de datos sin necesidad de especificar estos campos en el registro a insertar. Con esto se consigue en primer lugar simplificar el registro a enviar, así como reducir el tamaño del registro que se envía y se pueden obviar campos que normalmente siempre lleven asignado algún valor predefinido y que cambie pocas veces.

image-20240412-113740.png

Una vez se han especificado los campos con el valor por defecto se pulsaría sobre Update Schema y se puede observar como se representan estos valores en el esquema de la entidad :

Dependiendo del tipo de dato el parámetro default se añade a un nivel u otro de cada parámetro y se actualiza cada vez que se actualice el esquema de la entidad, este es el ejemplo de esquema json definido anteriormente para la entidad.

{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "entity", "type": "object", "required": [ "BikeHireDockingStation" ], "properties": { "BikeHireDockingStation": { "type": "string", "$ref": "#/datos" } }, "datos": { "description": "Properties for an Asset Type", "type": "object", "required": [ "id", "type" ], "properties": { "id": { "type": "string" }, "type": { "type": "string", "enum": [ "BikeHireDockingStation" ], "default": "BikeHireDockingStation" }, "name": { "type": [ "string", "null" ] }, "category": { "type": [ "string", "null" ] }, "status": { "type": [ "string", "null" ], "enum": [ "working", "stopped" ], "default": "stopped" }, "availableBikeNumber": { "type": [ "integer", "null" ], "default": 10 }, "freeSlotNumber": { "type": [ "integer", "null" ], "default": 0 }, "totalSlotNumber": { "type": [ "integer", "null" ], "default": 10 }, "location": { "type": [ "object", "null" ], "required": [ "coordinates", "type" ], "properties": { "coordinates": { "type": "array", "items": [ { "type": "number", "maximum": 180, "minimum": -180 }, { "type": "number", "maximum": 90, "minimum": -90 } ], "minItems": 2, "maxItems": 2 }, "type": { "type": "string", "enum": [ "Point" ] } }, "additionalProperties": false }, "address": { "type": [ "string", "null" ], "default": "First Avenue (1st)" }, "description": { "type": [ "string", "null" ], "default": "default description" }, "dateModified": { "type": [ "string", "null" ], "format": "date", "default": "2022-07-09" }, "ownership": { "type": [ "string", "null" ], "default": "no" } } }, "description": "BikeHireDockingStation", "additionalProperties": true }

Con esta nueva funcionalidad tanto para inserciones desde el CRUD de datos, como desde las APIS o para inserciones utilizando el servicio IOT-broker por ejemplo para devices, los registros que se inserten validarán si en su esquema hay valores por defecto para alguno de sus campos y de ser así se auto completa el registro.

 

Por ejemplo desde el CRUD

Se pulsa el botón de nuevo registro

Se puede apreciar como los datos del formulario aparecen rellenos para los valores por defecto.

Tras pulsar en crear se puede ver que el registro ha sido creado con los datos por defecto.

Igual ocurre por ejemplo al insertar un dato desde un dispositivo, para que pueda realizarse la inserción tan sólo habría que añadir los valores obligatorios que no estuviesen definidos por defecto si no se quisiera añadir otro valor en ellos.

En este caso por ejemplo si este fuese un registro que se envía desde un dispositivo :

{ "BikeHireDockingStation": { "id": "2", "type": "BikeHireDockingStation", "name": null, "category": null, "status": "stopped", "availableBikeNumber": 10, "freeSlotNumber": null, "totalSlotNumber": 10, "location": null, "address": "First Avenue (1st)", "description": "default description", "dateModified": "2022-07-09", "ownership": "no" } }

Si no se quiere poner otro valor distinto del valor por defecto se puede omitir este campo por ejemplo "type": "BikeHireDockingStation",

y aunque es un campo obligatorio antes de la inserción se rellena automáticamente con su valor por defecto

{ "BikeHireDockingStation": { "id": "2", "name": null, "category": null, "status": "stopped", "availableBikeNumber": 10, "freeSlotNumber": null, "totalSlotNumber": 10, "location": null, "address": "First Avenue (1st)", "description": "default description", "dateModified": "2022-07-09", "ownership": "no" } }