# Scripts

Velneo ha integrado en el núcleo de su plataforma la ejecución de scripts. Esto supone una apertura de la plataforma a estándares como EcmaScript y a otros lenguajes de programación como QML y JavaScript. Esta integración es completa y se puede apreciar en múltiples ámbitos de trabajo como procesos o fórmulas. Para conseguir esta integración se ha desarrollado un completo API que incluye un conjunto de clases que aportan objetos y funciones adicionales para facilitar el uso de objetos Velneo y nuevos objetos en estos lenguajes.

La API de Velneo es la misma para el acceso tanto desde vJavaScript como desde QML, con la excepción de que desde QML no están disponibles las siguientes clases, que sí están disponibles para JavaScript: VDir, VFile, VImage, VQuery, VTextFile y VXmlWriter.

Debido a una limitación del motor javascript de QML, en scripts de QML no es posible declarar nuevos objetos de Velneo (declaración **new**), solamente se pueden usar los objetos de Velneo ya creados.

* [Clases](scripts/lenguajes/javascript/clases)
* [Directorio de scripts](#directorio-scripts)
* [Editor de scripts](#editor-de-scripts)
* [Lenguajes](scripts/lenguajes)

## Directorio scripts

Cada proyecto de Velneo contiene un directorio donde podemos crear una estructura de carpetas y guardar en ellas los ficheros de scripts: QML, JavaScript, … y sus ficheros auxiliares.

![](https://1848050135-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2Fb6da1ba7e7338d386b7c9e88f33a678b45c7ea52.png?generation=1589374115995032\&alt=media)

Al ejecutar una aplicación con vClient, vWebClient o vDataClient, se cargan también los directorios de scripts de cada proyecto de la aplicación.

## Scripts reutilizables

Un mismo fichero QML o JavaScript se puede usar desde distintos objetos. Además, hay distintos tipos de objetos que los usan como [procesos](buenas-practicas-de-programacion/buenas-practicas-de-rendimiento/procesos), [Lista QML](proyectos-objetos-y-editores/proyecto-de-aplicacion/lista-qml) y [Formulario QML](proyectos-objetos-y-editores/proyecto-de-aplicacion/formulario-qml). Un mismo fichero QML o JavaScript puede ser usado en objetos con distintas entradas y salidas, tabla y/o ficha/lista, controlando el programador mediante las funciones API de los objetos de entrada/salida que nos da vJavaScript. También se puede asumir que un fichero QML o JavaScript tiene una tabla de entrada y/o salida determinadas, con el nivel de abstracción deseado en cada fichero script.

Para introducir en un objeto la propiedad “Fichero script” en el edit disponemos de un botón que nos presenta un árbol con los directorios de scripts del proyecto en curso y de sus proyectos heredados.

Velneo incorpora también editores de código fuente para los distintos lenguajes soportados.

Se puede usar “import” en los ficheros fuente QML para importar otros ficheros QML, JavaScript o carpetas enteras contenidas en los directorios scripts del proyecto y heredados.

## Editor de scripts

En el componente de edición vDevelop se ha integrado un editor de scripts para facilitar la edición de los ficheros de script que se almacenan en el [directorio scripts](#directorio-scripts). El editor contempla las siguientes funcionalidades:

### Coloreado de código

Como podemos ver en la imagen superior el editor contempla coloreado de código en función del lenguaje.

![](https://1848050135-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2F142a39169ada7f617b4441370dafc5e223576455.png?generation=1589374116701466\&alt=media)

### Autocompletar para clases y objetos

![](https://1848050135-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2Fbd34a2c15c2d9c9945d1c60a00682a93a6c5551d.png?generation=1589374116438695\&alt=media)

### Autocompletar para funciones, señales y métodos

![](https://1848050135-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2F499a036713391bd369e728054a1bfe4b83afa4d8.png?generation=1589374116212272\&alt=media)

### Autocompletar para enums de parámetros de funciones

![](https://1848050135-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2Fa8cfa2b994b60f267db05fb2efe71a89a97f8570.png?generation=1589374116559805\&alt=media)

### Ayuda con los parámetros de funciones

![](https://1848050135-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2F70fd3ed2e50f27a05434af9a83c275110f934b9b.png?generation=1589374116340020\&alt=media)

### Configuración del editor

![](https://1848050135-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2Ff14b38d12aaf669460abc12ee4702fbf9a4ddc80.png?generation=1589374116267475\&alt=media)

Destacar la última opción que permite dejar configurado por defecto el tamaño de zoom que se aplicará al código cuando es editado. Para guardar el tamaño deseado, primero debemos seleccionar el zoom deseado y luego ejecutar esta opción.

### Toolbar del editor

![](https://1848050135-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2F4dc8c95c88fbb7fcd3bd3d122043848ea8b93de9.png?generation=1589374116030965\&alt=media)

Como vemos la toolbar incluye los botones de:

* Configuración
* Verificación de sintaxis de script correcta. Es recomendable verificar antes de ejecutar
* Botones para copiar, cortar y pegar
* Botones para deshacer y rehacer
* Combo de selección manual del zoom
* Botones para aumentar o disminuir el zoom
* Botones para imprimir el script o guardarlo en disco en formato PDF

### Toolbar de búsqueda

![](https://1848050135-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2F8f884aef51ce904da03e5998926d7193c0ada1c1.jpg?generation=1589374116389883\&alt=media)

Con esta toolbar se pueden buscar textos en el script editado y movernos hacia adelante o hacia atrás de los ocurrencias encontradas.

### Incluir script

En un script podremos hacer uso de otros scripts que tengamos programados tanto en el proyecto en curso como en cualquier proyecto heredado. Para ello, al comienzo del script usaremos el comando **include**. Su sintaxis es la siguiente:

\#include "id\_proyecto.ext/senda/nombre\_fichero.ext"

Por ejemplo:

`#include “3b1pilnx.vca/js/funcionesGlobales/funcionesGlobales.js”`

Para facilitar su especificación, bastará con hacer clic en el botón ![](https://1848050135-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2F1b50d371240f872919f07cc9aeccb3cf18e4733f.jpg?generation=1589374116436008\&alt=media) del editor de scripts y seleccionaremos el script a incluir.

Los includes siempre deben ir al principio del script, en una línea independiente. No puede haber ninguna otra línea de código antes.

El incluir otro script sería lo mismo que copiar su código fuente y pegarlo en el script en curso; por lo que podremos hacer uso de cualquier objeto declarado en el script incluido.

Para facilitar su especificación, bastará con hacer clic en el botón ![](https://1848050135-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2F1b50d371240f872919f07cc9aeccb3cf18e4733f.jpg?generation=1589374116436008\&alt=media) del editor de scripts y seleccionaremos el script a incluir.

En el include se especifica el proyecto al que pertenece el script o fichero a incluir, en el caso de que el fichero a incluir pertenezca al mismo proyecto, podemos sustituir el nombre del proyecto por la macro (CurrentProject):

`“(CurrentProject)/js/funcionesGlobales/funcionesGlobales.js”`

Esta macro también se puede usar en un proceso JavaScript para referenciar a otro script del mismo proyecto.

De esta forma, cuando movamos el script de un proyecto a otro, la referencia se conservará gracias a la macro, apuntando al fichero correspondiente buscándolo en el proyecto en curso.

### Ayuda

La tecla F1 desplegará la [ayuda de las clases del API de Velneo para JavaScript.](scripts)

### Notas

En Velneo se usan dos motores distintos para la ejecución de scripts: uno que admite EcmaScript-262 (en usado en [procesos](proyectos-objetos-y-editores/de-aplicacion-y-datos/proceso) javascript y [fórmulas JavaScript](scripts/lenguajes/javascript/formulas-javascript)) y otro que admite EcmaScript7 (el que se usa en el comando de instrucción de proceso [ejecutar script (filescript)](../proyectos-objetos-y-editores/de-aplicacion-y-datos/proceso/basicos/ejecucion#ejecutar-script-filescript).

Si en un script usamos la comilla invertida para delimitar cadenas (\`) ejemplo:

```
var texto = `hola`;
```

Esta forma de delimitar cadenas es válida solamente en EcmaScript7, pero no en EcmaScript-262, por lo que, si bien podemos crear scripts para ejecutar directamente desde proceso con esta forma de delimitar cadenas, el editor de script detectará error (ya que no es válido para EcmaScript-262 y a priori no se sabe cómo se va a ejecutar el script que estamos programado), no dará error al ejecutarlo con el comando de instrucción de proceso [ejecutar script (filescript)](../proyectos-objetos-y-editores/de-aplicacion-y-datos/proceso/basicos/ejecucion#ejecutar-script-filescript) (ver notas del comando al respecto).
