Este clase representa a la aplicación. Dispone de funciones para ver información de sus proyectos, acceso a variables globales, constantes, utilidades de base de datos, disco, etc.
El objeto theApp
Todos los scripts están conectados a un objeto global y único que representa a la aplicación cuyo nombre es theApp. Este objeto está disponible en ejecución de scripts en Velneo vClient, pero también en extensiones en Velneo vDevelop, aunque no aquellas funciones que tienen sentido únicamente en ejecución (Ver documentación de VExtension).
Herencia
Hay que tener en cuenta que la aplicació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.
Devuelve el nombre del navegador en curso, por ejemplo: vClient, vWebClient, etc.
void processEvents()
Procesa los eventos que haya en la cola de la aplicación, excluyendo los de entrada de usuario (teclado, ratón...). Debe usarse donde se consuma mucho tiempo o bucles largos para que se refresque el interfaz. Solo actúa en procesos en primer plano ya que es en estos donde estamos ocupando el hilo principal que es el que atiende la cola de eventos. En los demás no hace nada.
String stripHtml( String szHtml )
Retorna la cadena que pasamos como parámetro sin etiquetas html. El código html debe estar bien conformado para que retorne contenido.
Parámetros:
szHtml: cadena de texto que contiene el código Html correctamente conformado del que queremos extraer el texto sin etiquetas html.
void wait( Number miliSegs )
El proceso queda detenido en este punto durante el tiempo especificado en el parámetro.
Parámetros:
miliSegs: número de milisegundos de espera, por ejemplo: 1000 = 1 segundo.
Funciones de proyectos
VProjectInfo mainProjectInfo()
Devuelve el objeto VProjectInfo del proyecto principal.
Si la usamos en un proceso ejecutado en 4º plano, esta función devolverá el proyecto donde esté declarado el proceso, tenga proyectos o no por encima, el motivo de esto es que
cuando se ejecuta el proceso el servidor crea un enganche temporal para gestionarlo, en ese momento, conoce el proyecto donde está el objeto y lo que hereda, pero no conoce todo lo que tiene por encima.
VProjectInfo projectInfo( Number nProjectType, int index )
Esta función es de uso exclusivo en las extensiones de Velneo vDevelop (clase vExtension).Devuelve un objeto VProjectInfo con la información del proyecto cuyo tipo e index dentro de la solución hayamos pasado como parámetro.
Parámetros:
nProjectType: tipo de proyecto. Ver enum de tipos de proyecto.
index: index dentro de la solución.
VProjectInfo projectInfo( String szAlias )
Devuelve un objeto VProjectInfo del proyecto con el alias especificado.
Parámetros:
szAlias: alias del proyecto.
Funciones de variables globales
QDate globalVarToDate( String szIdRefVar )
Devuelve el valor de una variable global de tipo fecha.
Parámetros:
szIdRefVar: identificador de referencia de la variable global.
Asigna el valor a la variable global de tipo hora.
Parámetros:
szIdRefVar: identificador de referencia de la variable global.
tValue: valor de tipo hora.
Funciones de constantes
String constant( String szIdRefConstante )
Devuelva el contenido de una constante.
Parámetros:
szIdRefConstante: idRef del objeto constante "ALIAS_PROYECTO/ID_OBJETO".
String constant( String szIdRefConstante, Number idioma, [Number pais] )
Devuelve el contenido de una constante en el idioma y país especificado en los parámetros. El país es un parámetro opcional, si no se especifica asume el más genérico de los existentes para ese idioma.
Parámetros:
szIdRefConstante: idRef del objeto constante "ALIAS_PROYECTO/ID_OBJETO".
idioma: código numérico del idioma, por ejemplo: English = 31. Ver enum de idiomas
país: código numérico del país, por ejemplo: UnitedKingdom = 224. Este es un parámetro opcional. Ver enum de países
Regenera el área de datos de la tabla indicada en el primer parámetro. Si indicamos true en el 2º parámetro se mostrará la barra de progreso. Esta función lanzada sobre tablas en memoria siempre devuelve false.
Parámetros:
idRefTabla: idRef de la tabla "ALIAS_PROYECTO/ID_TABLA".
bProgressDialog: true para indicar que sea visible la barra de progreso.
Ejecuta la aplicación que pasamos como parámetro con los argumentos correspondientes, devolviendo true si ha podido ejecutarlo. No espera.
Parámetros:
szExe: senda del ejecutable.
aszArgumentos: en Linux y en macOS se debe especificar un array de cadenas con los argumentos del ejecutable. En Windows se ha de usar una única cadena, un literal.
Alimenta un objeto VRegisterList con los registros contenidos en la cesta. Devuelve true si finaliza correctamente. Si el objeto VRegisterList contiene registros se pierden ya que el contenido del objeto VRegisterList en su totalidad es sustituido por los registros que existen en la cesta. Si el objeto VRegisterList no tuviese asignada ninguna tabla, al ejecutar esta función asumirá la misma tabla de la cesta.
Parámetros:
szIdRefCesta: idRef de la cesta "ALIAS_PROYECTO/ID_OBJETO".
Añade a la cesta los registros contenidos en un objeto VRegisterList. Devuelve true si finaliza correctamente. Si la cesta contiene registros se pierden ya que el contenido de la cesta en su totalidad es sustituido por los que existen en el objeto VRegisterList. La cesta asumirá la tabla del objeto VRegisterList.
Parámetros:
szIdRefCesta: idRef de la cesta "ALIAS_PROYECTO/ID_OBJETO".
Imprime un informe directamente en la impresora especificada sin mostrar el cuadro de diálogo de selección de impresora.
Parámetros:
list: objeto de la clase VRegisterList con la lista de registros con los que se alimentará el informe.
idRefReport: idRef del objeto informe a imprimir "ALIAS_PROYECTO/ID_OBJETO".
printerName: nombre de la impresora donde se lanzará la impresión del informe.
bHighRes: parámetro opción que permite configurar si la impresión se realizar con alta o baja resolución. Por defecto es false que indica baja resolución. Para imprimir en alta resolución hay que poner este parámetro a true.
Funciones de variables de sistema
String clientCachePath()
Devuelve el path usado por el ejecutable, por ejemplo vClient o vDataClient, para almacenar la información en caché.
Boolean isAdministrator()
Devuelve true si el usuario es administrador.
VSysInfo sysInfo()
Devuelve un objeto de la clase VSysInfo que contiene funciones para obtener diferente información del sistema.
Si cambiamos el cursor en un proceso con setOverrideCursor, para restaurarlo debemos hacerlo con la función restoreOverrideCursor en ese mismo proceso. El motivo es que estas funciones se han de usar en una misma sesión, y esa sesión es la del propio proceso en la que se ha modificado el cursor. Esto quiere decir que no podemos modificar y restaurar el cursor en procesos diferentes.
Funciones de variables globales tipo array
Number globalVarArraySize( String szIdRefVar )
Devuelve el tamaño del array de la variable global.
Parámetros:
szIdRefVar: identificador de referencia de la variable global.
Boolean globalVarArrayToBool( String szIdRefVar, Number nSubindex )
Devuelve el valor de un elemento de una variable global de tipo Array cuyo contenido sea de tipo booleano.
Parámetros:
szIdRefVar: identificador de referencia de la variable global.
nSubindex: número de índice del elemento del array.
Date globalVarArrayToDate( String szIdRefVar, Number nSubindex )
Devuelve el valor de un elemento de una variable global de tipo Array cuyo contenido sea de tipo fecha.
Parámetros:
szIdRefVar: identificador de referencia de la variable global.
nSubindex: número de índice del elemento del array.
DateTime globalVarArrayToDateTime( String szIdRefVar, Number nSubindex )
Devuelve el valor de un elemento de una variable global de tipo Array cuyo contenido sea de tipo tiempo, fecha y hora.
Parámetros:
szIdRefVar: identificador de referencia de la variable global.
nSubindex: número de índice del elemento del array.
Number globalVarArrayToInt( String szIdRefVar, Number nSubindex )
Devuelve el valor de un elemento de una variable global de tipo Array cuyo contenido sea de tipo numérico, entero.
Parámetros:
szIdRefVar: identificador de referencia de la variable global.
nSubindex: número de índice del elemento del array.
Number globalVarArrayToSDouble( String szIdRefVar, Number nSubindex )
Devuelve el valor de un elemento de una variable global de tipo Array cuyo contenido sea de tipo numérico, con decimales.
Parámetros:
szIdRefVar: identificador de referencia de la variable global.
nSubindex: número de índice del elemento del array.
String globalVarArrayToString( String szIdRefVar, Number nSubindex )
Devuelve el valor de un elemento de una variable global de tipo Array cuyo contenido sea de tipo alfabético.
Parámetros:
szIdRefVar: identificador de referencia de la variable global.
nSubindex: número de índice del elemento del array.
Time globalVarArrayToTime( String szIdRefVar, Number nSubindex )
Devuelve el valor de un elemento de una variable global de tipo Array cuyo contenido sea de tipo hora.
Parámetros:
szIdRefVar: identificador de referencia de la variable global.
nSubindex: número de índice del elemento del array.
Boolean isGlobalVarArrayEmpty( String szIdRefVar, Number nSubindex )
Devuelve true si el elemento de una variable global de tipo Array está vacío.
Parámetros:
szIdRefVar: identificador de referencia de la variable global.
nSubindex: número de índice del elemento del array.
void setGlobalVarArray( QString szIdRefVar, Number nSubindex, Variant var)
Asigna un valor a un elemento de una variable global de tipo array.
Parámetros:
szIdRefVar: identificador de referencia de la variable global.
nSubindex: número de índice del elemento del array.
var: valor de cualquier tipo que deseamos almacenar en el elemento de la variable global tipo array.
Devuelve un array con la descripción del dispositivo de las cámaras disponibles en el sistema. Para presentar al usuario es preferible mostrar esta información, es decir la descripción que devuelve esta función en vez de mostrarle los valores de la función availableCameras().
Array availableCameras()
Devuelve un array con los nombres de dispositivo de las cámaras disponibles en el sistema.
String defaultCamera()
Devuelve el nombre de la cámara configurada por defecto en el sistema.
String defaultCameraDescription()
Devuelve la descripción de la cámara configurada por defecto en el sistema.
Funciones de vista de datos
VAbstractDataView focusDataView
Retorna el control de vista de tipo VAbstractDataView que tiene el foco o null si no hubiera ninguno.
Funciones de estilos
Boolean setStyle( String szStyle )
Establece el estilo que indiquemos como parámetro para la aplicación.
Parámetros:
szStyle: nombre del estilo. Una cadena vacía establecerá el estilo por defecto del sistema ("").
Devuelve true si ha encontrado el estilo y establecido éste para la aplicación. False si no ha podido establecerlo por que no está disponible.
String style()
Devuelve el nombre del estilo en curso.
Array styles()
Devuelve en un array de cadenas, los nombres de los estilos disponibles en el sistema.
Funciones de conexión segura TLS/SSL
VSSLInfo sslInfo()
Devuelve un objeto VSSLInfo que contiene la información correspondiente a la conexión en curso, a partir del cuál podemos obtener información de la configuración de la conexión segura TLS/SSL y del certificado utilizado.
Funciones de cliente-servidor
Number connectionLatency()
En el cliente, devuelve la latencia media de la conexión expresado en milisegundos (devuelve -1 si no hay conexión).
Number connectionQuality()
En el cliente, devuelve la calidad media de la conexión en una escala de 0 a 6, de menor a mayor calidad (devuelve 0 si no hay conexión). Ver enum de calidades de conexión.
Funciones de personalización
Void setFrame( String szIdRefFrame )
Esta función permite cambiar el marco principal del proyecto por el que indiquemos en su parámetro.
Solamente podrá ser usada en el proceso ON_INIT_CLIENT del proyecto de aplicación.
Parámetros:
szIdRefFrame: identificador de referencia del marco a usar.
var mainpro = theApp.mainProjectInfo();
var nTotalTablas = mainpro.allTableCount();
var timeLast = theApp.varGlobalToString( "CINE_DAT/TIME_LAST_SUGEST" );
var project = theApp.mainProjectInfo();
for( var x=0; x < project.allTableCount(); ++x )
{
var tableInfo = project.allTableInfo(x);
theApp.regenIndexes( tableInfo.idRef(), true );
}
// Si el componente ejecutado es vClient se emite un pitido
if ( theApp.exeName() == "vClient" ) {
theApp.beep();
}
// Se muestra el nombre del componente en ejecución
alert( "Componente en ejecución: " + theApp.exeName() );
// Mostrar info local en curso
alert( "Información local en curso" + "n" + "n" +
"Código del idioma = " + theApp.currentLanguageCode() + "n" +
"Código ISO del idioma = " + theApp.currentLanguageIsoCode() + "n" +
"Nombre del idioma = " + theApp.currentLanguageName() + "n" +
"Código del país = " + theApp.currentCountryCode() + "n" +
"Código ISO del país = " + theApp.currentCountryIsoCode() + "n" +
"Nombre del país = " + theApp.currentCountryName() + "n" +
"Separador decimal = " + theApp.currentDecimalPoint() );
// Mostrar info local del sistema
alert( "Información local del sistema" + "n" + "n" +
"Código del idioma = " + theApp.sysLanguageCode() + "n" +
"Código ISO del idioma = " + theApp.sysLanguageIsoCode() + "n" +
"Nombre del idioma = " + theApp.sysLanguageName() + "n" +
"Código del país = " + theApp.sysCountryCode() + "n" +
"Código ISO del país = " + theApp.sysCountryIsoCode() + "n" +
"Nombre del país = " + theApp.sysCountryName() + "n" +
"Separador decimal = " + theApp.sysDecimalPoint() + "n" +
"Nombre de la máquina = " + theApp.sysMachineName() );
// Almacenamos los valores en variables globales
theApp.setGlobalVar( "VJS_DAT/VAR_GLO_ALF", "ABC" );
theApp.setGlobalVar( "VJS_DAT/VAR_GLO_NUM", 123.45 );
theApp.setGlobalVar( "VJS_DAT/VAR_GLO_TMP", "2012/05/03 08:31:18" );
theApp.setGlobalVar( "VJS_DAT/VAR_GLO_FCH", "2012/05/04" );
theApp.setGlobalVar( "VJS_DAT/VAR_GLO_HOR", "09:53:23" );
// Se comprueba si la variable global alfabética está vacía
alert( "¿Está vacía la variable global alfabética? " +
theApp.isGlobalVarEmpty( "VJS_DAT/VAR_GLO_ALF" ) );
// Recuperamos y mostramos el valor de las variables globales
alfabetica = theApp.globalVarToString( "VJS_DAT/VAR_GLO_ALF" );
numero_decimal = theApp.globalVarToDouble( "VJS_DAT/VAR_GLO_NUM" );
numero_entero = theApp.globalVarToInt( "VJS_DAT/VAR_GLO_NUM" );
tiempo = theApp.globalVarToDateTime( "VJS_DAT/VAR_GLO_TMP" );
fecha = theApp.globalVarToDate( "VJS_DAT/VAR_GLO_FCH" );
hora = theApp.globalVarToTime( "VJS_DAT/VAR_GLO_HOR" );
alert( "Valor de las variables globales: n" + alfabetica + "n" +
numero_decimal + "n" + numero_entero + "n" +
tiempo + "n" + fecha + "n" + hora );
alert( theApp.constant( "VJS_DAT/MSG_ERR_ID" ) );
// Se preparan las variables con los nombres de ficheros
fileFrom = "/fichero.txt";
fileTo = "/fichero.txt.bck";
// Si existe el fichero destino se elimina
if ( theApp.existsFile( fileTo) )
{
if ( confirm( "¿Desea eliminar el fichero " + fileTo + "?", "Confirmar" ) )
{
theApp.removeFile( fileTo);
}
}
// Si existe el fichero se copia
if ( theApp.existsFile( fileFrom ) )
{
if ( theApp.copyFile( fileFrom, fileTo) )
{
alert( "Se ha copiado el fichero correctamente", "Notificación" );
// Se crea un acceso directo al fichero origen
theApp.linkFile( fileFrom, fileFrom + ".lnk" );
// Se renombra el fichero copiado
theApp.renameFile( fileTo, fileTo + "1" );
} else {
alert( "No se ha copiado el fichero correctamente", "Notificación" );
}
} else {
alert( "No se ha encontrado el fichero " + fileFrom, "Aviso" );
}
// Cambiamos el directorio en curso
if ( theApp.setCurrentPath( theApp.rootPath() + "/instancias" ) )
{
alert( "Se ha cambiado el path en curso", "Notificación" );
}
// Mostrar los path de los directorios
alert( "Estos son los directorios de trabajo:" + "n" +
"En curso: " + theApp.currentPath() + "n" +
"Root: " + theApp.rootPath() + "n" +
"Home: " + theApp.homePath() + "n" +
"Temp: " + theApp.tempPath() );
// Limpieza de un path
alert( theApp.cleanPath( "//instancias\appdatos//2012", "Senda" ) );
// Revisar los dispositivos de disco del sistema operativo
var drivesNumber =0;
var drivesList = "";
theApp.loadDrives();
for ( i=0; i{
drive = theApp.driveAt( i );
drivesNumber++;
drivesList += drive.path() + "n";
}
alert( "Se han encontrado " + drivesNumber.toString() + " dispositivos de disco: nn" +
drivesList );
// Confirmamos si desea regenerar área de datos, índices o todos
var regenAreaDatos = confirm( "¿Desea regenerar el área de datos de todas las tablas?", "Confirmación" );
var regenIndexes = confirm( "¿Desea regenerar los índices de todas las tablas?", "Confirmación" );
// Si hay algo que regenerar se leen todas las tablas de la aplicación incluídas las heredadas
if ( regenAreaDatos | regenIndexes )
{
var msgErrors = "";
var mainProject = theApp.mainProjectInfo();
for( var nIndex=0; nIndex < mainProject.allTableCount(); nIndex++ )
{
var tableInfo = mainProject.allTableInfo( nIndex );
var table = tableInfo.idRef();
// Sólo se regenera el área de datos de las tablas en disco
if ( tableInfo.isInMemory() == false )
{
if ( !theApp.regenDataArea( table, true ))
{
msgErrors += "Falló la regeneración del área de datos de la tabla " + table + "n";
}
}
// Se regeneran los índices de todas las tablas sean en disco o en memoria
if ( !theApp.regenIndexes( table, true ))
{
msgErrors += "Falló la regeneración de índices de la tabla " + table + "n";
}
}
// Mensaje final del resultado de las regeneraciones
if (msgErrors.length == 0)
{
alert( "El proceso de regeneración ha finalizado correctamente", "Notificación" );
} else {
alert( "Se han producido los siguientes errores: n" + msgErrors, "¡Atención!" );
}
}
// Calcular el hash de una cadena con SHA-2 512
theApp.calcHash( "", VApp.Sha2_512 )