JSON del proyecto

Los proyectos se configuran normalmente en el diseñador de ArcGIS QuickCapture mediante la interfaz gráfica, pero también se puede modificar el código JSON del proyecto.

Al editar el JSON del proyecto, puede modificar las siguientes propiedades:

  • userInput: cadena de caracteres proporcionada por el usuario que puede utilizarse para rellenar atributos de un registro.
  • preferences: aplicable a todos los registros capturados en un proyecto.
  • basemap: mapa mostrado al revisar datos.
  • dataSources: enumera las capas de entidades utilizadas por los botones del proyecto.
  • templateGroups: representa un grupo de botones.
  • templates: representa un botón
    • captureInfo: cómo se capturan los datos cuando se selecciona un botón. Configure esta opción para mostrar el mapa tras la captura (para la edición de la ubicación) y personalice el texto de visualización y la sugerencia que se muestran en la página del mapa.
    • displayInfo: qué apariencia tendrá un botón.
    • fieldInfo: los valores de atributo que se capturarán para el registro.
    • cameraInfo: cómo se capturan las fotos para el registro.
  • tracking: representa la capa de uso compartido de la ubicación utilizada por el proyecto.

Algunas de estas propiedades son matrices de propiedades adicionales. En las siguientes subsecciones se describen los detalles de las matrices de propiedades.

Preferencias

Las siguientes propiedades son aplicables al proyecto o a todos los registros capturados en un proyecto:

PropiedadDescripciónTipo de campo
backgroundColor

Color de fondo del proyecto en forma de valor hexadecimal HTML.

Cadena de caracteres

splitScreen

Muestra los botones y el mapa en paralelo.

Booleano

horizontalAccuracyWarning

Un valor decimal, en metros, que define un umbral recomendado por encima del cual la precisión horizontal deja de considerarse suficiente. Se utiliza para cambiar el color de la visualización de precisión horizontal en la página del proyecto. Esta propiedad acepta un valor máximo de 999 metros.

Decimal

horizontalAccuracyError

Un valor decimal, en metros, que define un umbral requerido por encima del cual la precisión horizontal deja de considerarse suficiente. Se utiliza para impedir que el usuario capture registros o vértices si no se cumple el umbral. Esta propiedad acepta un valor máximo de 999 metros.

Decimal

allowEditLocation

Permita que la ubicación de un punto se actualice en un plazo de tiempo limitado tras la captura.

Booleano

distanceThreshold

La distancia de movimiento mínima en metros desde el último vértice o punto capturado para poder capturar un nuevo vértice o punto. La distancia predeterminada son 10 metros.

Decimal

undoThreshold

El tiempo en segundos después de la captura dentro del cual se pueden eliminar registros o actualizar su ubicación.

Decimal

adminEmail

Especifica el destinatario de los archivos de recuperación de datos generados por la aplicación móvil.

Cadena de caracteres

coordinateNotationFormat

Establezca el formato de notación de las coordenadas del proyecto que se muestra en la aplicación móvil. Los valores compatibles son UTM, USNG, MGRS, DD, DDM y DMS. El valor predeterminado es DD.

Doble

Aunque se pueden definir umbrales para horizontalAccuracyWarning y horizontalAccuracyError, el valor de horizontalAccuracyWarning debe ser siempre inferior que el de error. Por ejemplo, si define una precisión horizontal recomendada de 10 metros y una precisión horizontal requerida de 30 metros, y su dispositivo devuelve una precisión de 20 metros, aparecerá una advertencia. Si su dispositivo devuelve una precisión de 40 metros, no podrá capturar registros.

El siguiente ejemplo muestra unas preferencias definidas con un fondo gris, la precisión horizontal recomendada de 10 metros, sin ningún umbral de distancia y una dirección de correo electrónico de administrador de quickcapture@esri.com:

{
   "basemap":{

   },
   "dataSources":[

   ],
   "itemId":"",
   "preferences":{
      "splitScreen":false,
      "backgroundColor":"#f3f3f4",
      "horizontalAccuracyError":null,
      "horizontalAccuracyWarning":10,
      "distanceThreshold":null,
      "undoThreshold":10,
      "adminEmail":"quickcapture@esri.com"
   },
   "templateGroups":[

   ],
   "userInputs":[

   ],
   "version":""
}
Nota:

Para los valores decimales se debe usar un punto como separador decimal y no se deben usar separadores de miles. El editor de JSON no acepta comas.

Mapa base

De forma predeterminada, el mapa de un nuevo proyecto coincidirá con el mapa base predeterminado de la organización. Cuando inicie sesión en la aplicación con una cuenta de organización, el usuario verá el mapa base actual predeterminado de la organización en ese proyecto. Si el usuario tiene cerrada la sesión de la aplicación, se muestra el Mapa topográfico mundial de Esri.

Las siguientes propiedades se utilizan para identificar un mapa que se utilizará en un proyecto:

PropiedadDescripciónTipo de campo
type

WebMap, MMPK, VTPK o TPK. Cuando es nulo, se utiliza el Mapa topográfico mundial de Esri.

Cadena de caracteres

itemId

El Id. de elemento del mapa.

Cadena de caracteres

useDefaultBasemap

True (predeterminado) o false.

Booleano

Los creadores del proyecto pueden invalidar el comportamiento predeterminado seleccionando un mapa en línea o sin conexión de su elección. Si useDefaultBasemap está establecido en false y itemId es nulo, el proyecto utilizará el Mapa topográfico mundial de Esri.

El siguiente ejemplo muestra un mapa web requerido que solo está disponible para el usuario que lo descargó:

{
   "basemap":{
      "type":"WebMap",
      "itemId":fae788aa91e54244b161b59725dcbb2a,
      "useDefaultBasemap":false,
      "required":true,
      "zoomLevel":null
   }
}

Para mostrar a los usuarios los datos enviados anteriormente en un mapa de su proyecto, puede configurar un mapa web que contenga los datos de proyecto y designarlo como mapa base.

  • El mapa web debe contener al menos las mismas capas que el proyecto. También se pueden incluir otras capas.
  • Se utilizará la simbología definida en el mapa web para simbolizar las entidades enviadas.
  • Los datos capturados en el dispositivo que no se hayan enviado se simbolizarán con la simbología predeterminada de QuickCapture. Por ejemplo, los puntos se simbolizarán con el marcador azul.

Nota:

Solo se admiten mapas con la referencia espacial Web Mercator.

Fuentes de datos

Las siguientes propiedades se utilizan para identificar una capa de entidades en un proyecto:

PropiedadDescripciónTipo de campo
dataSourceId

Un número único asignado por QuickCapture a este proyecto para identificar esta capa en la matriz. No es el índice de la capa en el servicio de entidades. Un mismo proyecto puede tener capas de distintos servicios de entidades.

Entero

featureServiceItemId

El Id. de elemento del servicio de entidades que contiene esta capa.

Cadena de caracteres

URL

La URL del extremo REST de la capa de entidades (…/FeatureServer/0). Esta URL debe incluir la URL completa, hasta el índice de la capa.

Cadena de caracteres

Es posible enumerar una o varias fuentes de datos en la propiedad dataSource. En el siguiente ejemplo, se enumeran dos capas que proceden de dos servicios de entidades distintos:

{
   "basemap":{

   },
   "dataSources":[
      {
         "featureServiceItemId":"1f683747c06c4a7e9843a477b2ab41e0",
         "dataSourceId":0,
         "url":"https://services1.arcgis.com/e7dVfn25KpfE6dDd/arcgis/rest/services/LayerOne/FeatureServer/0"
      },
      {
         "featureServiceItemId":"2b313747c06c4a7e9843a477b2ab41e0",
         "dataSourceId":1,
         "url":"https://services1.arcgis.com/b45KpfE6dEf121/arcgis/rest/services/LayerTwo/FeatureServer/1"
      }
   ],
   "itemId":"",
   "preferences":{

   },
   "templateGroups":[

   ],
   "userInputs":[

   ],
   "version":""
}

Grupos de plantillas

Las siguientes propiedades se utilizan para definir cómo se muestra un grupo de botones en un proyecto. Cada grupo de botones puede utilizar distintas propiedades.

PropiedadDescripciónTipo de campo
name

