Usar Arcade para graficar el tiempo que una solicitud está abierta

876
42
05-15-2017 09:11 AM
Labels (1)
Esri Esteemed Contributor
2 42 876

Arcade (ArcGIS Arcade | ArcGIS for Developers ) es un nuevo lenguaje en la plataforma ArcGIS que nos permite graficar datos de una manera dinámica. Arcade está disponible en ArcGIS Online y en ArcGIS Pro.

Cuando estamos trabajando con solicitudes de clientes, el estado es muy importante, pero además es muy importante saber cuánto tiempo la solicitud está abierta. Mientras más tiempo no se atienda la solicitud, habrá más posibilidad de obtener un cliente descontento con el servicio.


¿Pero cómo graficamos este tiempo de estar abierta la solicitud, si solamente contamos con el momento en que fue registrado? Para este fin disponemos de Arcade.

Abajo un ejemplo de cómo resolver la visualización. En nuestro servicio alojado en ArcGIS Online contamos con dos campos de interés:

  • Estado – contiene los valores “abierto” y “cerrado”
  • FechaHora – contiene la fecha y hora del registro de la solicitud

Cargamos la capa a un mapa web y entramos a configurar la simbología. En el listado desplegable de los atributos, encontramos la opción “Nueva expresión”:

En la ventana de personalizar la expresión, se puede configurar la expresión:

1) editar el título (nombre del campo)
2) configurar la expresión (el script de Arcade)
3) los campos disponibles y ayuda de funciones de Arcade

Antes de todo editamos el título:

En este caso la lógica del script debe detectar si la solicitud está abierta o ya está cerrada. En caso que está cerrada debe devolver el texto “Cerrado”. En caso de estar abierta, debe determinar el tiempo en minutos trascurrido desde que se registró la solicitud y clasificar este tiempo en rangos personalizados.

Esto se puede lograr con el siguiente script:

var estado = Text($feature.Estado);
var fecha_registro = Date($feature.FechaHora);
var fecha_ahora = Now();
var clase = 'Cerrado';

if (estado == 'abierto') {
    var tiempo_minutos = DateDiff(fecha_ahora, fecha_registro, 'minutes');
    if (tiempo_minutos < 30) {
        clase = 'tiempo abierto: 0 - 30 minutos';
    } else if (tiempo_minutos < 60) {
        clase = 'tiempo abierto: 30 - 60 minutos';
    } else if (tiempo_minutos < 120) {
        clase = 'tiempo abierto: 1 - 2 horas';
    } else if (tiempo_minutos < 240) {
        clase = 'tiempo abierto: 2 - 4 horas';
    } else if (tiempo_minutos < 480) {
        clase = 'tiempo abierto: 4 - 8 horas';
    } else {
        clase = 'más de 8 horas abierto';
    }
}
return clase;
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

El resultado se ve así:

Para validar si el script es válido se puede oprimir el botón “Prueba”:

Una vez validado el script, se puede confirmar el script con oprimir “Aceptar”.

Luego se devuelvo a la parte de configurar la simbología:

Hacer clic en “OPCIONES” para configurar la simbología para la expresión:

El resultado se ve así:

Al esperar un tiempo se puede observar que los símbolos son dinámicos, puesto que el tiempo de estar abierta la solicitud cambie continuamente.

Arcade ofrece una manera sencilla para graficar los datos de una manera dinámico. 

42 Comments
New Contributor III

He tratado de usar el código para graficar el tiempo en que una válvula de acueducto y alcantarillado esta abierta para ordenes de trabajo o "OTEAS", sin embargo, al usarlo, todos los puntos que he creado siempre me salen como cerrados, a pesar de que especifico la fecha de registro (en mi caso fecha de creación de la orden de trabajo) y el estado de la reparación (ya que mientras se ejecuta la reparación la válvula queda cerrada, una vez finalizada la válvula se abre), pero siempre me salen todos los puntos que creo de orden de trabajo como cerradas, nunca abiertas, cual podría ser el problema?

Esri Esteemed Contributor

Hola cecoi1 ,

