Documentación de Velneo
35
35
  • Introducción
  • Velneo
    • Requerimientos de Velneo
    • Notas de la versión
    • Funcionalidades comunes a los componentes de Velneo
      • Instalación
      • Conexión con Velneo vServer
      • Cambiar el estilo de visualización
      • Cambiar el aspecto
      • Ver u ocultar barras de herramientas
      • Mensajería interna entre usuarios
      • Soporte de alta resolución (HighDPI)
      • Carpetas de trabajo de los componentes de Velneo
      • Numeración de versiones de Velneo
      • Certificado de firma digital para componentes de Windows
    • Tipos de archivo generados por Velneo
    • Velneo Web
      • Plataformas y navegador compatibles
      • Acceso a recursos del sistema
      • Siempre HTTPS
      • Funcionamiento de VATPS por websocket
      • CORS para llamadas XmlHttpRequest vía API o mediante el objeto Consumo servicio Web
  • Aplicación vLanzadera y login social
    • Configuración de vLanzadera en Apache en el Cloud de Velneo
    • Configuración de vLanzadera en Apache en servidores propietarios
  • Velneo vDevelop
    • ¿Qué es Velneo vDevelop?
    • Identificación de usuario
    • Interfaz de Velneo vDevelop
      • Dock de proyecto
      • Menú Soluciones
      • Menú Proyectos
      • Menú Objetos
      • Menú Scripts
      • Menú Edición
      • Menú Ver
      • Menú Componentes
      • Menú Ayuda
    • Lista de teclas aceleradoras de Velneo vDevelop
    • Soluciones y proyectos
    • Control y edición de proyectos
    • Herencia
    • Inspectores
    • Proyectos objetos y editores
      • Proyecto de datos
      • Proyecto de aplicación
        • Crear CSS para aplicar a objetos en edición
      • Objeto
        • Refactorización automátca
        • Exportación e importación de objetos
      • Objetos de proyecto de datos
        • Indice complejo
        • Tabla
          • Actualización
          • Campo
          • Enlace
          • Indice
          • Plural
          • Traspaso de campo
          • Trigger
        • Tabla estática
        • Variable
      • Objetos de proyecto de aplicación
        • Acción
        • Alternador de lista
        • Arbol visor de tablas
        • Bloc de formularios
        • Casillero
        • Cesta
        • ComboView
        • Control SVG
        • Dispositivo serie
        • Formulario
          • Controles de visualización
            • Texto estático
            • Nombre de campo
            • Visor HTML
            • Dibujo
            • Imagen SVG
            • Caja de grupo
            • Menú arbolado
            • Barra de progreso
            • Reloj
            • Manómetro
            • Termómetro
          • Controles de edición
            • Caja de texto
            • Caja de texto enriquecido
            • Data catcher edit
            • Edición alfabética
            • Edición fecha
            • Edición fecha/hora
            • Edición fórmula
            • Edición hora
            • Edición numérica
            • Edición senda fichero
            • Edición senda directorio
            • Objeto dibujo
          • Controles de entrada
            • Botón
            • Botón de check
            • Botón de radio
            • Calendario
            • ComboBox
            • Deslizador
            • Dial
            • ListBox
            • Rueda
          • Contenedores
            • Área de scroll
            • Caja de formularios
            • Pila de formularios
            • Separador de formularios
            • Splitter
            • Vista de datos
          • Layout
          • Tree widget
          • Controles SVG
          • Extensión de ficha
        • Formulario QML
        • Gráfico
        • Imagen SVG
        • Impresora lógica
        • Informe
          • Editor de informes
          • Agrupamiento
          • Sección
          • Cálculo
        • Informe personalizable
          • Diseñando un informe personalizable básico
          • Diseño avanzado
          • Diseñando un informe personalizable
          • Añadiendo orígenes de datos
          • Añadiendo elementos al informe
          • Características avanzadas
          • Etiquetas
          • Asistente de scripts
          • Impresión de gráficos
          • Opciones html
        • ListView
        • Lista QML
        • Localizador
        • Marco
        • Menú
        • Multivista
        • Protocolo TCP-IP
        • Reemplazo
        • Rejilla
          • Columna de rejilla
        • Rejilla avanzada
          • Columna de rejilla avanzada
        • Toolbar
        • ViewFlow
        • Sub-objetos de vistas de datos
          • Conexión de evento
          • Drop
          • Inserción
          • Manejador de evento
          • Variables locales especiales
      • Objetos comunes a proyecto de datos y de aplicación
        • Búsqueda
        • Cola
        • Constante
        • Consumo servicio Web
          • Proceso de respuesta de consumo servicio Web
          • Códigos de error de consumo servicio Web
        • Dibujo
        • Esquema de tablas
        • Fichero adjunto
        • Función
        • Librería externa
        • Lupa
        • Proceso
          • Indice de comandos de instrucción de proceso
          • Comandos de base de datos
            • API
            • Bases de datos externas
            • Búsquedas
            • Campos (grupo de comandos)
            • Cestas
            • Fichas
              • Enum de errores de JSON/CSV
            • Fichas seleccionadas
            • Listas
            • Tablas
            • Tubos
          • Básicos
            • Controles de flujo
            • Debug
            • Ejecución
            • Salida/retornos
            • Scripts (grupo de comandos)
            • Transacciones (comandos)
            • Variables
          • Comunicación
            • GPS
            • Internet
            • Protocolo TCP
            • Puerto serie
            • SDV
          • Interfaz
            • Acciones (comandos)
            • Controles
              • Ejemplos de CSS
            • Diálogos
            • Formularios - comandos
            • Localizadores
            • Objeto - grupo de comandos
            • Ventana principal
            • Vista de datos - comandos
          • Sistema
            • Comandos de Sistema
            • Configuración
            • Directorios
            • Ficheros
        • Tubo de ficha
        • Tubo de lista
        • Variable local
      • Editores
        • Asistente de fórmulas
          • Operadores
          • Funciones estándar
            • Funciones API
            • Funciones básicas
            • Funciones de cadenas
              • Expresiones regulares
            • Funciones científicas
            • Funciones de Cliente-servidor
            • Funciones de color
            • Funciones de códigos
              • Lista de codecs
            • Funciones de directorios
            • Funciones de fechas
            • Funciones de ficha en curso
            • Funciones de horas
            • Funciones JSON
            • Funciones de Internet
            • Funciones de juegos de caracteres
              • Codecs
            • Funciones numéricas
            • Funciones de sistema
            • Funciones de tiempo
            • Funciones trigonométricas
          • Funciones de dll
          • Funciones de proceso
          • Funciones remotas
          • Funciones de campo
          • Campos
          • Constantes
          • Variables globales
          • Variables locales
          • Variables del sistema
          • Buscar/Reemplazar (Ctrl + F)
          • Verificador de fórmulas
          • Conversión automática de datos
          • Introducción de datos literales
          • Secuencias de escape en cadenas de caracteres
          • Composición de sendas en fórmulas
          • Operar con datos de tipo fecha, hora y tiempo
        • Editor de imágenes
        • Selector de fuentes
    • Scripts
      • Lenguajes
        • JavaScript
          • Procesos JavaScript
          • Fórmulas JavaScript
          • Clases
            • Funciones globales
            • Objetos
            • FormData
            • VAbstractBrowser
            • VAbstractDataView
            • VAbstractListDataView
            • VAdvandedGridListDataView
            • VAlternatorListDataView
            • VApp
              • VApp: enumeraciones
              • VApp: ejemplos
            • VBoundFieldComboBox
            • VBoundFieldEdit
            • VBoundFieldEditBrowser
            • VBoundFieldListBox
            • VByteArray
            • VCheckBox
            • VClipboard
            • VClockWidget
            • VComboBox
            • VComboListDataView
            • VCoverFlowListDataView
            • VCWebView
            • VDataCatcherEdit
            • VDataCatcherEditBrowser
            • VDataView
            • VDataViewDialog
            • VDateEdit
            • VDateEditBrowser
            • VDateTimeEdit
            • VDateTimeEditBrowser
            • VDial
            • VDir
            • VExtension
              • VExtension: enumeraciones
            • VFile
              • VFile: enumeraciones
            • VFileInfo
            • VFilePathEditBrowser
            • VFinder
            • VFont
            • VFormBlockListDataView
            • VFormDataView
            • VFormulaEditBrowser
            • VGaugeWidget
            • VGPS
            • VGridListDataView
            • VGroupBox
            • VImage
            • VImageEdit
            • VImageWidget
            • VInstancesList
            • VInstance
            • VInstances
            • VItemRegisterPattern
            • VLabel
            • VLineEdit
            • VLineEditBrowser
            • VListBox
            • VListDataView
            • VLogin
            • VMainWindow
              • VMainWindow: enumeraciones
              • VMainWindow: ejemplos
            • VMdiView
            • VMimeData
            • VMultiDataView
            • VNumberSpinBox
            • VNumberSpinBoxBrowser
            • VObjectInfo
              • VObjectInfo: enumeraciones
            • VObjectInstance
            • VProcess
            • VProgressBar
            • VProjectInfo
            • VPushButton
            • VQmlFormDataView
            • VQmlListDataView
            • VQmlListModel
            • VQuery
            • VRadioButton
            • VRegister
            • VRegisterList
            • VReportListDataView
            • VRequest
            • VResponse
            • VRoot
            • VScreen
            • VScrollArea
            • VServerAdmin
            • VSettings
            • VSlider
            • VSlotListDataView
            • VSolutionInfo
            • VSplitter
            • VSqlDatabase
            • VSSLCertificate
            • VSSLKey
            • VSSLInfo
            • VSSLSessionCipher
            • VStackedWidget
            • VSvgButton
            • VSvgSlideSwitch
            • VSvgToggleSwitch
            • VSvgWidget
            • VSysInfo
              • VSisInfo: enumeraciones
            • VTableInfo
              • VTableInfo: enumeraciones
            • VTabWidget
            • VTextEdit
            • VTextFile
            • VThermometerWidget
            • VThumbWheel
            • VTimeEdit
            • VTimeEditBrowser
            • VToolBox
            • VTreeItem
            • VTreeItemRegister
            • VTreeListDataView
            • VTreeMenu
            • VTreeMultiTableListDataView
            • VTreeWidget
            • VUser
            • VUserGroup
            • VUserGroupList
            • VUserList
            • VXmlReader
            • VXmlWriter
            • Widget
            • XMLHttpRequest
        • QML
          • Tipos QML
            • Documentación para migrar de QtQuick Controls 1.X a 2.X
          • Funciones específicas de QML
    • Depuración
      • Depuración de procesos de Velneo
      • Monitor de vClient
    • Extensiones de Velneo vDevelop
    • Acceso directo a una solución desde vDevelop
    • Buenas prácticas
      • Buenas prácticas de organización
        • Proyectos
        • Organización de carpetas
        • Proyecto de datos
        • Proyecto de aplicación
      • Buenas prácticas de codificación
        • Identificadores
        • Teclas aceleradoras
        • Documenta
        • Diseña los formularios como si no existiesen los layouts
      • Buenas prácticas de rendimiento
        • Arquitectura
          • Listas de registros
          • Lista de resultados de una búsqueda
          • Las cestas
          • Las variables globales
          • La caché de fichas
          • Programa en cloud
        • Formularios
          • Condiciones de visible y activo
          • Carga de subformularios en pestaña, caja o pila
        • Base de datos
          • Campos
          • Indices
          • Actualizaciones
          • Eventos de tabla o triggers
          • Variables globales y constantes
          • Tablas en memoria vs tablas en disco
          • Optimizar migraciones de datos
          • Búsquedas en el servidor ¿Cuándo y Cómo?
          • Campos fórmula vs campos en disco
          • Indices condicionados vs búsquedas complejas
          • ¿Cuándo usar tablas de extensión?
          • Indices de trozos y palabras
          • ¿Cuándo usar cada tipo de campo alfa?
        • Procesos y funciones y eventos
          • 1º, 2º, 3º y 4º plano ¿Cuándo usar cada uno?
          • Bloqueo blando vs bloqueo duro
          • Pasar información del cliente al servidor
          • ¿Cómo optimizar transacciones grandes?
          • ¿Cómo gestionar las transacciones?
          • Grabaciones optimizadas para el usuario
        • Carga de registros en objetos de lista
          • Rejillas
            • Campos punteros a singular
            • Totales
            • Condiciones de activo, visible y color en columna
            • Campos de tipo objeto
        • Conoce los límites
      • Imágenes
      • Buenas prácticas para el desarrollo en equipo
      • Modo mantenimiento
    • Análisis de bases de datos para aplicaciones de Velneo
      • Un centro de enseñanza
      • Facturas de un cliente
      • Repartos de obras de teatro
      • Galería de arte
      • Gestión de un colegio
      • Instalación de lunas para vehículos
      • Libros y autores
      • Tienda de discos
      • Últimos pedidos de un proveedor
      • Existencias por almacén y precios por cliente
      • Generación de tickets para un quiosco
      • Navegación por facturas
  • Velneo vDevelop Web
  • Velneo vAdmin
    • ¿Qué es Velneo vAdmin?
    • Activación de licencias de Velneo vServer
    • Gestión de usuarios
    • Gestión de aplicaciones
      • Soluciones
      • Instancias
      • Disco
    • Monitorización
      • Lista de comandos
    • Tareas
    • Acceso directo
    • Velneo vAdmin Web
  • Velneo vClient
    • ¿Qué es Velneo vClient?
    • Movilidad
    • Funcionalidades de Velneo vClient
      • Accesos directos y VRL
      • Cambiar idioma
      • Panel de multitarea: procesos, colas y servicios
      • Manejo de rejillas
        • Submenú de filtros
      • Uso de la rejilla avanzada
      • Formularios: inducción automática del maestro en altas de registros de tablas plurales
      • Manejo de cestas
      • Refrescos
      • Caché local
      • Edición de campos enlazados a maestro
      • Edición de campos de tipo fecha
      • Capturar imagen desde una cámara
      • Asignar impresoras lógicas
      • Actualización automática
      • Personalización de la ventana de conexión de Velneo vClient
      • Instalador personalizado de Velneo vClient
      • Ordenación de listas
      • Listas virtuales
  • Velneo vClient Web
    • Cómo incrustar una aplicación de Velneo Web en un DIV de una página html
  • Velneo vServer
    • ¿Qué es Velneo vServer?
    • Instalación y configuración
      • Línea de comandos de Velneo vServer
      • Parámetros configurables de Velneo vServer
        • Componer certificado fullchain
        • Certificados TLS/SSL para intranets
      • Estructura de directorios
    • Iniciar y detener Velneo vServer
    • Funcionalidades
      • Protocolo VATPS
      • Protocolo VATP
      • Multi-hilo
      • Integridad referencial
      • Refrescos terciarios
      • Sistema transaccional
      • Sistema de bloqueos
      • Tecnología bigkey
      • Hilo de control
      • Colas de procesos en 4º plano
    • vPacker
      • Mensajes de log de sistema
  • Velneo vInstallBuilder
    • ¿Qué es Velneo vInstallBuilder?
    • Configurar una instalación
    • Probar una instalación
    • Crear el instalable
    • Accesos directos
  • Velneo vModApache
    • ¿Qué es Velneo vModApache?
    • Instalación y configuración
    • Nomenclatura de objetos en urls
    • Uso de ficheros adjuntos
    • Caché local de Velneo vModApache
  • Optimización del consumo de memoria en Apache
  • Velneo vDataClient
    • ¿Qué es Velneo vDataClient?
    • Iniciar Velneo vDataClient
    • Interfaz de Velneo vDataClient
      • Panel de tablas
      • Panel de datos
    • Procesos
    • Utilidades
    • Acceso directo a una instancia de datos
    • Velneo vDataClient Web
  • Velneo vTranslator
    • ¿Qué es Velneo vTranslator?
    • Importación y exportación basada en XLIFF
    • Acceso directo a una solución
  • Velneo ODBC Driver
    • ¿Qué es velneo ODBC Driver?
    • Referencia de comandos SQL
  • Velneo vVersion
    • ¿Qué es Velneo vVersion?
  • Velneo vERP
    • ¿Qué es Velneo vERP?
    • Manual del programador
    • Documentación de la ApiRest
    • Novedades de la versión
  • Velneo vTutor
    • ¿Qué es vTutor?
    • Tutores de objetos básicos
      • Tutor de árboles visores de tablas arboladas
      • Tutor de búsquedas
      • Tutor de cestas
      • Tutor de formularios
      • Tutor de informes
      • Tutor de localizador básico
      • Tutor de marcos
      • Tutor de rejillas
      • Tutor de rejillas avanzadas
    • Tutores de objetos avanzados
      • Tutor de alternadores de lista
      • Tutor de comboview
      • Tutor de drag and drop
      • Tutor de eventos
      • Tutor de tablas de extensión y extensiones de ficha
      • Tutor de tubos de ficha y de lista
      • Tutor de grabación de fichas
      • Tutor de gráficos
      • Tutor de impresión de informes
      • Tutor de lupas
      • Tutor de protocolo TCP/IP
      • Tutor de reemplazo
    • Tutores de controles
      • Tutor de botones de menú
      • Tutor de controles SVG
      • Tutor de edición numérica
      • Tutor de visor html dinámico
      • Tutor de vistas de datos de lista
    • Tutores de procesos y manejadores de evento avanzados
      • Tutor de cambio de marco
      • Tutor de comandos de interfaz y acciones
      • Tutor de importación y exportación de ficheros ASCII
      • Tutor de portapapeles
      • Tutor de procesos
      • Tutor de SDV
    • Tutores de scripts
      • QML: hola mundo
      • QML: tutor básico
      • QML: tutor de vistas
      • Tutor de XMLHttpRequest (webServices)
  • Velneo cloud
    • ¿Qué es Velneo Cloud?
    • Panel de control vServer cloud
      • URC
      • vServer
      • Apache
      • SFTP
      • Usuarios
      • Copias
    • Copias de seguridad automáticas
    • Velneo Cloud API
      • Uso de Velneo cloud API
    • Explorador de archivos cloud sFTP
    • TCP en Velneo cloud
    • Dominios de empresa y certificados
    • Velneo vModApache en cloud
    • SLA
    • Hora de los servidores en el cloud de Velneo
    • Arranque automático de un servidor tras una parada no controlada
    • ¿Qué puedo hacer si tengo una incidencia en mi servidor cloud?
Con tecnología de GitBook
En esta página
  • 1. Obtener el numero total de tablas
  • 2. Obtener el valor de una variable global
  • 3. Regenerar índices de todas las tablas
  • 4. Funciones generales
  • 5. Funciones de variables globales
  • 6. Funciones de constantes
  • 7. Funciones de DOS (Sistema operativo de disco)
  • 8. Funciones de herramientas de base de datos
  • 9. Cálculo de Hash
  • 10. Cambiar el marco principal de la aplicación
  • 11. Rellenar un combo box de un formulario con la lista de cámaras del dispositivo
  • 12. Activar la cámara que el usuario haya seleccionado en el combo del ejemplo 11
  • 13. Generar token JWT
  • 14. Validar token JWT y obtener información del payload
  • 15. Generar token JWT con caducidad
  • 15. Validar token JWT con caducidad y obtener información del payload

¿Te fue útil?

  1. Velneo vDevelop
  2. Scripts
  3. Lenguajes
  4. JavaScript
  5. Clases
  6. VApp

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");
}

¿Te fue útil?