Nombre del grupo.

Cadena de caracteres

label

Etiqueta mostrada en el proyecto para el grupo.

Cadena de caracteres

columns

Número de columnas del grupo.

Entero

columnSpacing

Espaciado entre columnas.

Decimal

rowSpacing

Espaciado entre filas.

Decimal

backgroundColor

Color de fondo del grupo en forma de valor hexadecimal HTML.

Cadena de caracteres

outlineColor

Color de contorno del grupo en forma de valor hexadecimal HTML.

Cadena de caracteres

expanded

El valor predeterminado es true.

Booleano

labelColor

Color de la etiqueta del grupo en forma de valor hexadecimal HTML.

Cadena de caracteres

Plantilla

Las siguientes propiedades se utilizan para identificar la capa de entidades relacionada con un botón:

PropiedadDescripciónTipo de campo
id

El UUID del botón.

Texto

dataSourceId

Hace referencia a la capa de destino en la que se almacenan los datos. El Id. hace referencia a una fuente de datos de la matriz de fuentes de datos.

Entero

captureInfo

Las siguientes propiedades describen cómo se capturarán los datos:

PropiedadDescripciónTipo de campo
exclusivityGroup

Un valor que define un grupo de exclusividad. Se agrupan todas las plantillas con el mismo valor, con exclusive definido como true. Cuando se define, solo puede estar activo un botón con el valor cada vez.

Texto

type

esriGeometryPoint, esriGeometryPolyline o esriGeometryPolygon.

Cadena de caracteres

continuous

Siempre con el valor true para líneas y polígonos.

Booleano

editMap

Opciones para editar el mapa. Elija si desea mostrar el mapa tras la captura (el valor predeterminado es false), personalizar el título del mapa (el valor predeterminado es null) o personalizar la sugerencia del mapa (el valor predeterminado es null).

Cadena de caracteres

displayInfo

Las siguientes propiedades describen qué apariencia tendrá un botón:

PropiedadDescripciónTipo de campo
label

La etiqueta del botón.

Cadena de caracteres

shape

Rectángulo, redondeado o círculo.

Cadena de caracteres

size

Pequeño, mediano, grande, extra grande y XXL.

Cadena de caracteres

color

Color de fondo del botón en forma de valor hexadecimal HTML.

Cadena de caracteres

outlineColor

Color de contorno del botón en forma de valor hexadecimal HTML.

Cadena de caracteres

outlineWidth

Ancho del contorno del botón.

Decimal

labelColor

Color de la etiqueta del botón en forma de valor hexadecimal HTML.

Cadena de caracteres

labelFontSize

Tamaño de fuente de la etiqueta del botón.

Entero

labelFontWeight

Negrita o redonda.

Cadena de caracteres

shadowColor

Si no se proporciona ningún valor, la aplicación utilizará el mismo valor de backgroundColor que el del grupo. Por tanto, la sombra no será visible.

Cadena de caracteres

image

Imagen que se mostrará con el botón en formato PNG, JPG o SVG. Todas las imágenes se almacenan como recursos del elemento en la carpeta de imágenes.

Cadena de caracteres

fieldInfo

Las siguientes propiedades describen información de atributo que se introduce en el servicio de entidades al tocar un botón. Normalmente, el creador de un proyecto utilizará texto predefinido o variables de campo para rellenar los campos del registro capturado.

PropiedadDescripciónTipo de campo
fieldName

Nombre del campo.

Cadena de caracteres

value

Puede contener cualquiera de las propiedades enumeradas en este tema.

Cadena de caracteres

cameraInfo

Las siguientes propiedades describen cómo se pueden capturar y guardar fotos en un proyecto. De forma predeterminada, si habilita la captura de fotos en un botón, la foto siempre es obligatoria. Puede hacer que la captura de la foto sea opcional cambiando la propiedad required a false y especificar la calidad de la foto cambiando la propiedad imageSize.

PropiedadDescripciónTipo de campo
mode

Ninguno (predeterminado): no se asocia ninguna foto a la entidad.

Automático: se toma una foto sin confirmación del usuario en cuanto se selecciona el botón.