Puedes compartir la expresión de Arcade que has usado para revisar si todo está bien y también será posible indicar algunos valores de ejemplo de los campos que estás usando en la expresión?

New Contributor III

var estado = Text($feature["Estado_reparacion"]);
var fecha_registro = Date($feature.FechaReporte);
var fecha_ahora = Now();
var clase = 'Cerrado';

if (estado != "Finalizado") {
var tiempo_minutos = DateDiff(fecha_ahora, fecha_registro, 'minutes');
if (tiempo_minutos < 30) {
clase = 'tiempo abierto: 0 - 30 minutos';
} else if (tiempo_minutos < 60) {
clase = 'tiempo abierto: 30 - 60 minutos';
} else if (tiempo_minutos < 120) {
clase = 'tiempo abierto: 1 - 2 horas';
} else if (tiempo_minutos < 240) {
clase = 'tiempo abierto: 2 - 4 horas';
} else if (tiempo_minutos < 480) {
clase = 'tiempo abierto: 4 - 8 horas';
} else {
clase = 'más de 8 horas abierto';
}
}
return clase;

Este es el código, en estado puse "estado de reparación" para que cuando el estado sea diferente a finalizado indique que la válvula esta abierta. pero inclusive si el estado es finalizado, no me la toma bien y todos los puntos los pone como cerrado o como "mas de 8 horas abierto" pero solo un estado para los 4 puntos que fije, por ejemplo, que 3 queden como cerrados y el cuarto quede como "mas de 8 horas abierto" pero no pasa eso.

Además tengo otra pregunta, en la ventana emergente de cada punto (o atributo) tengo varias casillas para poner información sobre el código de la OTEA, el diámetro del tubo, si esta pendiente la reparación, quien fue el operario que ejecuto la reparación, etc..., que puedo hacer para que en caso de que en la ventana solo escriba la información correspondiente a 7 casillas, solo salgan esas y las que quedaron en blanco no aparezcan?

Esri Esteemed Contributor

Hola cecoi1 , 

Puedes hacer la prueba con este código en la ventana de la definición de la expresión de Arcade?

var estado = Text($feature["Estado_reparacion"]);
var fecha_registro = Date($feature.FechaReporte);
var fecha_ahora = Now();
var clase = 'Cerrado';

if (estado != "Finalizado") {
    Console("Estado NO es Finalizado:");
    var tiempo_minutos = DateDiff(fecha_ahora, fecha_registro, 'minutes');
    Console(" - fecha_ahora   :" + fecha_ahora);
    Console(" - fecha_registro:" + fecha_registro);
    Console(" - tiempo_minutos:" + tiempo_minutos);
    if (tiempo_minutos < 30) {
        clase = 'tiempo abierto: 0 - 30 minutos';
    } else if (tiempo_minutos < 60) {
        clase = 'tiempo abierto: 30 - 60 minutos';
    } else if (tiempo_minutos < 120) {
        clase = 'tiempo abierto: 1 - 2 horas';
    } else if (tiempo_minutos < 240) {
        clase = 'tiempo abierto: 2 - 4 horas';
    } else if (tiempo_minutos < 480) {
        clase = 'tiempo abierto: 4 - 8 horas';
    } else {
        clase = 'más de 8 horas abierto';
    }
    Console(" - clase:" + clase);
} else {
    Console("Estado es Finalizado...")
}
return clase;

Puse unas lineas de Console para imprimir el resultado del proceso. La idea es pegar el código y oprimir test:

Luego debe aparecer en la parte abajo una pestaña con el nombre "Messages" (mensajes)  para ver los mensajes que se generen con la función "Console": 

Me puedes compartir el resultado para validar?

Esri Esteemed Contributor

Hola maria ibal ,

