Saltar al contenido principal

Módulos del SDK

Los siguientes módulos te permitirán interactuar con los distintos componentes del SDK.

Módulo General Data

Provee funciones que brindan información general del usuario y sobre los campos y lotes visibles en la interfaz.

getUserData()

Provee información general sobre el usuario.

Parámetros

No requiere parámetros.

Retorna

Un objeto con toda la información del usuario logueado:

  • id: string
  • tipo_usuario: string
  • datos: object
    • nombre: string
    • apellido: string
    • email: string
    • locale: string
  • admin: boolean
  • supervisor: boolean

getFarms()

Provee información general sobre los campos y lotes del usuario.

Parámetros

No requiere parámetros.

Retorna

Arreglo de objetos con la información de cada uno de los campos a los que tiene acceso el usuario:

  • id: String
  • nombre: String
  • bounds: Array [ xmin, ymin, xmax, ymax ]
  • permisos: Number[]
  • role: Number
  • supervised: Object[]
  • lotes: Object[]
    • id: number
    • nombre: String
    • country: String
    • wkt: String
    • bounds: Array [ xmin, ymin, xmax, ymax ]
    • centroide: string
    • area: Number
    • permisos: Number[]
    • role: Number

getFarmById()

Provee información sobre un campo específico.

Parámetros

ParámetroTipoDescripción
farmIDnumberid del campo del cual se requiere información

Retorna

Objeto con la información del campo solicitado:

  • id: number
  • bounds: Array [ xmin, ymin, xmax, ymax ]
  • nombre: string
  • lotes: Array [object,...]
    • id: number
    • bounds: Array [ xmin, ymin, xmax, ymax ]
    • centroide: string
    • area: number
    • nombre: string
    • wkt: string

getFieldById()

Provee información sobre un lote específico.

Parámetros

ParámetroTipoDescripción
fieldIDnumberid del lote del cual se requiere información

Retorna

Objeto con la información del lote solicitado:

  • id: number
  • bounds: Array [ xmin, ymin, xmax, ymax ]
  • centroide: string
  • area: number
  • nombre: string
  • wkt: string

getSpacesData()

Provee información sobre el espacio, en caso de existir, del usuario logueado.

Parámetros

No requiere parámetros.

Retorna

Objeto con la información del lote solicitado:

  • id: number
  • logo: string
  • thumbnail: string
  • color: string
  • nombre: string

getGlobalUnits()

Provee las unidades del usuario logeado.

Parámetros

No requiere parámetros.

Retorna

Arreglo con objetos que contienen la información de cada unidad. Tal que cada objeto contiene:

  • group: string (A que clase de unidades pertenece)
  • description: string (Descripción extendida de la unidad)
  • unit: string (Unidad)

async_refreshFarmsData()

Refresca la información sobre los campos que posee el usuario.

Parámetros

No requiere parámetros.

Retorna

Una promesa con la información de los campos del usuario:

  • result: String ('success'|'error')
  • info: Object[]
    • id: String
    • nombre: String
    • bounds: Array [ xmin, ymin, xmax, ymax ]
    • permisos: Number[]
    • role: Number
    • supervised: Object[]
    • lotes: Object[]
      • id: number
      • nombre: String
      • country: String
      • wkt: String
      • bounds: Array [ xmin, ymin, xmax, ymax ]
      • centroide: string
      • area: Number
      • permisos: Number[]
      • role: Number

async_getComponentsData()

Brinda información sobre la interfaz que el usuario está visualizando en la plataforma. En específico: ancho y alto del mapa y del menú lateral. De este último, además nos indica si el mismo se encuentra abierto o cerrado.

Parámetros

No requiere parámetros.

Retorna

Una promesa con la información mencionada:

  • result: string ('success'|'error')
  • info: Objeto
    • map: Object
      • width: number
      • height: number
    • sidenav: Object
      • width: number
      • height: number

async_getScreenData()

Brinda información sobre la interfaz del mapa que el usuario está visualizando en la plataforma, alto y ancho del mismo.

Parámetros

No requiere parámetros.

Retorna

Una promesa con la información mencionada:

  • result: string ('success'|'error')
  • info: objeto
    • width: number
    • height: number

async_getSamplings()

Brinda los muestreos correspondientes a los lotes que se envien como argumento.

Parámetros

ParámetroTipoDescripción
fieldsIdnumber[]Ids de los lotes cuyos muestreos se deseen obtener

Retorna

Una promesa con los muestreos de los lotes correspondientes agrupados por lote.

Operación exitosa:

  • result: string;
  • info: {[key: string]: Sampling[]};

Cada tipo sampling cumple con la interfaz:

interface Sampling {
groups: {
samples?: {
code?: string;
spot_data?: {
code?: string;
spot_data?: {
variables?: {
name?: string;
value?: number;
unit_id?: number;
[key: string]: any;
}[];
sampling?: {
analysis?: string;
[key: string]: any;
};
};
spot_uuid?: string;
};
spot_uuid?: string;
}[];
group_data?: {
[key: string]: {
color?: string;
name?: string;
};
};
group_uuid?: string;
}[];
yeargroup: number;
created_at: string;
field_id: number;
zoning: {
info?: {
date?: string;
layer?: string;
operation?: string;
hour?: string;
provider?: string;
};
type?: string;
};
analysis: {
[key: string]: {
name?: string;
unit_id?: number;
}[];
};
field_uuid: string;
sampling_name: string;
points: {
geometry?: string;
point_uuid?: string;
checked?: number;
created_at?: string;
group_uuid?: string;
}[];
group_assigned_id: number;
sampling_uuid: string;
closed_at: any;
sample_set_uuid: string;
}

async_createField

:Atención: No disponible en mobile todavía

Crea un lote según el objeto de configuración enviado.

Parámetros

Recibe un objeto de configuración con las siguientes propiedades:

  • fieldName: string. Nombre del nuevo lote.
  • polygon: string. WKT del neuvo lote
  • farmId:: number. (Opcional) id del campo al que pertenece el nuevo lote.
  • farmName: string. (Opcional) nombre del nuevo campo al que pertenece el lote, en caso de crear un campo nuevo.

Nota: Al menos uno de las propiedades 'farmId' o 'farmName' debe ser enviado.

Retorna

En caso de ser una operación existosa:

  • result: success
  • info:
    • res: string. Resultado de la operación.
    • fieldId: number. Id del lote creado.
    • farmId: farmId. Id del campo al cual se agregó el lote (Útil en caso de haber creado un campo).
    • info: string. Descripción del resultado de la operación.

En caso de ser una operación no exitosa:

  • result: error
  • info
    • res: string. Resultado de la operación.
    • code: number. Código del error.
    • info: string. Descripción del resultado de la operación.

Módulo State

Provee funciones que brindan información, o permiten modificar el estado de la interfaz.

async_getActualFarm()

Retorna los datos del campo seleccionado actualmente en la interfaz.

Parámetros

No requiere parámetros.

Retorna

Una promesa con el objeto campo en su información.

  • result: string ('success'|'error')
  • info: objeto
    • id: number
    • bounds: Array [ xmin, ymin, xmax, ymax ]
    • nombre: string
    • lotes: Array [object,...]
      • id: number
      • bounds: Array [ xmin, ymin, xmax, ymax ]
      • centroide: string
      • area: number
      • nombre: string
      • wkt: string

async_getActualField()

Retorna los datos del lote seleccionado actualmente en la interfaz.

Parámetros

No requiere parámetros.

Retorna

Una promesa con el objeto lote en su información.

  • result: string ('success'|'error')
  • info: objeto
    • id: number
    • bounds: Array [ xmin, ymin, xmax, ymax ]
    • centroide: string
    • area: number
    • nombre: string
    • wkt: string

async_getCurrentCampaign()

Retorna los datos de la campaña actual.

Parámetros

No requiere parámetros.

Retorna

Una promesa con la información de la campaña actual en un objeto.

  • result: string ('success'|'error')
  • info: objeto
    • text: string
    • value: number

setFarm()

Selecciona un campo en la interfaz principal.

Parámetros

ParámetroTipoDescripción
farmIDnumberid del campo a seleccionar

Retorna

No retorna ningún valor.

setField()

Selecciona un lote en la interfaz principal.

Parámetros

ParámetroTipoDescripción
fieldIDnumberid del lote a seleccionar

Retorna

No retorna ningún valor.

closeApp()

Cierra la ventana de la Extensión.

Parámetros

No requiere parámetros.

Retorna

No retorna ningún valor.

openFeature()

Abre una función estándard de la plataforma. Al llamar a esta función se cerrará la Extensión que se esté ejecutando!!.

Parámetros

ParámetroTipoDescripción
featureCodenumberid de la función a abrir

Los códigos pueden ser los siguientes:

Feature CodeFeature
100Nuevo Lote
200Registro de Campo
300Zonas de gestión
400Clima
500Histograma
600Ambientación
700Reporte
800Mis Mapas
900Nueva Capa
1000Riego
1100Fertilización
1110Fertilización-Ninta
1120Fertilización-Plena
1200Clima
1300Muestreos
1400Metadatos de la parcela

Retorna

No retorna ningún valor.

async_getConnectivityStatus

Indica si la plataforma tiene conectividad o no.

Parámetros

No requiere parámetros.

Retorna