Manual: se muestra la vista previa de la cámara y el usuario controla la captura de una foto.

Cadena de caracteres

imageSize

Pequeño (320 píxeles en el borde más largo), mediano (640 píxeles en el borde más largo), grande (predeterminado, 1280 píxeles en el borde más largo) o sin restricción (sin límite de tamaño). Si la aplicación cambia el tamaño de la imagen, se mantendrá la relación de aspecto de la imagen capturada.

Cadena de caracteres

required

True (predeterminado) o false.

Booleano

maxPhotos

Número máximo de fotos capturadas por un botón.

Entero

minPhotos

Número mínimo de fotos capturadas por un botón.

Entero

En el siguiente ejemplo, se toma una foto opcional sin confirmación:

{
   "mode":"automatic",
   "imageSize":"unrestricted",
   "required":true
}

notificationsInfo

Las siguientes propiedades se utilizan para configurar las notificaciones en un proyecto. Actualmente, la única notificación que se admite es un webhook.

PropiedadDescripciónTipo de campo
id

Id. único del webhook (en el proyecto).

Cadena de caracteres

name

Nombre del webhook.

Cadena de caracteres

active

Verdadero o falso (predeterminado).

Booleano

created

Fecha y hora en las que se creó el webhook.

Fecha

modified

Fecha y hora en la que se modificó el webhook por última vez.

Fecha

events

Tipo de evento que desencadena el webhook. Solo se admite el evento de addData.

Cadena de caracteres

targetLayerUrl

La capa de servicio de entidades (incluido el índice de la capa) según la que se ha configurado el webhook. Las actualizaciones de esta capa desencadenarán los eventos de addData.

Cadena de caracteres

webhookUrl

La URL de webhook a la que se enviará la carga.

Cadena de caracteres

includePortalInfo

True (predeterminado) o false.

Booleano

includeProjectInfo

True (predeterminado) o false.

Booleano

includeServiceRequest

True (predeterminado) o false.

Booleano

includeServiceResponse

True (predeterminado) o false.

Booleano

En el ejemplo siguiente, se muestra un único webhook, pero se puede configurar más de uno en un mismo proyecto:

 "notificationsInfo": {
    "webhooks": [
      {
        "active": true,
        "created": 1502880915000,
        "events": [
          "addData"
        ],
        "id": "ByCjvHpPz",
        "includePortalInfo": true,
        "includeProjectInfo": true,
        "includeServiceRequest": true,
        "includeServiceResponse": true,
        "includeUserInfo": true,
        "modified": 1502881754000,
        "name": "Display name",
        "targetLayerUrl": "https://<serviceurl including layer index>",
        "webhookUrl": "https://<webhookserviceurl>"
      }
    ]
  }

Variables de campo

Si se utilizan estas variables en el editor de JSON, se debe introducir el nombre de la variable en el formato de ${variable_name}. En el siguiente ejemplo, la variable username se asigna a un campo llamado NameOfUser:

{
   "fieldName":"NameOfUser",
   "value":"${username}"
}

Variable de entrada de usuario

El valor de variable de userInput lo rellena el usuario de la aplicación y se puede aplicar a uno o varios botones de un proyecto. El usuario de la aplicación introduce el valor; no obstante, el creador del proyecto debe definir los botones y campos a los que se aplicará la variable.

PropiedadDescripciónTipo de campo
Id

Id. único de la entrada de usuario.

Cadena de caracteres

label

La etiqueta se muestra en la aplicación móvil para describir el valor de entrada esperado del usuario final. Por ejemplo, la etiqueta podría ser RouteNo, CostCenter o RouteNo-CostCenter.

Cadena de caracteres

fieldType

El tipo de campo en el que se puede escribir el valor de entrada de usuario. Las opciones se limitan a esriFieldTypeString, esriFieldTypeDouble y esriFieldTypeInteger.

Cadena de caracteres

required

Especifica si el valor de entrada de usuario debe ser proporcionado por el usuario final de la aplicación móvil antes (modo de proyecto) o después (modo de botón) de poder pulsar un botón.

Booleano

domain

Controla la entrada de usuario y se limita a un rango numérico (rango), una lista de valores predefinidos (codedValue) o una entrada de texto, utilizando si se desea una máscara de entrada (userDefined).