En cuento de ocultar información vacío en la ventana emergente puedes usar Arcade también. La forma más elaborado se explique acá (https://community.esri.com/docs/DOC-14276-conditional-field-display-with-arcade-in-pop-ups-revisited ), pero también es posible crear un texto con Arcade para solamente en un solo texto devolver los datos que no son vacíos. 

New Contributor III

buenas, introduje el código que me suministraste, sin embargo siguió dando el mismo resultado, los 3 que están sin finalizar aparecen como "mas de 8 horas abierto" pero el que aparece como "finalizado" sigue apareciendo como "mas de 8 horas abierto".

En cuanto a lo otro, muchas gracias por pasarme el link de como hacerlo

Esri Esteemed Contributor

Hola cecoi1 ,

Me puedes compartir lo que sale en la pantalla de "Messages"?

New Contributor III

Ese es el mensaje que me arroja el test al usar el codigo que me pasaste, como dije antes, tengo 4 puntos creados y 3 de ellos están "en ejecución" o "pendiente" (diferente a finalizado) mientras que uno esta en "finalizado" y aun así todos me salen como "mas de 8 horas abierto"

New Contributor III

Xander, en el mapa ya no aparece la opción de guardar cambios, por que se pudo dar eso?

New Contributor III

Esri Esteemed Contributor

Hola maria ibal , 

Si reviso los mensajes en la consola, puedo ver que la OT efectivamente está abierto por varios días y el resultado de la expresión es correcta: 

Tienes un ejemplo de datos donde el resultado no está correcta?

New Contributor III

de hecho si, este punto que tengo agregado y seleccionado, se encuentra como "Finalizado" sin embargo, el mapa me lo muestra como "mas de 8 horas abierto" por otro lado, acabo de crear otro punto, y puedo dar a conocer que el codigo funciona por ese lado, ya que varios puntos me muestran "mas de 8 horas abierto" mientras que otro que acabo de crear me muestra como "2 a 4 horas abierto"

Esri Esteemed Contributor

Hola maria ibal ,

En caso que tienes un dominio definido para el campo "Estado_reparacion", estás accediendo al código y no a la descripción definido en el dominio. Si el código no igual a la descripción, esto puede ser la causa. Puedes cambiar esta linea:

var estado = Text($feature["Estado_reparacion"]);

por:

var estado = DomainName($feature,"Estado_reparacion");
Esri Esteemed Contributor

Posiblemente se cerró ti sesión y el interfaz se ajuste para no permitir guardar cambios.

New Contributor III

Buenos dias, tengo otro problema con el mapa, resulta que puse mal una parte del codigo, resulta que necesitaba que fecha registro fuera con "inicio obra" en vez de "fecha reporte" al hacer el cambio me identifica si la valvula esta abierta entre cero y cuatro horas, pero si es entre 4 y 8 horas no me lo identifica (no lo muestra en el mapa) me toca activar el marcador de "otro" para que lo muestre pero no cuenta cuantos puntos esta ne ese estado de entre 4 y 8 horas. que podria ser el problema?

var estado = DomainName($feature,"Estado_reparacion");
var fecha_registro = Date($feature["Inicio_obra"]);
var fecha_ahora = Now();
var clase = 'Abierto';

if (estado != "Finalizado") {
Console("Estado NO es Finalizado:");
var tiempo_minutos = DateDiff(fecha_ahora, fecha_registro, 'minutes');
Console(" - fecha_ahora :" + fecha_ahora);
Console(" - fecha_registro:" + fecha_registro);
Console(" - tiempo_minutos:" + tiempo_minutos);
if (tiempo_minutos <= 240) {
clase = 'tiempo cerrado: 0 - 4 horas';
} else if (tiempo_minutos <= 480) {
clase = 'tiempo cerrado: 4 - 8 horas';
} else {
clase = 'más de 8 horas cerrado';
}
Console(" - clase:" + clase);
} else {
Console("Estado es Finalizado...")
}
return clase;

Este es el codigo que estoy usando

inicio obra se refiere a cuando empezaron a hacer la reparacion de la OTEA

Esri Esteemed Contributor

Hola maria ibal ,

Antes de seguir con la nueva pregunta, el campo "Estado_reparacion" tenía dominio?

Con respecto a la nueva pregunta, de no mostrar la clase "tiempo cerrado: 4 - 8 horas", me gustaría saber cuantos features tienen el la capa? En el al definir la expresión se determinen los valores con base en un muestreo de los datos. Si en este muestreo no está la clase "tiempo cerrado: 4 - 8 horas", no aparece en el listado de los elementos para definir la simbología. En caso que solamente se trate de un elemento de la leyenda que falta, se puede usar la lo que hiciste. Sin embargo, si faltan más que un elemento el caso se vuelve más complejo. Uno debo, o crear datos de prueba para asegurar todos los casos y poder configurar la simbología correctamente, o se debe ingresar a ArcGIS Online Assistant para editar el JSON del web map para incluir todos los elementos de la leyenda (y no te recomiendo esta opción, porque al editar el JSON es posible cometer un error y causar que ArcGIS Online no va puede visualizar el mapa web).

 

New Contributor III

Buenas Xander, resulta que tengo otro proyecto, en el cual me muestra las válvulas como "Abierto", "Regulado" y "Cerrado" y quiero integrar el código de la grafica de tiempo de este link, sin embargo, tengo un problema, resulta que tengo 5 puntos creados, dos abiertos, dos regulados y uno cerrado, el cerrado solo me lo muestra si lleva mas de 8 horas cerrado, pero si reduzco ese tiempo, desaparece y me lo muestra como "otro" por que podria ser? ademas, como puedo hacer para que la ventana emergente me muestre cuanto tiempo lleva cerrada la valvula?

Esri Esteemed Contributor

Hola maria ibal ,

Lo importante es tener un registro por cada casi que quieres visualizar en el leyenda. En caso que tienes 3 clases de tiempo combinado con tres estados de las válvulas, serían 9 casos en total. Si esto fuera el caso es necesario tener estos 9 casos en tus datos para poder usar el web map para definir la simbología. 

New Contributor III

Buenos días Xander, primero que nada, déjame agradecerte por el tiempo dedicado para resolver mis dudas. 

Segundo, tengo una duda con un proyecto que estoy haciendo, Estoy creando un proyecto en el que me indique el estado de reparación de unas tuberías, los estado son: "finalizado", "en ejecución", "sin ejecutar", "pendiente".

he mirado el código que esta aquí y lo he usado para realizarlo, sin embargo, tengo la siguiente duda, Para el estado de "en ejecución" me gustaría que indicase cuanto tiempo lleva en ejecución el trabajo de reparación. use el código descrito pero no me funciona. por ahora deje una alternativa para que los puntos creados me los muestre si esta finalizado, en ejecución, o pendiente de reparación. estoy seguro que estado digitando algo mal pero no se que es

Te adjunto capturas de lo que llevo del código y de como están apareciendo los puntos. El código que no he podido saber como usarlo lo deje como comentario 

Muchas gracias

Esri Esteemed Contributor

Hola cecoi1 , 

Quizás lo mejor es que me compartes los datos, creando un grupo, compartir los datos y mapas con este grupo e invitar mi usuario "xbakker.spx" a este grupo. De esta manera puedo revisar mejor lo que está pasando. Te parece?

New Contributor III

Buenos días Xander, ya cree un grupo y ya agregue tu usuario al grupo, el grupo lo llame "revisar" y tiene como etiqueta "otea"

New Contributor III

Buenas tardes Xander, le comento que ya le compartí el mapa y la encuesta para que pueda verlas, muchas gracias de nuevo por la ayuda

Esri Esteemed Contributor

Hola maria ibal ,

Vi que me invitaste al grupo (muchas gracias), pero hasta el momento no he tenido tiempo para revisar el tema. Espero que esta noche lo puedo revisar después de atender unos temas urgentes. 

Esri Esteemed Contributor

Hola maria ibal ,

Acabe de mirar los datos y lo que veo es que el tiempo en horas son valores muy altos (entre 55 y 825 horas): 

Por lo tanto todos los puntos quedaron clasificados con "más de 8 horas". Ver abajo la expresión que usé:

var estado = DomainName($feature,"Estado_reparacion");
var fecha_registro = Date($feature["Inicio_obra"]);
var fecha_ahora = Now();
var tiempo_h = DateDiff(fecha_ahora, fecha_registro, "hours");
Console("fecha_registro: " + fecha_registro);
Console("fecha_ahora   : " + fecha_ahora);
Console("tiempo (horas): " + tiempo_h);

var clase_h = "";
if (tiempo_h <= 4) {
    clase_h = " (0 - 4 horas)";
} else if (tiempo_h <= 8) {
    clase_h = " (4 - 8 horas)";
} else {
    clase_h = " (más de 8 horas)";
}

var clase = "ninguno";
if (estado == "En ejecución") {
    clase = "Reparacion en ejecucion" + clase_h;
} else if(estado == "Sin ejecutar"){
    clase = "Reparacion sin ejecutar" + clase_h;
} else if(estado == "Pendiente")
    clase = "Reparacion pendiente" + clase_h;
else {
    clase = "Finalizado";
}
return clase;

Si fuera expresar el tiempo en semanas, el resultado se ve así:

De todos modos es importante contar con todos clases de la simbología para poder definir la simbología. Luego de definir la simbología se pueden eliminar los datos temporales necesario para definir la simbología.

New Contributor III

Buenos dias xander, muchas gracias por tu ayuda, solo tengo una pregunta, como le haces para que las horas se muestren asi como en la imagen que adjuntaste? o es con un script? ademas de como hiciste para que se mostrara en semanas?

Esri Esteemed Contributor

Hola maria ibal buenos días,

Para el ejemplo de horas usé una expresión de Arcade reutilizando parte de la expresión:

var fecha_registro = Date($feature["Inicio_obra"]);
var fecha_ahora = Now();
var tiempo_h = DateDiff(fecha_ahora, fecha_registro, "hours");
return Round(tiempo_h, 1) + " horas";

Para el dato en semanas es algo parecido:

var fecha_registro = Date($feature["Inicio_obra"]);
var fecha_ahora = Now();
var tiempo_h = DateDiff(fecha_ahora, fecha_registro, "days");
return Round(tiempo_h/7, 2) + " semanas";
New Contributor III

Muchas gracias Xander, y como le hiciste para que el tiempo apareciera asi sobre los puntos? se habilita algo en el mapa? o se escribe algo mas? porque se como hacer para que se vea dentro de la ventana emergente, mas no encima del punto como me lo mostraste en las imagenes adjuntas

Esri Esteemed Contributor

Hola maria ibal ,

Abajo unas pantallas para explicar el proceso para activar y configurar las etiquetas. Primero desde el menu de opciones para la capa OTEA, selecciones la opción "Crear etiquetas":

Luego, para el Texto es necesario crear una "Nueva expresión":

En la ventana para definir la expresión de Arcade escribes la expresión:

Y termines de configurar la forma como quieres desplegar el texto (fuente, color, halo, alineación, etc):

New Contributor III

Xander de verdad muchísimas gracias por tu tiempo de verdad y por estar pidiendo tanto, que pena te hago otra pregunta, es que el ingeniero me pregunto que si hay alguna forma de que la cuenta del tiempo se frene cuando se cambia el estado de la reparación a finalizado? o sea que cuente el tiempo en cualquier estado de reparación (en ejecución, pendiente, sin ejecutar), pero si pasa el estado a finalizado la cuenta de tiempo se detenga

Esri Esteemed Contributor

Hola cecoi1 , 

No estoy completamente seguro que entiendo la pregunta, pero pienso que el ejemplo abajo te va ayudar. Para "detener el tiempo" necesitamos tener acceso al momento cuando la OTEA fue finalizada. Posiblemente esto se puede hacer con base en el campo EditDate la cual contiene la última fecha en la cual el registro fue editado. Sin embargo, quizás fue editado después de cambiar de estado y si no contamos con la fecha de finalizar la OTEA, no podemos determinar el tiempo que la OTEA estaba abierta. En caso de implementar Workforce, hay un campo de fecha para cada cambio de estado. 

De todos modos abajo el ejemplo de expresión:

var estado = DomainName($feature,"Estado_reparacion");
var fecha_registro = Date($feature["Inicio_obra"]);

if (estado != "Finalizado") {
    var fecha_ahora = Now();
    var tiempo_h = DateDiff(fecha_ahora, fecha_registro, "days");
} else {
    var fecha_finalizado = $feature.EditDate
    var tiempo_h = DateDiff(fecha_finalizado, fecha_registro, "days");
}

return Round(tiempo_h/7, 2) + " semanas";

... y el resultado, mostrando que el punto de la OTEA finalizado (derecha arriba) que el tiempo ya no es 3.88 pero 3.02 semanas):

