# VExtension

Este clase representa la extensión en Velneo vDevelop. Dispone de funciones para ver información de los proyectos, acceso a la solución, etc.

### El objeto theExtension

Todos los scripts de extensiones en Velneo vDevelop están conectados a un objeto global y único que representa la extensión cuyo nombre es theExtension. Para ello, debemos incluir en nuestro código QML el import correspondiente:

```javascript
import VExtensions 2.0
```

También está disponible el objeto [theApp](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/vapp#theapp) en Velneo vDevelop, a través de la función [theApp](#theapp)() de esta clase, del cuál podemos usar las funciones que tienen sentido en edición.

Los grupos de funciones disponibles son: generales, proyectos, cursor, constantes, DOS: directorios, DOS: ficheros, info local actual, info local del sistema, impresoras, multimedia y la función sysInfo. Los grupos no disponibles son: variables globales, variables globales array, variables de sistema, sistema, mantenimiento de Base de datos, tablas estáticas, cestas, impresión de informes, mensajería interna, vista de datos, estilos, TLS/SSL.

### Herencia

Hay que tener en cuenta que la extensión da acceso al proyecto principal con el que se ha arrancado la aplicación y todos sus objetos heredados lo que permite el acceso y uso de cualquier objeto de la aplicación desde cualquier script.

Está disponible en scripts ejecutados en Velneo vDevelop.

## Indice de funciones

### **De aplicación**

theApp [theApp](#theapp)()

### **De configuración**

void [executeExtension](#executeextension)( String szExtension )

String [extensionDirPath](#extensiondirpath)()

void [setAutoClose](#setautoclose)( Boolean bAutoCerrar )

void [setDialog](#setdialog)( Boolean bDialogo )

void [setFixedSize](#setfixedsize)( Boolean bFijo )

### **De ventana**

void [close](#close)()

void [setWindowTypeFlags](#setwindowtypeflags)( flags )

### **De conexión**

Number [connectServer](#connectserver)( String szVRL, String szUsuario, String, szContraseña )

Boolean [connectServerDialog](#connectserverdialog)( String szVRL, String szUsuario, String, szContraseña )

Boolean [isConnected](#isconnected)()

### **De solución**

VSolutionInfo [currentSolutionInfo](#currentsolutioninfo)()

VSolutionInfo [newSolution](#newsolution)()

void [openSolution](#opensolution)( String szVRL, String szUsuario, String, szContraseña )

void [openSolutionDialog](#opensolutiondialog)()

Boolean [runInstallWizard](#runinstallwizard)( String szSendaInstalador )

void [runSolution](#runsolution)()

Array [solutionInfos](#array-solutionsinfos)()&#x20;

### **De proyecto**

VProjectInfo  [currentProjectInfo](#currentprojectinfo)()

Number [projectCount](#projectcount)( Number nProjectType )

VProjectInfo [projectInfo](#vprojectinfo-projectinfo-number-nprojecttype-int-index)( Number nProjectType, int index)

Array [projectInfos](#array-projectinfos-number-nprojecttype)( Number nProjectType )

void [openProject](#void-openproject-vprojectinfo-projectinfo)( VProjectInfo projectInfo, Boolean bOpenTabs  )

void openProjectReadOnly( VProjectInfo projectInfo, Boolean bOpenTabs)

### **De objeto**

VObjectInfo [currentObjecInfo](#currentobject)()

void [openObject](#void-openobject-vobjectinfo-objectinfo-)( VObjectInfo objectInfo )

Array [searchObjects](#array-searchobjects-array-de-vprojectinfo-sztexto-ncasesensitive)(\[Array de VProjectInfo], szTtexto, number caseSensitive)

### **De instancias**

VInstanceList [appInstances](#appinstances)( VSolutionInfo solucion )

VInstanceList [datInstances](#datinstances)( VSolutionInfo solucion )

### **De directorios**

VDir [newDir](#newdir)()

### **De ficheros**

VFile [newFile](#newfile)( String szSenda )

VTextFile [newTextFile](#newtextfile)( String szSenda )

### **De sistema**

VSettings [newSettings](#newsettings)( String szOrganizacion, String szAplicacion )

### **De base de datos externas**

VSqlDataBase [newSqlDatabase](#newsqldatabase)()

### **De webservice**

XMLHttpRequest [newXMLHttpRequest](#newxmlhttprequest)()

## Documentación de funciones

### Funciones de aplicación

#### theApp() <a href="#theapp" id="theapp"></a>

Devuelve el objeto [theApp](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/vapp#el-objeto-theapp) correspondiente en cada momento.

### Funciones de configuración

#### String extensionDirPath() <a href="#extensiondirpath" id="extensiondirpath"></a>

Devuelve la senda en disco de la extensión en curso.

#### void executeExtension( String szExtension ) <a href="#executeextension" id="executeextension"></a>

Ejecuta la extensión que pasemos como parámetro.

Parámetros:

* szExtension: nombre de la extensión a ejecutar.

#### void setAutoClose( Boolean bAutoCerrar ) <a href="#setautoclose" id="setautoclose"></a>

Establece que la ventana de la extensión en curso se cierre cuando cambiamos de proyecto.

Parámetros:

* bAutoCerrar: true o false para definir si queremos que se cierre de forma automática al cambiar de proyecto o no.

#### void setDialog( Boolean bDialogo ) <a href="#setdialog" id="setdialog"></a>

Establece que la ventana de la extensión en curso se muestre construya en modo diálogo.

Parámetros:

* bDialogo: true o false para definir si queremos que la extensión se construya en modo diálogo o no.

{% hint style="info" %}
Ha de usarse en la construcción del componente QML principal para que tenga efecto.
{% endhint %}

#### void setFixedSize( Boolean bFijo ) <a href="#setfixedsize" id="setfixedsize"></a>

Establece cuando la ventana está en diálogo si es posible redimensionarla o no.

Parámetros:

* bFijo: booleano que define si es fijo (true) o redimensionable (false).

### Funciones de ventana

#### void close() <a href="#close" id="close"></a>

Cierra la ventana de la extensión, finalizando su ejecución.

#### void setWindowTypeFlags( flags ) <a href="#setwindowtypeflags" id="setwindowtypeflags"></a>

Establece la configuración de la ventana cuando está en diálogo.

Parámetros:

* flags: flags que definen las opciones disponibles. Ver [enum de flags](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vextension-enumeraciones#flags-de-ventana-de-dialogo).

{% hint style="info" %}
El soporte y correcto funcionamiento de los flags depende enteramente del sistema operativo.
{% endhint %}

### Funciones de conexión

#### Number connectServer( String szVRL, String szUsuario, String, szContraseña ) <a href="#connectserver" id="connectserver"></a>

Conecta con el servidor de Velneo cuya URL indicamos como parámetro, usando el usuario y contraseña especificados.

Parámetros:

* szVRL: VRL del servidor: "vatp\://dominio\_ip:puerto".
* szUsuario: nombre del usuario.
* szContraseña: contraseña del usuario.

Para retorno de errores ver [enum de errores de conexión](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vextension-enumeraciones#errores-de-conexion).

#### Boolean connectServerDialog( String szVRL, String szUsuario, String, szContraseña ) <a href="#connectserverdialog" id="connectserverdialog"></a>

Muestra el cuadro de diálogo estándar de conexión con el servidor de Velneo.

Parámetros:

* szVRL: VRL del servidor: "vatp\://dominio\_ip:puerto".
* szUsuario: nombre del usuario.
* szContraseña: contraseña del usuario.

Retorna true si se ha realizado la conexión, false si no se ha realizado y el usuario cancela.

Si tiene cubiertos los 3 parámetros se conectará directamente.

Y Si tiene cubiertos los 3 parámetros y no es posible realizar la conexión se mostrará el cuadro de diálogo con el error.

Y Si no tiene cubiertos los 3 parámetros se mostrará siempre el cuadro de diálogo con los datos recibidos.

#### Boolean isConnected() <a href="#isconnected" id="isconnected"></a>

Retorna true o false en función de si estamos conectados con el servidor de Velneo o no.

### Funciones de solución

#### VSolutionInfo currentSolutionInfo() <a href="#currentsolutioninfo" id="currentsolutioninfo"></a>

Devuelve un objeto [VSolutionInfo ](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vsolutioninfo)de la solución en curso.

#### VSolutionInfo newSolution() <a href="#newsolution" id="newsolution"></a>

Abre el cuadro de diálogo de nueva solución.

#### void openSolution( String szVRL, String szUsuario, String, szContraseña ) <a href="#opensolution" id="opensolution"></a>

Abre la solución cuya VRL pasemos como parámetro.

Parámetros:

* szVRL: vrl de la solución a abrir. Debe seguir la siguiente sintaxis:

`vatp[s]://IP_SERVIDOR///NOMBRE_SOLUCION")`

* szUsuario: nombre del usuario.
* szContraseña: contraseña del usuario.

Si tiene cubiertos los 3 parámetros se conectará directamente y abrirá la solución.

Y Si tiene cubiertos los 3 parámetros y no es posible realizar la conexión se mostrará el cuadro de diálogo con el error.

Y Si no tiene cubiertos los 3 parámetros se mostrará siempre el cuadro de diálogo con los datos recibidos.

Ejemplo:

```javascript
theExtension.openSolution("vatp://127.0.0.1///vERP_2", "velneo", "1234")
```

#### void openSolutionDialog() <a href="#opensolutiondialog" id="opensolutiondialog"></a>

Abre el cuadro de diálogo "abrir solución" de [Velneo vDevelop](https://doc.velneo.com/30/velneo-vdevelop/introduccion). En el caso de que no estemos conectados con un servidor, presentará antes la ventana de conexión con el servidor.

#### Boolean runInstallWizard( String szSendaInstalador ) <a href="#runinstallwizard" id="runinstallwizard"></a>

Inicia el asistente de instalación de un fichero con extensión .vin que indiquemos como parámetro.

Parámetros:

* szSendaInstalador: senda del instalador .vin que vamos a instalar.

#### void runSolution() <a href="#runsolution" id="runsolution"></a>

Inicia la ejecución de la solución en curso. Debe tener instancias creadas previamente.

#### Array solutionsInfos()‌&#xD;

Devuelve un array con los [VSolutionInfo](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vsolutioninfo) de todas las soluciones que están abiertas en Velneo vDevleop.

### Funciones de proyecto

#### VProjectInfo currentProjectInfo() <a href="#currentprojectinfo" id="currentprojectinfo"></a>

Devuelve el objeto [VProjectInfo](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vprojectinfo) del proyecto principal en curso.

#### Number projectCount( Number nProjectType ) <a href="#projectcount" id="projectcount"></a>

Devuelve el número de proyectos cargados en ese momento en Velneo vDevelop del tipo que pasemos como parámetro.

Parámetros:

* nProjectType: tipo de proyecto. Ver [enum de tipos de proyecto](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vextension-enumeraciones#tipos-de-proyecto).

{% hint style="warning" %}
Sólo es funcional en extensiones de Velneo vDevelop.
{% endhint %}

#### VProjectInfo projectInfo( Number nProjectType, int index)

Devuelve un objeto de la clase [VProjectInfo](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vprojectinfo) correspondiente al tipo de proyecto (datos o aplicación) y a la posición de la lista de proyectos encontrados con la función [projectCount](#projectcount).

Parámetros:

* nProjectType: tipo de proyecto. Ver [enum de tipos de proyecto](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vextension-enumeraciones#tipos-de-proyecto).
* index:  número del proyecto, se suele usar un bucle for para recorrerlos.

#### Array projectInfos( Number nProjectType )&#xD;

‌Devuelve un array que contiene los [VProjectInfo](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vprojectinfo) de todos los proyectos cargados en la aplicación.

Parámetros:

* nProjectType: tipo de proyecto. Ver [enum de tipos de proyecto](#enumeraciones).

#### void openProject( VProjectInfo projectInfo, Boolean bOpenTabs  )

Abre el proyecto en el editor cuyo puntero pasamos como parámetro.

Parámetros:

* projectInfo: objeto correspondiente al proyecto.
* bOpenTabs: si se pone a false evita que se abran las pestañas del proyecto cuando se abre.

#### void openProjectReadOnly( VProjectInfo projectInfo, Boolean bOpenTabs)

Abre en el editor en modo de solo lectura el proyecto cuyo puntero pasamos como parámetro.&#x20;

Parámetros:

* projectInfo: objeto correspondiente al proyecto.
* bOpenTabs: si se pone a false evita que se abran las pestañas del proyecto cuando se abre.

### Funciones de objeto

#### VObjectInfo currentObjectInfo() <a href="#currentobject" id="currentobject"></a>

Permite acceder al objeto seleccionado en el editor en el proyecto en curso, retornando el correspondiente [VObjectInfo](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vobjectinfo).

#### void openObject( VObjectInfo objectInfo )

Abre el objeto en el editor cuyo puntero pasamos como parámetro.

Parámetros:

* objectInfo: VObjetoInfo del objeto que queremos abrir.

#### Array searchObjects(\[Array de VProjectInfo], szTexto, nCaseSensitive)&#xD;

‌Permite buscar un texto en las propiedades de los objetos de los proyectos que se le pasen como parámetro y retorna un array de objetos JavaScript. Cada elemento del array retornado contiene los elementos siguientes:

**objectInfo**: el [VObjectInfo](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vobjectinfo) del objeto encontrado.

‌**parentObjectInfo**: el [VObjectInfo](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vobjectinfo) del objeto padre del objeto encontrado.‌

**mainObjectInfo**: el [VObjectInfo](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vobjectinfo) del objeto principal del objeto encontrado.

‌**solutionInfo**: la solución ([VSolutionInfo](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vsolutioninfo)) a la que pertenece el objeto encontrado.

‌**project**: el proyecto ([VProjectInfo](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vprojectinfo)) al que pertenece el objeto encontrado

‌**propertyNumber (Number)**: número de la propiedad, dentro del árbol de propiedades del objeto, que contiene el texto buscado.‌

**propertyName (String)**: nombre de la propiedad, dentro del árbol de propiedades del objeto, que contiene el texto buscado.‌

**propertyData (String)**: contenido completo de la propiedad, dentro del árbol de propiedades del objeto, donde está el texto buscado.

‌Parámetros:‌

* Array de VProjectInfo: pasaremos un array con los VProjectInfo en los que queramos hacer la búsqueda.
* szTexto: cadnea de texto a buscar.
* Number caseSensitive: especificaremos un 1 si queremos que la búsqueda se haga respetando mayúsculas y minúsculas y un 0 en caso contrario.

### Funciones de instancias

#### VInstanceList appInstances( VSolutionInfo solucion ) <a href="#appinstances" id="appinstances"></a>

Retorna un objeto VInstanceList que contiene la lista de instancias de aplicación de la solución en curso.

Parámetros:

* solucion: objeto [VSolutionInfo](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vsolutioninfo) que representa la solución de la que queremos conocer las instancias disponibles.

{% hint style="info" %}
Solo disponible para extensiones de Velneo vDevelop
{% endhint %}

#### VInstanceList datInstances( VSolutionInfo solucion ) <a href="#datinstances" id="datinstances"></a>

Retorna un objeto VInstanceList que contiene la lista de instancias de datos de la solución en curso.

Parámetros:

* solucion: objeto [VSolutionInfo](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vsolutioninfo) que representa la solución de la que queremos conocer las instancias disponibles.

{% hint style="info" %}
Solo disponible para extensiones de Velneo vDevelop.
{% endhint %}

### Funciones de directorios

#### VDir newDir() <a href="#newdir" id="newdir"></a>

Crea un objeto [VDir](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vdir) para la gestión de un directorio que pasemos como parámetro.

### Funciones de ficheros

#### VFile newFile( String szSenda ) <a href="#newfile" id="newfile"></a>

Crea un objeto [VFile](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vfile) para la gestión del fichero en disco que especificamos como parámetro.

Parámetros:

* szSenda: senda del fichero en disco.

#### VTextFile newTextFile( String szSenda ) <a href="#newtextfile" id="newtextfile"></a>

Crea un objeto [VTextFile](https://github.com/velneo/documentacion-de-velneo/tree/c9b0a763081be854a33d8ab459aa288833ea168d/vtextfile.md) para la gestión del fichero del texto en disco que especificamos como parámetro.

Parámetros:

* szSenda: senda del fichero de texto en disco.

### Funciones de sistema

#### VSettings newSettings( String szOrganizacion, String szAplicacion ) <a href="#newsettings" id="newsettings"></a>

Crea un objeto [VSettings](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/vsettings) para la gestión de una rama de configuración del sistema correspondiente a la Organización y la aplicación que pasemos como parámetro.

Parámetros:

* szOrganizacion: rama de la organizacion en la que queremos establecer o leer un valor.
* szAplicacion: rama de la aplicación en la que queremos establecer o leer un valor.

{% hint style="info" %}
En Windows se accede al registro, en linux a ficheros con extensión .ini y en mac a ficheros con extensión .plist.
{% endhint %}

### Funciones de base de datos externas

#### VSqlDataBase newSqlDatabase() <a href="#newsqldatabase" id="newsqldatabase"></a>

Inicializa un acceso a base de datos externa. Devuelve el puntero al acceso a base de datos externa.

Debemos hacer uso del subapi de Bases de datos externas para configurar el acceso y conectarnos para operar.

### Funciones de webservice

#### XMLHttpRequest newXMLHttpRequest() <a href="#newxmlhttprequest" id="newxmlhttprequest"></a>

Crea un nuevo objeto [XMLHttpRequest](https://doc.velneo.com/30/velneo-vdevelop/scripts/lenguajes/javascript/clases/xmlhttprequest) para la obtención de URL's para el acceso a webservices.

### Ejemplos

### Ejemplo de uso de las funciones de configuración de extensión

```javascript
Rectangle
{
    id: componentePrincipal

    width: 800
    height: 600

    Component.onCompleted:
    {
        theExtension.setDialog( true );
        theExtension.setWindowTypeFlags( VExtension.WindowTypeDialog | VExtension.WindowTypeCustomizeWindowHint | VExtension.WindowTypeWindowTitleHint );
        theExtension.setFixedSize(true);    
    }
}
```