Cadena de caracteres

mode

Controla si al usuario se le solicita la entrada al iniciar el proyecto (proyecto) o al pulsar un botón (botón).

Cadena de caracteres

multiline

Permite la entrada de varias líneas de texto. Solo se aplica cuando domain es userDefined.

Booleano

autoCompleteMaxEntries

Especifica la cantidad de valores introducidos por el usuario que se almacenan en caché para una entrada de usuario del proyecto.

Entero

showEvent

Controla si el cuadro de diálogo de entrada del usuario del botón se muestra al principio de la captura del registro o al final. Las opciones son onStart y onEnd. La opción predeterminada es onEnd. Solo se aplica cuando domain es userDefined.

Cadena de caracteres

showScanner

Controla si el escáner de código de barras se muestra en la entrada del usuario. El valor predeterminado es falso. Solo se aplica cuando domain es userDefined.

Booleano

dateTime

Controla la entrada de la fecha y hora. Solo se aplica cuando domain es userDefined. Puede restringirse mediante lo siguiente: defaultValue, displayTime, maxValue y minValue.

Fecha

Para saber cuándo utilizar cada modo, consulte Variable de entrada de usuario de proyecto o Variable de botón de entrada de usuario.

Se recomienda que los dominios puedan administrarse en el servicio de entidades. El diseñador web lee la información de dominio directamente del servicio de entidades para crear la entrada de usuario. La información de dominio no se escribe automáticamente en el JSON del proyecto.

La aplicación móvil lee la información de dominio directamente del servicio de entidades y la almacena localmente en el dispositivo. Si agrega o modifica valores de dominio en el servicio de entidades, debe volver a guardar el proyecto para que se le solicite al usuario que actualice el proyecto y vea los cambios.

Precaución:

El creador de un proyecto tiene la opción de definir manualmente la información de dominio directamente con el JSON del proyecto. De este modo, se invalida todo aquello que se lea del servicio de entidades. Es responsabilidad del creador asegurarse de que cualquier valor definido esté dentro de los límites de aquellos definidos en el servicio de entidades. Un ejemplo de cuándo puede elegir realizar esta acción es para definir un subconjunto de valores codificados en el proyecto a partir de una lista mucho más larga en el servicio de entidades.

El siguiente ejemplo muestra cómo se define una entrada de usuario de dominio range para restringir la entrada de datos a un número entre 1 y 100:

{
   "userInputs":[
      {
         "autoCompleteMaxEntries":5,
         "id":"001",
         "label":"Enter route number",
         "fieldType":"esriFieldTypeInteger",
         "required":true,
         "mode":"project",
         "domain":{
            "type":"range",
            "name":"route no",
            "range":[
               1,
               100
            ]
         }
      }
   ]
}

El siguiente ejemplo muestra cómo se define una entrada de usuario de dominio codedValue para limitar la entrada de datos a la selección de uno de tres valores:

{
   "userInputs":[
      {
         "autoCompleteMaxEntries":5,
         "id":"001",
         "label":"Enter class",
         "fieldType":"esriFieldTypeString",
         "required":true,
         "mode":"project",
         "domain":{
            "type":"codedValue",
            "name":"Class",
            "codedValues":[
               {
                  "name":"Principle",
                  "code":"Principle"
               },
               {
                  "name":"Classified (Non-principle)",
                  "code":"Classified"
               },
               {
                  "name":"Unclassified",
                  "code":"Unclassified"
               }
            ]
         }
      }
   ]
}

El siguiente ejemplo muestra cómo se define una entrada de usuario de texto userDefined para permitir el escaneo de un código QR al comienzo de la captura de una línea:

{
   "userInputs":[
      {
         "id":"001",
         "label":"Scan QR code",
         "fieldType":"esriFieldTypeString",
         "required":true,
         "mode":"button",
         "domain":{
            "type":"userDefined",
            "name":"line identifier",
            "multiline":false,
            "showScanner":true,
            "showEvent":"onStart"
            "hint":"Scan QR code or type the identifier of the line to be captured"
         }
      }
   ]
}