New Contributor III

Xander, eso era lo que estaba buscando, de hecho me entendiste a la perfección, lo probare y te diré que tal me fue, Muchísimas gracias como siempre.

Esri Esteemed Contributor

cecoi1 , con gusto.

Cualquier cosa me avises. 

New Contributor III

Xander buenos dias, que pena pero tengo una duda, ya estoy organizando la simbología de atributos, pero solo me permite 7 símbolos máximo como ves en la imagen (no me deja vincular mas símbolos), y necesito que me deje mas símbolos por lo que son diferentes estados de hora, que puedo hacer ahi?

Esri Esteemed Contributor

Hola maria ibal ,

Si cuentes con datos en cada clase que quieres representar en la simbología? En caso que no, sería simular datos en cada clase, definir la simbología y luego eliminar los datos temporales. Después ya no deberías entrar a la simbología para evitar que la debes configurar nuevamente.

En caso que si tienes datos en cada clase, es posible editar el json con la definición del mapa web (ArcGIS Online Assistant ) para incluir los clases que hacen falta. 

New Contributor III

Xander, me di cuenta de algo, usando el código que me diste los puntos no aparecen que se definen entre "cero y cuatro horas" o "entre cuatro y ocho horas" si el estado es reparación en ejecución o sin ejecutar, solo me marca "entre cero y cuatro horas"  si el estado es reparación pendiente, de resto no sale ningun simbolo solo aparecen si en la simbología los defino como "otro" y no se porque no aparece la opción para agregarlo como símbolo

