¿Estoy ejecutando desde vDevelop?

Hola.

Yo sigo con mi rollo. El otro día vimos los efectos malignos que puede tener el editor de fórmulas cuando evalúa código javaScript en tiempo de diseño para detectar errores (http://velneo.es/foros/topic/cosas-de-velneo/).

Pues bien, he encontrado una forma de controlar este efecto indeseado y poder seguir disfrutando con Velneo.

Os cuento:

La función theApp.applicationFilePath devuelve el Path completo del fichero ejecutable que está ejecutando nuestro código. En tiempo de diseño será siempre vDevelop.exe y en tiempo de ejecución será vClient.exe o vdataClient.exe entre otros.

Bien, pues ya tenemos una forma de saber cuándo estamos en tiemnpo de diseño, y por lo tanto evitaremos que Velneo evalúe nuestro código y detecte errores inexistentes.

Añadimos entonces la siguiente función a nuestra librería de Funciones JS.


// *****************************************************************
// Función esRunTime() - comprueba si estamos evaluando JavaScript desde vDevelop
// Retorna: true si estamos ejecutando el código desde vClient o vDataClient
function esRunTime() {
// En tiempo de diseño (desde el editor de fórmulas) la función
// theApp.applicationFilePath devolverá el path de vDevelop.exe
return theApp.applicationFilePath().search(/vDevelop.exe$/i) > 0 ? false : true;
};

Pongamos un ejemplo:

  • Estamos en un manejador de Velneo y queremos parsear una cadena JSON para obtener el valor de un determinado Item ITEM_01. La cadena JSON está guardada en una variable local CADENA_JSON.
  • Pondriamos el siguiente comando de Velneo con el editor de fórmulas en modo JavaScript:

    SET(VALOR_ITEM01, /JAVASCRIPT/
    #include “4dr03ul4.vca/_MisFunciones.js”
    if (esRunTime()) {
    JSON_getValor(theRegister.varToString(“CADENA_JSON”),‘ITEM_01’) })

La función JSON_getValor devolvería un error cuando se avalúa en tiempo de diseño porque la variable CADENA_JSON no existe. Usando la función esRunTime() evitamos que esa línea se evalúa en tiempo de diseño.

Otro ejemplo más ilustrativo:


SET(OK, /JAVASCRIPT/
#include “4dr03ul4.vca/_MisFunciones.js”
if (esRunTime()) {theApp.wait(5000)}

Saludos
Paco Satué

Como siempre Paco, Excelente aportación.