¿Estoy ejecutando desde vDevelop?


([N3] pacosatu) #1

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é


([N1] aztecmexico) #2

Como siempre Paco, Excelente aportación.