New Contributor III

Xander Buenas tardes, te aviso que ya pude arreglar el problema. de todas formas muchas gracias por tu ayuda, paciencia y que pena contigo por abordarte con tantas preguntas.

New Contributor III

Buenos días Xander, tengo una pregunta algo diferente a lo habitual, lo que sucede es que estoy intentando hacer un link para que cuando presione un punto y seleccione el nombre del link (en este caso se llama "Encuesta"), sea redireccionado a la encuesta que especifique en el link, el problema no es ese, el problema que tengo es que cuando trato de especificar que cuando presione ese punto en especifico, el campo de "localización" me muestre las coordenadas y me situé exactamente en ese punto donde esta localizado, pero lo que hace es que toma las coordenadas de mi dispositivo y me sitúa donde estoy en estos momentos y eso es lo que no quiero. 

Este es el link que escribí para ello pero no me funciona: "arcgis-survey123://?itemID=d491d0be8e0d45e889e5c1143837ba5a&center={latitude},{longitude}&field:Codigo_otea={Id}"

además de que pregunte en este link donde hablan sobre el tema, pero la verdad o no responden   las respuestas son muy vagas: "https://community.esri.com/groups/survey123/blog/2016/07/30/understanding-survey123s-custom-url-sche... "

Te adjunto capturas de pantalla para que veas a que me refiero:

