VApp: ejemplos
1. Obtener el numero total de tablas
var mainpro = theApp.mainProjectInfo();
var nTotalTablas = mainpro.allTableCount();
2. Obtener el valor de una variable global
var timeLast = theApp.varGlobalToString( "CINE_DAT/TIME_LAST_SUGEST" );
3. Regenerar índices de todas las tablas
var project = theApp.mainProjectInfo();
for( var x=0; x < project.allTableCount(); ++x )
{
var tableInfo = project.allTableInfo(x);
theApp.regenIndexes( tableInfo.idRef(), true );
}
4. Funciones generales
// 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() );
5. Funciones de variables globales
// 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 );
6. Funciones de constantes
alert( theApp.constant( "VJS_DAT/MSG_ERR_ID" ) );
7. Funciones de DOS (Sistema operativo de disco)
// 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 );
8. Funciones de herramientas de base de datos
// 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!" );
}
}
9. Cálculo de Hash
// Calcular el hash de una cadena con SHA-2 512
theApp.calculateHash( "", VApp.Sha2_512 )
10. Cambiar el marco principal de la aplicación
theApp.setFrame( "gestion_app/SUPERVISOR" );
11. Rellenar un combo box de un formulario con la lista de cámaras del dispositivo
//Inicialización de variables
var aCamaras = Array;
var aCamarasDescripcion = Array;
//Obtenemos el control combo box
var oCombo = theRoot.dataView().control("CBX_CAMARAS");
//Comprobar cámaras disponibles
aCamaras = theApp.availableCameras();
//Si hay cámaras se añade la lista al combo, si no hay, se indica en el combo
if (aCamaras.length == 0) {
oCombo.addItem("No se ha detectado ninguna cámara");
}
else {
aCamarasDescripcion = theApp.availableCameraDescriptions();
//Cargamos en el combotodas las camaras detectadas por el sistema
for ( var i = 0; i < aCamarasDescripcion.length; i++ )
{
oCombo.addItem( aCamarasDescripcion[ i ] );
}
}
12. Activar la cámara que el usuario haya seleccionado en el combo del ejemplo 11
// Obtenemos los nombres de las cámaras, que es lo que se usa para seleccionar la cámara
var aCamaras = theApp.availableCameras();
//Combobox
var oCombo = theRoot.dataView().control("CBX_CAMARAS");
// Objeto imagen del formulario
var objetoImagen = theRoot.dataView().control("IMAGEN");
// Posición del combo seleccionada que ha de corresponderse con el array de nombres de la cámara para que funcione
var i = oCombo.currentIndex;
// Nos quedamos con el nombre correspondiente a la cámara seleccionada por el array
var ba = new VByteArray();
ba.setText(aCamaras[i]);
// Iniciar cámara
objetoImagen.startCamera( ba );
13. Generar token JWT
// Creamos el objeto JSON que contendrá la información
var oJson = {};
// Definimos el valor de la clave que ayudará a comprobar que el token es válido
var semilla = "abc123";
// Definimos el algoritmo de cifrado
var algoritmo = "HS256";
// Asignamos la información (claves y valores) al objeto JSON
oJson.username = "juanmg";
oJson.nombre = "Juan Martínez González";
oJson.departamento = "Facturación y Contabilidad";
// Obtenemos el token JWT
var token = theApp.jwtEncode(oJson, semilla, algoritmo);
14. Validar token JWT y obtener información del payload
// Recibimos el token JWT
var token = theRoot.varToString("JWT");
// Definimos el valor de la clave que ayudará a comprobar que el token es válido
var semilla = "abc123";
// Definimos el algoritmo de cifrado esperado
var algEsperado = "HS256";
// Obtenemos el objeto JSON al decodificar el token JWT
var oJsonDecodificado = theApp.jwtDecode(token, semilla);
// Obtenemos si el token es válido, el algoritmo de cifrado usado y el objeto JSON payload
var esValido = oJsonDecodificado["isValid"];
var algoritmo = oJsonDecodificado["alg"];
var oJsonPayload = JSON.parse(oJsonDecodificado["payload"]);
// Si el token es válido y algoritmo de cifrado usado es el mismo al esperado ...
if ((esValido) & (algoritmo === algEsperado)) {
// Obtenemos los valores del objeto JSON payload
theRoot.setVar("USR_NOM", oJsonPayload["username"]);
theRoot.setVar("NOM", oJsonPayload["nombre"]);
theRoot.setVar("DPT", oJsonPayload["departamento"]);
} else {
// Sino, mensaje de error
theRoot.setVar("MSG_ERR", "Error con el JWT recibido (no es válido y/o cifrado no esperado");
}
15. Generar token JWT con caducidad
// Creamos el objeto JSON que contendrá la información
var oJson = {};
// Definimos el valor de la clave que ayudará a comprobar que el token es válido
var semilla = "abc123";
// Definimos el algoritmo de cifrado
var algoritmo = "HS256";
var caducidad = 1690894569;
// Asignamos la información (claves y valores) al objeto JSON
oJson.username = "juanmg";
oJson.nombre = "Juan Martínez González";
oJson.departamento = "Facturación y Contabilidad";
oJson.exp = caducidad;
// Obtenemos el token JWT
var token = theApp.jwtEncode(oJson, semilla, algoritmo);
theRoot.setVar("TOKEN", token);
theRoot.dataView().updateControls();
15. Validar token JWT con caducidad y obtener información del payload
// Recibimos el token JWT
var token = theRoot.varToString("TOKEN");
// Definimos el valor de la clave que ayudará a comprobar que el token es válido
var semilla = "abc123";
// Definimos el algoritmo de cifrado esperado
var algEsperado = "HS256";
// Obtenemos el objeto JSON al decodificar el token JWT
var oJsonDecodificado = theApp.jwtDecode(token, semilla);
// Obtenemos si el token es válido, el algoritmo de cifrado usado, si ha expirado o no y el objeto JSON payload
var esValido = oJsonDecodificado["isValid"];
var algoritmo = oJsonDecodificado["alg"];
var oJsonPayload = JSON.parse(oJsonDecodificado["payload"]);
var hasExpired = oJsonDecodificado["hasExpired"];
// Si el token es válido y algoritmo de cifrado usado es el mismo al esperado ...
if ((esValido) & (algoritmo === algEsperado) & (!hasExpired)) {
// Obtenemos los valores del objeto JSON payload y lo asignamos a variables locales del proceso
theRoot.setVar("USR_NOM", oJsonPayload["username"]);
theRoot.setVar("NOM", oJsonPayload["nombre"]);
theRoot.setVar("DPT", oJsonPayload["departamento"]);
} else {
// Sino, mensaje de error
theRoot.setVar("MSG_ERR", "Error con el JWT recibido (no es válido y/o cifrado no esperado o ha expirado");
}
Última actualización