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:
- basemap: mapa mostrado al revisar datos.
- dataSources: enumera las capas de entidades utilizadas por los botones del proyecto.
- preferences: aplicable a todos los registros capturados en un proyecto.
- templateGroups: representa un grupo de botones.
- templates: representa un botón
- cameraInfo: cómo se capturan las fotos y el vídeo para el registro.
- 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.
- fieldInfos: los valores de atributo que se capturarán para el registro.
- tracking: representa la capa de uso compartido de la ubicación utilizada por el proyecto.
- userInput: cadena de caracteres proporcionada por el usuario que puede utilizarse para rellenar atributos de un registro.
Algunas de estas propiedades son matrices de propiedades adicionales. En las siguientes subsecciones se describen los detalles de las matrices de propiedades.
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:
Propiedad | Descripción | Tipo 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:
Propiedad | Descripción | Tipo 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":""
}
Preferencias
Las siguientes propiedades son aplicables al proyecto o a todos los registros capturados en un proyecto:
Propiedad | Descripción | Tipo 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.
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.
Propiedad | Descripción | Tipo 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 |
Plantillas
Las siguientes propiedades se utilizan para identificar la capa de entidades relacionada con un botón:
Propiedad | Descripción | Tipo 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:
Propiedad | Descripción | Tipo 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:
Propiedad | Descripción | Tipo 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 |
fieldInfos
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.
Propiedad | Descripción | Tipo 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 o vídeos 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 minMedia para que sea 0. También puede especificar la calidad del vídeo cambiando la propiedad imageSize. (La duración máxima predeterminada del vídeo es 10 segundos).
Propiedad | Descripción | Tipo de campo |
---|---|---|
mode | Ninguno (predeterminado): no se asocia ninguna foto o vídeo 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 |
captureVideo | Verdadero o falso (predeterminado). | Booleano |
capturePhoto | True (predeterminado) o false. | Booleano |
maxMedia | Número máximo de fotos o vídeos capturados por medio de un botón. El límite máximo es 5 para fotos y 1 para vídeo. | Entero |
minMedia | Número mínimo de fotos o vídeos capturados por medio de un botón. | Entero |
En el siguiente ejemplo, se toma una foto opcional sin límite de tamaño sin confirmación de vista previa:
{
"cameraInfo": {
"mode": "automatic",
"imageSize": "unrestricted",
"required": false,
"captureVideo": false,
"capturePhoto": true,
"maxMedia": 1,
"minMedia": 0
},
notificationsInfo
Las siguientes propiedades se utilizan para configurar las notificaciones en un proyecto. Actualmente, la única notificación que se admite es un webhook.
Propiedad | Descripción | Tipo 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:
"fieldInfos": [
{
"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.
En el proyecto JSON se definen entradas de usuario en la matriz de userInputs y se referencian por "fieldInfos" mediante el uso de la propiedad id.
Propiedad | Descripción | Tipo 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:
Propiedad | Descripción | Tipo 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}"
}
}