Una promesa con el estado de conexión en su información. Puede ser "ONLINE" o "OFFLINE".

  • result: "success",
  • info: "ONLINE"

Módulo Map

Provee funciones que brindan información, o permiten operar sobre el mapa de la interfaz.

async_selectImage_v2()

⚠️ No disponible en mobile

Selecciona una imagen dentro de las capas existentes en la interfaz.

Parámetros

Objeto JSON conteniendo los siguiente datos:

{
"field": number // id del lote,
"source": string // string con la fuente de la imagen,
"operation": string // string con el id del tipo de capa/imagen
"date": string, con formato "YYYY-MM-DDTHH:mm:ssZ" // fecha exacta de la imagen,
"forCompare": boolean // (opcional) si se setea en true se habilita el visor comparativo
}

Retorna

Retorna una promesa con la información sobre la selección de la imagen.

focusField()

Mueve la cámara del mapa sobre el lote seleccionado actualmente.

Parámetros

No requiere parámetros.

Retorna

...

focusBounds()

Mueve la cámara del mapa sobre el bounds pasado como parámetro.

Parámetros

Objeto JSON conteniendo los siguientes datos:

{
"xmin": number, // latitud mínima de la extensión
"xmax": number, // latitud máxima de la extensión
"ymin":number, // longitud mínima de la extensión
"ymax":number, // longitud máxima de la extensión
}

Retorna

...

setViewMap()

Mueve la cámara del mapa sobre un punto específico pasado como parámetro.

Parámetros

Objeto JSON conteniendo los siguientes datos:

{
"point": Array, // las primeras dos posiciones indican la posición del punto. Deben ser de tipo number.
"x": number, // offset en x.
"y": number, // offset en y.
}

En caso que "x" e "y" no estén definidos o sean igual a cero, cada uno toma el valor 0.5 por defecto.

⚠️ Es posible que la función retorne un error (error 25) en caso de que la vista seleccionada esté por fuera del mapa. Por ejemplo: cuando las coordenadas del punto a mostrar se acercan a los límites del mapa siendo poco el zoom actual, por lo que requiere mostrar parte inexistente del mismo.

Retorna

...

async_drawFeature()

Dibuja sobre el mapa una serie de features vectoriales (en formato geojson).

Parámetros

Objeto GeoJSON.

Retorna

Promesa con el resultado del dibujo realizado sobre el mapa y su ID.

Ejemplo de uso

avt.map
.async_drawFeature({
type: "Feature",
geometry: {
type: "Point",
coordinates: [125.6, 10.1],
},
properties: {
name: "Dinagat Islands",
},
})
.then(console.log("mapa dibujado correctamente"));

clearFeatures()

Borra todos los features dibujados previamente en el mapa.

Parámetros

No se requieren parámetros.

Ejemplo de uso