Muchas gracias y espero tu respuesta y que pena contigo abordarte con tantas imágenes y por hacerlo en un espacio que no tiene que ver con el tema, pero la verdad no se me ocurrió otro lugar

Esri Esteemed Contributor

Hola cecoi1 ,

El enlace que estás usando es para uso en un dispositivo móvil donde tienes instalada la aplicación de Survey123. Si quieres que esto se hace en web el enlace debe ser distinto. En este caso {latitud} y {longitud} hacen referencia a campos existentes en tu esquema de datos. Si no lo tienes, debes hacer lo mismo como se hace con el enlace a Google Streetview: convertir coordenadas a WGS 1984 usando Arcade. Puedes intentar esto?

// Converts Longitude from metres to decimal degrees
var originShift = 2.0 * PI * 6378137.0 / 2.0;
var lon = (Geometry($feature).x / originShift) * 180.0;

// Converts Latitude from metres to decimal degrees
var originShift = 2.0 * PI * 6378137.0 / 2.0;
var lat = (Geometry($feature).y / originShift) * 180.0;
lat = 180.0 / PI * (2.0 * Atan( Exp( lat * PI / 180.0)) - PI / 2.0);

// Combines the features coordinates to the Google Street View URL
var url = Concatenate("https://survey123.arcgis.com/share/d491d0be8e0d45e889e5c1143837ba5a?center=" , lat, ",", lon);
return url;