El siguiente ejemplo muestra cómo se define una entrada de usuario de dominio userDefined para permitir la entrada de datos de una fecha entre junio y diciembre de 2022:

{
   "userInputs":[
      {
         "id":"001",
         "label":"Enter date",
         "fieldType":"esriFieldTypeDate",
         "required":true,
         "mode":"button",
         "domain":{
            "type":"userDefined",
            "name":"followup date",
            "multiline":false,
            "hint":"Enter date between June and December 2022",
            "dateTime": {
               "defaultValue": "${captureTime}",
               "displayTime": true,
               "maxValue": "2022-06-01T00:00:00.000Z",
               "minValue": "2022-12-31T24:59:00.000Z"
            }
         }
      }
   ]
}

El siguiente ejemplo muestra cómo se define una entrada de usuario de dominio userDefined para restringir la entrada de datos a un Id. de ruta de cuatro dígitos:

{
   "userInputs":[
      {
         "id":"001",
         "label":"Enter route number",
         "fieldType":"esriFieldTypeString",
         "required":true,
         "mode":"button",
         "domain":{
            "type":"userDefined",
            "name":"route no",
            "inputMask":"9999",
            "multiline":false,
            "hint":"Enter a four digit route id"
         }
      }
   ]
}

Una vez que se defina userInput, el creador del proyecto puede asignarla para usarla en un campo. En el siguiente ejemplo se muestra userInput con el Id. 001 utilizado para rellenar un campo llamado routeNo:

{
   "fieldInfos":[
      {
         "fieldName":"routeNo",
         "value":"${userInput:001}"
      }
   ]
}

Máscara de entrada

La máscara de entrada define el formato de introducción de datos mediante el uso de caracteres y símbolos como parte de una variable de entrada de usuario. Cuando se aplica una máscara de entrada a una variable de entrada de usuario, los valores introducidos por el usuario deben seguir el patrón definido por la máscara de entrada.

Para aplicar una máscara de entrada a su variable de entrada de usuario, defina la máscara en la propiedad userInputs.domain.inputMask.

Consulte Máscara de entrada para obtener una lista de todas las máscaras y ejemplos que se pueden aplicar a variables de entrada de usuario.

Uso compartido de la ubicación

Las siguientes propiedades se utilizan para identificar las capas de uso compartido de la ubicación:

PropiedadDescripciónTipo de campo
enabled

Habilitar el rastreo para el proyecto. El valor predeterminado es falso.

Booleano

required

Requerir que el rastreo esté habilitado para usar el proyecto. El valor predeterminado es falso.

Booleano

lastKnownLocationsUpdateInterval

La frecuencia (en segundos) a la que se actualiza la última capa de ubicación conocida. El valor predeterminado es 60 segundos. El mínimo es 5 segundos.

Decimal

tracksUploadInterval

La frecuencia (en segundos) a la que se actualiza la capa de rastreos. El valor predeterminado es -1 (desactivado). También puede establecerse en 600 segundos.

Decimal

tracksCategory

Defina el valor que se escribirá en el campo de categoría de la capa de rastreos. Puede ser el nombre del proyecto, un valor fijo o el valor de una entrada de usuario de proyecto. El valor predeterminado es el nombre de proyecto.

Texto

lastKnownLocationsCategory

Defina el valor que se escribirá en el campo de categoría de la capa de últimas ubicaciones conocidas. Puede ser el nombre del proyecto, un valor fijo o el valor de una entrada de usuario de proyecto. El valor predeterminado es el nombre de proyecto.

Texto

El siguiente ejemplo muestra que el uso compartido de la ubicación está habilitado, pero no es necesario para usar el proyecto. La última ubicación conocida se actualizará cada 60 segundos y los rastreos, cada 600 segundos. El nombre del proyecto se escribirá en el campo de categoría de la capa de últimas ubicaciones conocidas y de la capa de rastreos.

{
   "tracking": {
      "enabled": true,
      "required": false,
      "lastKnownLocationsUpdateInterval": 60,
      "tracksUploadInterval": 600,
      "tracksCategory": "${projectName}",
      "lastKnownLocationsCategory": "${projectName}"
   }
}