// Dibuja un feature
avt.map
.async_drawFeature({
type: "Feature",
geometry: {
type: "Point",
coordinates: [125.6, 10.1],
},
properties: {
name: "Dinagat Islands",
},
})
.then(() => {
console.log("mapa dibujado correctamente");
avt.map.clearFeatures(); // Borra el feature inmediatamente
};

async_startDraw()

Permite al usuario dibujar un polígono o punto en el mapa.

Parámetros

  • mode: string que toma los valores "Polygon" o "Point".

Retorna

Promesa con el resultado del dibujo realizado sobre el mapa en su información.

  • type: tipo de objeto
  • id: entero que identifica la figura realizada
  • geometry : objecto GeoJSON
    • type: tipo de figura realizada
    • coordinates: array de coordenadas
  • properties: objeto de propiedades
    • distancias: array de distancias de los lados (en caso de ser un polígono)

Ejemplo de uso

avt.map
.async_startDraw({
mode: "Polygon",
})
.then((res) => console.log(res));

async_setStyle()

Permite al usuario asignar un estilo personalizado a un polígono o punto dibujado con async_startDraw.

Parámetros

  1. featureID: id del polígono o punto, obtenido de la respuesta de async_startDraw.
  2. style: objeto con dos keys de estilos.
    1. fill: estilo del relleno del polígono/punto.
    2. stroke: estilo del contorno del polígono/punto.

Ejemplo de uso

avt.map.async_setStyle({
featureID: "69FdCe0a-Cf52-1C5B-a80f-d09AE9bd3dDE",
style: {
fill: { color: "red" },
stroke: { color: "#4986d2" },
},
});

stopDraw()

Se llama cuando la función async_startDraw Fue llamada previamente. Cancela el dibujo.

Parámetros

No requiere parámetros.

Ejemplo de uso

avt.map
.async_startDraw({
mode: "Polygon",
})
.then((res) => console.log(res));
// Comienza a dibujar el usuario

// Luego de 3 segundos se cancela el dibujo
setTimeout(() => {
avt.map.stopDraw();
}, 3000);

async_drawFeatureFromWKT()

Permite dibujar una nueva figura en el mapa partiendo de un polígono expresado como WKT.

Parámetros

Recibe un string correspondiente a la figura expresada como WKT.

Retorna

Promesa con el UUID de la figura realizada sobre el mapa en su información.

  • info: string, UUID

Ejemplo de uso

let wkt_polygon = "POLYGON(( -65 -33, -65.7 -33, -65.7 -33.5, -65 -33 ))";
avt.map.async_drawFeatureFromWKT(wkt_polygon).then((res) => console.log(res));

// console:
// {
// "result": "success",
// "info": "dB3E5fF8-cead-13fc-a905-ECF0211bc2A8"
// }

addTooltipToFeature()

Permite agregar un tooltip a una figura previamente dibujada sobre el mapa (por ejemplo, usando async_drawFeatureFromWKT().

Parámetros

Recibe un objeto con las siguientes propiedades:

  • featureID : string, UUID de la figura dibujada
  • content: string, contenido del tooltip (puede contener html)

Ejemplo de uso

let texto = "Acá aparece el texto del tooltip";
avt.map.addTooltipToFeature({
featureID: "dB64B880-d4c1-1B8C-A0e9-DcFB4E6FA5e3",
content: `
<div style="background:white;color:black;border-radius:5px;width:100%;padding:5px;">
${texto}
</div>`,
});

async_getMapExtent()

Devuelve el bounding box de la porción de mapa que se está visualizando.

Parámetros

No requiere parámetros.

Retorna

Promesa con el array de coordenadas del bbox en su información.

Ejemplo de uso

avt.map.async_getMapExtent().then((res) => console.log(res));

// console:
// {
// "result": "success",
// "info": [
// minLongitude,
// minLatitude,
// maxLongitude,
// maxLatitude
// ]
// }

async_removeFeature()

Elimina un feature existente.

Parámetros

  • string: UUID del feature que será eliminado.

Retorna

Promesa que indica si la eliminación fue exitosa.

Ejemplo de uso

avt.map
.async_removeFeature("Dac7eD0c-8B1d-1e1b-B4B4-FEEfBab8Af6B")
.then((res) => console.log(res));

// console:
// {
// "result": "success",
// }

async_getActualPosition()

Devuelve las coordenadas de tu ubicación actual.

Parámetros

No requiere parámetros.

Retorna

Promesa con un array de coordenadas en su información.

Ejemplo de uso

avt.map.async_getActualPosition().then((res) => console.log(res));

// console:
// {
// "result": "success",
// "info": [
// <lat>,
// <long>
// ]
// }

hideFeatures()

Oculta todos los features dibujados.

Parámetros

No requiere parámetros.

Retorna

No retorna ningún valor.

Ejemplo de uso

avt.map.hideFeatures();

showFeatures()

Muestra todos los features previamente definidos. Si ya se encuentran dibujados en el mapa, no hace nada.

Parámetros

No requiere parámetros.

Retorna

No retorna ningún valor.

Ejemplo de uso

avt.map.showFeatures();

async_drawMarker()

Dibuja un icono en una posición determinada del mapa.

Parámetros

Un objeto con los siguientes parámetros:

  • point: Array, contiene dos elementos correspondientes a latitud y longitud
  • icon: string, nombre del icono a mostrar
  • b64: string, ícono en formato base 64, en caso de incluir este parámetro, se ignorará el de icon.

Iconos disponibles:

  • 'FARMER'
  • 'PIN'

Retorna

Promesa con el id del icono en su información.

Ejemplo de uso

avt.map
.async_drawMarker({
point: [-32, -62],
icon: "FARMER",
})
.then((res) => console.log(res));

avt.map
.async_drawMarker({
point: [-32, -62],
b64: "data:image/png;base64,iVBORw0...",
})
.then((res) => console.log(res));
// console:
// {
// "result": "success",
// "info": {
// "id": "Dcfd87b7-CED3-1620-A78e-a0E8cEf55239"
// }
// }

async_drawMarkerWithTooltip()

Dibuja un icono en una posición determinada del mapa con un tooltip.

Parámetros

Un objeto con los siguientes parámetros:

  • point: Array, contiene dos elementos correspondientes a latitud y longitud
  • icon: String, nombre del icono a mostrar
  • content: String, texto HTML que se renderiza dentro del tooltip
  • backgroundColor: String, código hexadecimal del color que tendrá de fondo el tooltip
  • metadata: Any
  • b64: string, ícono en formato base 64, en caso de incluir este parámetro, se ignorará el de icon.

Iconos disponibles:

  • 'FARMER'
  • 'PIN'

Retorna

Promesa con el id del icono en su información.

Ejemplo de uso

avt.map
.async_drawMarkerWithTooltip({
point: [-34, -62],
content: "<div style='color: #fff;'>Tooltip</div>",
metadata: "id del icono o descripcion, etc.",
backgroundColor: "#ffffff",
icon: "FARMER",
})
.then((res) => console.log(res));

// console:
// {
// "result": "success",
// "info": {
// "id": "Ba8C6edb-BFc9-1fD9-BFDA-30EAFDCe75a9"
// }
// }

async_drawMarkersWithTooltip()

Dibuja varios iconos a la vez en el mapa con un tooltip.

Parámetros

Toma un array de objetos, cada cual correspondiente a un icono.

Cada objeto tiene los siguientes parámetros:

  • point: Array, contiene dos elementos correspondientes a latitud y longitud
  • icon: String, nombre del icono a mostrar
  • content: String, texto HTML que se renderiza dentro del tooltip
  • backgroundColor: String, código hexadecimal del color que tendrá de fondo el tooltip
  • metadata: Any
  • b64: string, ícono en formato base 64, en caso de incluir este parámetro, se ignorará el de icon.

Iconos disponibles:

  • 'FARMER'
  • 'PIN'

Retorna

Promesa con un array de IDs bajo el campo ids. El array se encuentra ordenado cómo se ordenaron los iconos en el array que se envía como parámetro.

Ejemplo de uso

avt.map
.async_drawMarkersWithTooltip([
{
point: [-34, -62.5],
icon: "FARMER",
},
{
point: [-33.5, -62.5],
icon: "PIN",
},
{
point: [-33, -62.5],
icon: "FARMER",
},
])
.then((res) => console.log(res));

// console:
// {
// "result": "success",
// "info": {
// "ids": [
// "7d7e6DE5-d1dC-142F-B29B-2FF41ebedade",
// "f09B8970-feA5-102A-bcF8-b4aBFAadD0F6",
// "40A9A52C-Bba7-1905-86D0-CC78a9b29656"
// ]
// }
// }

Módulo Storage

Provee funciones que permiten almacenar información en nuestros servidores para luego recuperarla cuando sea necesario.

La información se almacena en formato Key-Value, es decir, un objeto JSON (Value) bajo un nombre (Key).

Además, cada Key-Value se asocia a un alcance: Usuarios, Lotes o Campos. Este alcance define quién puede acceder a los datos. Por ejemplo, si se crea un Key-Value asociado a un Lote, todos los usuarios que tengan acceso de lectura sobre dicho lote podrán recuperar ese dato, independientemente del usuario que lo almacenó.

Es importante pensar correctamente el alcance que se le va asignar al Key-Value para no exponer datos.

Sobre el alcance de un Usuario, los Key-Values pueden ser:

  • creados/recuperados por el usuario en cuestión.
  • creados/recuperados por el administrador del espacio al que el usuario pertenece (en caso de pertenecer a un espacio).
  • recuperados por el supervisor con permiso de lectura del grupo al que el usuario pertenece (en caso de pertenecer a un grupo de supervisión).
  • creados/recuperados por el supervisor con permiso de edición del grupo al que el usuario pertenece (en caso de pertenecer a un grupo de supervisión).
  • eliminados por el mismo usuario o su supervisor o administrador (en caso de formar parte de un espacio)

Sobre el alcance de un Lote, los Key-Values pueden ser:

  • creados/recuperados por los usuarios dueños o con permiso de edición/agregado/administración sobre el Lote.
  • recuperados por los usuarios con permiso de lectura sobre el Lote.
  • eliminados por los usuarios con permiso de administración sobre el lote.

Sobre el alcance de un Campo, los Key-Values pueden ser:

  • creados/recuperados por los usuarios dueños o con permiso de edición/agregado/administración sobre el Campo.
  • recuperados por los usuarios dueños o con algún permiso sobre el Campo.
  • eliminados por los usuarios con permiso de administración sobre el campo.

Los nombres de los objetos pueden ser combinaciones de letras a-Z, números o guión bajo (_). Debe verificar el regex "\w+"

Para un mismo alcance, no se puede repetir el nombre del objeto.

put()

Permite almacenar un objeto bajo un nombre (Key). Según el alcance:

  • avt.storage.user.put()
  • avt.storage.field.put()
  • avt.storage.farm.put()

NOTA: En la aplicación móvil, las operaciones PUT y PATCH se encolan por un manejador (handler) para que, en caso de estar offline, se guarden y puedan realizarse al reestablecerse la conexión. Este manejador recibe las operaciones tanto si se encuentra offline como si se encuentra online. La respuesta a la promesa que genera una llamada a tales operaciones corresponde a si el manejador pudo encolar la llamada exitosamente o no. Esto genera que, en el caso de la app para dispositivos móviles, la respuesta a PUT y a PATCH no disponga información acerca de si la operación fue llevada a cabo exitosamente por el handler, sino que contiene información acerca de si fue aceptada por el mismo. Para ver esta cola de tareas, se debe pulsar sobre la imagen del usuario e ingresar al apartado "Sincronizar".

Parámetros:

Recibe un solo parámetro de tipo objeto que cuenta con las siguientes propiedades:

  1. id: ID del recurso (Usuario, Lote o Campo) según el alcance
  2. key: Key del objeto a almacenar
  3. value: objeto a almacenar
  4. overwrite: (opcional) bool indicando si se debe sobreescribir el objeto en caso de ya existir. De no especificarse, por defecto toma el valor false.

Respuesta:

Promesa con el objeto JSON de respuesta bajo la llave "info". Este objeto tiene la propiedad "code" que indica el resultado de la operación:

codedescripción
1faltan datos
2la Key es inválida, al no respetar regex '^\w+$'
3el usuario no tiene permisos sobre el recurso según el alcance solicitado
4versión de Extensión inválida
5la Key ya existe para el alcance dado. (Solo posible si overwrite es false)
6Error

En caso que "code" < 0, revisar los códigos de respuesta generales.

Ejemplo de uso:

avt.storage.user
.put({
id: "UID-dbaefe8503fe6cdb7909611e8953e74f",
key: "test_key",
value: { name: "juan", lastname: "perez" },
overwrite: true,
})
.then((response) => console.log(response));

avt.storage.field
.put({
id: 1000,
key: "other_test_key",
value: { fieldInfo: { valid: false } },
})
.then((response) => console.log(response));

patch()

Permite modificar un objeto bajo un nombre (Key) ya existente. Según el alcance:

  • avt.storage.user.patch()
  • avt.storage.field.patch()
  • avt.storage.farm.patch()

NOTA: En la aplicación móvil, las operaciones PUT y PATCH se encolan por un manejador (handler) para que, en caso de estar offline, se guarden y puedan realizarse al reestablecerse la conexión. Este manejador recibe las operaciones tanto si se encuentra offline como si se encuentra online. La respuesta a la promesa que genera una llamada a tales operaciones corresponde a si el manejador pudo encolar la llamada exitosamente o no. Esto genera que, en el caso de la app para dispositivos móviles, la respuesta a PUT y a PATCH no disponga información acerca de si la operación fue llevada a cabo exitosamente por el handler, sino que contiene información acerca de si fue aceptada por el mismo. Para ver esta cola de tareas, se debe pulsar sobre la imagen del usuario e ingresar al apartado "Sincronizar".

Parámetros:

Recibe un solo parámetro de tipo objeto que cuenta con las siguientes propiedades:

  1. id: ID del recurso (Usuario, Lote o Campo) según el alcance
  2. key: Key del objeto a modificar
  3. value: objeto nuevo
  4. append: false por defecto, booleano que, en caso de ser true, indica que el value debe agregarse al valor existente bajo la misma key. En caso de ser false, indica que el value debe reemplazar el valor previo bajo la misma key.
  5. create: false por defecto, booleano que indica si debe o no crearse la key, en caso de no existir previamente.

Respuesta:

Promesa con el objeto JSON de respuesta bajo la llave "info". Este objeto tiene la propiedad "code" que indica el resultado de la operación:

codedescripción
0objeto modificado exitosamente
1faltan datos
2la Key es inválida, al no respetar regex '^\w+$'
3el usuario no tiene permisos sobre el recurso según el alcance solicitado
4versión de Extensión inválida
5la Key ya existe para el alcance dado
6Error

En caso que "code" < 0, revisar los códigos de respuesta generales.

Ejemplo de uso:

avt.storage.user
.patch({
id: "UID-dbaefe8503fe6cdb7909611e8953e74f",
key: "test_key",
value: {
name: "juan",
lastname: "perez",
otherAttribute: 50,
},
append: true,
create: false,
})
.then((response) => console.log(response));

avt.storage.field
.patch({
id: 1000,
key: "other_test_key",
value: { fieldInfo: { valid: true } },
append: true,
create: false,
})
.then((response) => console.log(response));

get()

Permite recuperar los objetos bajo uno o varios nombres (Keys). Según el alcance:

  • avt.storage.user.get()
  • avt.storage.field.get()
  • avt.storage.farm.get()

Es posible obtener múltiples Keys para múltiples IDs en una única llamada.

Parámetros:

Recibe un solo parámetro de tipo objeto que cuenta con las siguientes propiedades:

  1. ids: array de IDs de los recursos (Usuario, Lote o Campo) según el alcance.
  2. keys: array de las Keys a recuperar.

Se recuperará cada Key del array keys para cada ID del array ids, si es que existen. Además, en caso de enviar en ids un array vacío para el alcance Lotes o Campos, se buscarán las keys indicadas para todos los Lotes/Campos sobre los que el usuario tenga permiso de lectura.

Respuesta:

Promesa con el objeto JSON de respuesta bajo la llave "info". Este objeto tiene la propiedad "code" que indica el resultado de la operación, y la propiedad "objects" con los datos:

codedescripción
0objeto recuperado exitosamente
1faltan datos
2al menos una Key solicitada es inválida, al no respetar regex '\w+'
3el usuario no tiene permisos sobre al menos un recurso según el alcance solicitado
4versión de Extensión inválida
5al menos un ID solicitado es inválido

En caso que "code" < 0, revisar los códigos de respuesta generales.

Ejemplo de respuesta:


avt.storage.field.get(
{
ids:[1000, 1050],
keys:['test_key', 'other_test_key', 'another_test_key']
}
).then( response => console.log( response['info'] ) )
//output:
{
"code": 0,
"objects": {
1000: {
"test_key": {...},
"other_test_key": {...}
}
},
1050: {
"another_test_key": {...}
"other_test_key": {...}
}
}

Ejemplo de uso:

avt.storage.user
.get({
ids: ["UID-dbaefe8503fe6cdb7909611e8953e74f"],
keys: ["test_key"],
})
.then((response) => console.log(response));

avt.storage.field
.get({
ids: [1000, 1050],
keys: ["test_key", "other_test_key", "another_test_key"],
})
.then((response) => console.log(response));

delete()

Permite eliminar uno o múltiples objetos bajo nombres (Keys) ya existentes. Según el alcance:

  • avt.storage.user.delete()
  • avt.storage.field.delete()
  • avt.storage.farm.delete()

Parámetros:

Recibe un solo parámetro de tipo objeto que cuenta con las siguientes propiedades:

  1. id: ID del recurso (Usuario, Lote o Campo) según el alcance
  2. keys: array con las Keys a eliminar.

Para el id provisto, se eliminarán todos las keys que existan.

Respuesta:

Promesa con el objeto JSON de respuesta bajo la llave "info". Este objeto tiene la propiedad "code" que indica el resultado de la operación:

codedescripción
0objeto modificado exitosamente
1la Key no fue provista
2la Key es inválida, al no respetar regex '^\w+$'
3el usuario no tiene permisos sobre el recurso según el alcance solicitado
4versión de Extensión inválida
6Error

En caso que "code" < 0, revisar los códigos de respuesta generales.

Ejemplo de uso:

avt.storage.user
.delete({
id: "UID-dbaefe8503fe6cdb7909611e8953e74f",
keys: ["test_key"],
})
.then((response) => console.log(response));

avt.storage.field
.delete({
id: 1000,
keys: ["other_test_key", "unexisting_key"],
})
.then((response) => console.log(response));

Módulo Interface

Provee herramientas que permiten interactuar con la interfaz de la plataforma.

testMessage()

Permite mostrar un mensaje en la consola del navegador. Es útil para verificar que estemos bien conectados con las funciones del sdk.

  • avt.interface.testMessage()

Parámetros:

  • string texto para mostrar en consola

Ejemplo de uso:

avt.interface.testMessage("Mensaje de prueba");

async_toast()

Permite mostrar una alerta en el navegador, para informar al usuario sobre algún evento.

  • avt.interface.async_toast()

Parámetros:

  1. type: (string) tipo de alerta que se quiere enviar. //warning, info, success, error
  2. message: (string) mensaje de la alerta
  3. options: (object) objeto con configuración opcional para personalizar la alerta
    1. timeOut: (integer) duración de la alerta (expresada en milisegundos)
    2. closeButton: (boolean) mostrar botón para cerrar la alerta
    3. newestOnTop: (boolean) ubicar la alerta más reciente al principio de la lista

Ejemplo de uso:

avt.interface.async_toast({
type: "warning",
message: "Se eliminó el lote.",
});

avt.interface.async_toast({
type: "success",
message: "Información guardada correctamente.",
});

avt.interface.async_toast({
type: "error",
message: "Algo salió mal.",
options: {
timeOut: 5000,
closeButton: true,
newestOnTop: true,
},
});

download_file()

Permite al usuario decargar un archivo, tanto desde la aplicación web como desde mobile.

  • avt.interface.download_file()

Parámetros:

  1. url: (string) url del archivo que se quiere descargar
  2. filename: (opcional) nombre del archivo

Ejemplo de uso:

avt.interface.download_file(URL, "Descarga");

setWindow()

Permite editar estilos básicos de la ventana que contiene a la extensión.

Parámetros:

Se puede definir una altura y un ancho específico por medio de un objeto que contenga las siguientes propiedades:

  1. height: (string | opcional) medida en pixeles
  2. width: (string | opcional) medida en pixeles

Por otro lado se puede setear que la extensión ocupe la pantalla completa por medio de un objeto que contenga la siguiente propiedad:

  1. type: "full"

Ejemplo de uso:

avt.interface.setWindow({
width: "600px",
});
//modificamos el ancho de la extensión.
avt.interface.setWindow({
width: "600px",
height: "750px"
});
//modificamos el ancho y alto de la extensión.
avt.interface.setWindow({
type: "full",
});
//seteamos la extensión con pantalla completa.

openWindow()

Permite abrir una nueva pestaña en el navegador, teniendo la url como parámetro.

Ejemplo de uso:

avt.interface.openWindow("https://google.com");

openPopupWindow()

Permite abrir una nueva ventana, como Pop-up en el navegador, teniendo la url como parámetro.

Ejemplo de uso:

avt.interface.openPopupWindow("https://google.com");

minimizeWindow()

Permite minimizar la extensión, sin la necesidad de cerrarla.

Ejemplo de uso:

avt.interface.minimizeWindow();

maximizeWindow()

Permite maximizar la extensión previamente minimizada.

Ejemplo de uso:

avt.interface.maximizeWindow();

collapseSidenav()

Colapsa la barra de navegación lateral de la plataforma.

Ejemplo de uso:

avt.interface.collapseSidenav();

expandSidenav()

Expande la barra de navegación lateral de la plataforma si se encuentra colapsada.

Ejemplo de uso:

avt.interface.expandSidenav();

startCompare()

Habilita la comparación entre dos capas del mismo lote, seleccionadas por el usuario.

Ejemplo de uso:

avt.interface.startCompare();

finishCompare()

Deshabilita la comparación entre dos capas del mismo lote.

Ejemplo de uso:

avt.interface.finishCompare();

async_getLayerTypes()

Retorna un arreglo con las capas disponibles para el lote seleccionado. No recibe parámetros. Es necesario tener un lote seleccionado.

Ejemplo de uso:

avt.interface.async_getLayerTypes().then((res) => {
console.log(res);
});

Ejemplo de respuesta

{
"result": "success",
"info": [
"NDVI",
"GNDVI",
"Visible",
"MSAVI2",
"NDRE",
"NDWI"
]
}

async_fetchDates()

Realiza una solicitud asíncrona para obtener información detallada de las fechas y capas de un lote en específico. Además actualiza las fechas del selector de capas

  • avt.interface.async_fetchDates(fieldId)

Parámetros:

  1. fieldId: (string | number) ID del campo para el cual se quieren obtener los datos de las fechas y capas.

Ejemplo de uso:

avt.interface.async_fetchDates("12345").then((response) => {
console.log(res);
});

Eventos

Además de las funciones, existen algunos eventos predefinidos que puedes escuchar para interactuar con la plataforma.

readySDK

Se activa cuando el SDK termina de cargar. Puede ser útil para esperar a que este evento se active antes de cargar el resto de la aplicación. De esta forma las funciones que se utilicen del SDK estarán disponibles.

mapClicked

Se activa cuando el usuario hace click en el mapa.

Retorna

  • event.detail: Object
    • coord: Array, coordenadas del punto
    • mapSize: Array, tamaño del mapa actual [ancho, alto]
    • pixel: Array, pixel clickeado

farmSelected

Se activa cuando el usuario selecciona un campo.

Retorna

  • event.detail: Object
    • id: Integer, id del campo seleccionado

fieldSelected

Se activa cuando el usuario selecciona un lote.

Retorna

  • event.detail: Object
    • id: Integer, id del lote seleccionado

campaignChanged

Se activa cuando el usuario cambia la campaña seleccionada.

Retorna

  • event.detail: Object
    • yeargroup: Integer, valor de la campaña seleccionada

featureClicked

Se activa cuando el usuario clickea en un feature dibujado en el mapa.

Retorna

  • event.detail: String, UUID del feature

selectorReseted

Se activa cuando el usuario clickea el botón de reset (ícono de casa) del selector de campo. Esta acción quita el campo y el lote seleccionados.

Retorna

  • event.detail: null

Ejemplo de uso

// Muestra en consola el id del lote seleccionado cada vez que el usuario cambia de lote
window.addEventListener("fieldSelected", () => {
console.log(event.detail.id);
});