La próxima vez es mejor crear una nueva pregunta y usar mi tag para que me llegue la notificación para no incluir en este documento que no esta relacionado el blog.

New Contributor III

Gracias Xander, de hecho hice lo que dijiste y te etiquete en una pregunta "Enlace Survey123" porque si necesito ponerla para que abra el survey123 en dispositivo movil

Esri Esteemed Contributor

Hola cecoi1 ,

Listo, voy a revisar la pregunta. Que pena por la demora, pero he estado bastante ocupado en los últimos días.

New Contributor II

Help!  I am following this code structure, but I am unable to view all the classes I have created in my code snippet.

'Future' displays on all future events properly, but I cannot seem to separate the time structure.  all of the items in the image are future the future into additional classes based on time. I have tried hours and minutes.  

Time issue, classification not working.

var plannedDemo_date = Date($feature["Date_time"]);
var date_now = Now();
var futureDemo = IIf(plannedDemo_date > date_now, 'Future', '')
var pastDemo = 'Past Demo';

if (futureDemo == 'Future') {
var time_days = DateDiff(date_now, plannedDemo_date, 'days');
if (time_days <= 1) {
pastDemo = 'Demonstration is in less than 24 hrs';
} else if (time_days < 3) {
pastDemo = 'Demonstration is between 2-3 days';
} else if (time_days < 7) {
pastDemo = 'Demonstration in the next week.';
} else {
pastDemo = 'More than 3 days';
}
}
return pastDemo;

Esri Esteemed Contributor

Hi Christina McCullough , sorry for the delay in my response.

You only need to change a small thing in your expression on line 7: change the order of the parameters. The first should be the plannedDemo_date and the second the current date "date_now". Otherwise the result will be negative and will always be less than 1.

var plannedDemo_date = Date($feature["Date_time"]);
var date_now = Now();
var futureDemo = IIf(plannedDemo_date > date_now, 'Future', '')
var pastDemo = 'Past Demo';

if (futureDemo == 'Future') {
    var time_days = DateDiff(plannedDemo_date, date_now, 'days');
    if (time_days <= 1) {
        pastDemo = 'Demonstration is in less than 24 hrs';
    } else if (time_days < 3) {
        pastDemo = 'Demonstration is between 2-3 days';
    } else if (time_days < 7) {
        pastDemo = 'Demonstration in the next week.';
    } else {
        pastDemo = 'More than 3 days';
    }
}

return pastDemo;
About the Author
Solution Engineer for the Utilities Sector @ Esri Colombia - Ecuador - Panamá sr GIS Advisor / Python - Arcpy developer / GIS analyst / technical project leader / lecturer and GeoNet moderator, focusing on innovations in the field of GIS. Specialties: ArcGIS, Python, ArcGIS Enterprise, ArcGIS Online, Arcade, Configurable Apps, WAB, Mobile Apps, Insights, Spatial Analysis, LiDAR / 3D Laser Scanning / Point Clouds. UNME http://nl.linkedin.com/in/xanderbakker/ http://www.slideshare.net/XanderBakker http://www.scribd.com/xbakker http://twitter.com/#!/XanderBakker
Labels