Novedad Velneo 7.18: Depurador Javascript

La nueva versión de Velneo 7.18 incorpora un nuevo depurador, optimiza tu tiempo depurando Javascript

Características principales:

  • Integrado
  • Homogéneo
  • Interactúa con el depurador de código Velneo
  • Cerrando el círculo de depuración

En el seminario online de presentación de las novedades, Jose González nos explicó su funcionamiento:

 

Os recuerdo que podréis ver el funcionamiento en detalle de ésta y otras novedades en el curso de actualización que se celebrará el próximo mes de noviembre. No dejes pasar la oportunidad de ponerte al día con el mejor equipo de maestros posible. LIBERA TU POTENCIAL DE CRECIMIENTO.

Este artículo Novedad Velneo 7.18: Depurador Javascript es original de Velneo.

MEAN.IO

Desde el inicio, TipeSoft imparte formación técnica para clientes tecnológicos del más alto nivel, fundamentalmente especializada en tecnologías Microsoft (área de sistemas y desarrollo).

En el último año hemos abierto el abanico de tecnologías, ahora también impartimos cursos de formación avanzada en Velneo V7, QML, JavaScript, PHP, Python, AgilePoint, AgileXRM, Node.JS, AngularJS y MEAN.IO.

 

MEAN.IO

La mayor parte de la formación que impartimos es presencial, pero desde hace una año hemos trabajado y experimentado con tecnologías de formación online. El resultado nos gusta, por lo que trabajaremos en mejorar nuestras formas de entrega.

Os dejamos con el último seminario en abierto que hemos impartido en colaboración con TÜV Rheinland España y Bambú Software. Es una introducción teórica a MEAN.IO, esperamos os guste.

 

Blog | Tienda

MEAN.IO

Organiza los subformularios con un combobox

VITAMINA – 14

Planteamiento de la necesidad

Hay ocasiones en las que nos encontramos con la necesidad de incorporar en el separador de un formulario un numero elevado de subformularios, además es habitual que los textos de las pestañas no sean cortos para poder describir con precisión su contenido. En estos casos la interfaz de la aplicación plantea un problema de usabilidad al usuario final ya que dependiendo de la resolución de su pantalla es posible que no tenga a la vista de forma directa todas las pestañas por lo que le resultará más complicado acceder a una de las ocultas. Incluso debemos tener en cuenta que la organización de pestañas horizontalmente resulta más difícil de leer cuando el número de pestañas es elevado.

Formulario con muchas pestañas con la interfaz a mejorar

Objetivo a conseguir

Con el fin de mejorar la usabilidad de la aplicación para el usuario final vamos a intentar sustituir las pestañas por una lista de opciones ubicada en un control de tipo combobox. De esta forma el usuario tendrá la posibilidad de acceder directamente a cada una de ellas e incluso las opciones podrán tener textos largos más descriptivos, además del correspondiente icono.

Formulario en  ejecución con interfaz de subformularios sincronizados con combobox

Piezas de la solución

Para conseguir programar una solución práctica y sencilla con un código fácilmente reutilizable vamos a crear un formulario que contenga solo 2 subcontroles: El primero que estará situado en la parte superior será el combobox (MEN_CFG) que contendrá las lista de opciones (subformularios), debajo ubicaremos un control de tipo pila de formularios (FRM_CFG) que será el contenedor de todos los subformularios que el usuario tendrá visibles.

Formulario en edición con el control combobox y la pila de formularios sincronizada

Combobox sincronizado con la pila de formularios

La idea se basa en que solo nos tengamos que preocupar en añadir subformularios al control pila de formularios en el orden que deseemos aparezcan en el control combobox que hará de menú. A partir de ahí, al ejecutar la aplicación el código que vamos a ver a continuación se encarga de leer los subformularios de la pila y añadir al combobox los elementos correspondientes basados en los nombre de los objeto formulario incrustados en la pila.

Realmente no se necesita nada más porque el orden de elementos del combobox y el de los subformularios en la pila es el mismo, por lo que cuando el usuario selecciona un elemento del combobox, la posición de ese elemento nos sirve para conocer el índice del subformlulario que debemos activar. De la misma forma podemos marcar como seleccionado el elemento del combobox que se corresponda con el formulario en curso de la pila, es decir que se garantiza la sincronización en ambas direcciones.

Otro aspecto a tener en cuenta de esta solución es que contempla los puntos de inserción que serán totalmente funcionales, por lo que la personalización de estos controles para incluir nuevos formularios es realmente sencillo, ya que una vez incluido el subformulario a través del punto de inserción el elemento se incorpora automáticamente al combobox igual que el resto de formulario incrustados por el programador directamente en el control pila de formularios.

2 conexiones y 2 manejadores de evento para controlarlo todo

Para programar esta vitamina necesitamos crear 2 manejadores de evento y sus correspondientes conexiones de evento:

Conexión de evento OnShow formulario para carga del combobox
Manejador onShow sincornización combbox y pila de formularios

Manejador de evento CAR_COM_BOX

/**
 * Devuelve el icono de un formulario
 *
 * @param {VObjectInfo} formulario Objeto de la clase VObjectInfo del formulario
  * @return {VImage} icono Objeto de la clase VImage con el icono del formulario
 */
var iconoFormulario = function (formulario)
{
	if (formulario)
	{
		importClass("VImage");
		var icono = new VImage();
		var iconoIdRef = formulario.propertyData(6).replace("@", "/");
		icono.loadResource(iconoIdRef);
		return icono;
	};
};

// ------------------------------
// Cargar formularios en combobox
// ------------------------------

var controlComboBox = theRoot.dataView().control("MEN_CFG");
var controlPila = theRoot.dataView().control("FRM_CFG");

// --------------------------------------------------------------------
// Leer los subformularios  y dar de alta los registros en el combobox
// --------------------------------------------------------------------

// Limpiamos el combobox antes de cargarlo
controlComboBox.clear();

var numFormularios = controlPila.count;
for (var numFormulario = 0; numFormulario < numFormularios; numFormulario++)
{
	var formulario = controlPila.form(numFormulario);
	var nombre = formulario.objectInfo().name();
	var icono = iconoFormulario(formulario.objectInfo());
	controlComboBox.addItem(icono, nombre, numFormulario);
};

// Marcamos el primer elemento como seleccionado
controlComboBox.currentIndex = controlPila.currentIndex;

Es muy importante cargar los elementos del combobox en el mismo orden es que están declarados los formularios en el control, y más aún teniendo en cuenta que podemos usar puntos de inserción.

La última línea del script se encarga de dejar seleccionada la líneas del combobox que se corresponde con el formulario abierto, esto es necesario tanto para la carga inicial como sobre todo si cargamos el combobox en el OnShow, ya que la primera vez estará cargado el primer formulario de la pila, pero si salimos de la pestaña y luego regresamos el formulario que veremos será el último seleccionado, y como en ese punto recargados el combobox es necesario volver a posicionarlo. Si no queremos que se cargue en el OnShow podemos hacerlo en la conexión de evento Post-inicializado, perdiendo dinamismo y ganando tiempos de ejecución ya que se solo se carga la primera vez.

Otro punto a tener en cuenta en el script es que añade al combobox el icono que se corresponda con la propiedad icono declarada en cada uno de los formularios añadidos a la pila. Para que el combobox quede homogéneo o bien le ponemos icono a todos los formularios o a ninguno.

Conexión de evento ítem de cambio seleccionado en el combobox
Manejador de cambio de elemento seleccionado en el combobox

Manejador de evento CAR_FRM_SEL

// --------------------------------
// Abrir el formulario seleccionado
// --------------------------------
var controlComboBox = theRoot.dataView().control("MEN_CFG");
var controlPila = theRoot.dataView().control("FRM_CFG");
controlPila.setCurrentIndex(controlComboBox.currentIndex);

A diferencia de lo que hacíamos en la vitamina 13 con el listbox aquí no hemos incluido en la última línea el código para establecer el foco en el formulario de la pila, ya que esto facilita la navegación por el combobox a través de flechas o escribiendo las primeras letras de la opción que queremos disparar.

Código reutilizable

Lo único que tenemos que hacer para utilizarlo en otro formulario es asegurarnos de que o bien coinciden los identificadores de los controles combobox (MEN_CFG) y pila de formularios (FRM_CFG) o cambiamos dichos identificadores en el código.

Si quieres ver como crear una interfaz similar pero con un control listbox consulta la VITAMINA – 13 Organiza los subformularios con un listbox.

The post Organiza los subformularios con un combobox appeared first on Lógica mente Velneo V7.

Organiza los subformularios con un listbox

VITAMINA – 13

Planteamiento de la necesidad

Hay ocasiones en las que nos encontramos con la necesidad de incorporar en el separador de un formulario un numero elevado de subformularios, además es habitual que los textos de las pestañas no sean cortos para poder describir con precisión su contenido. En estos casos la interfaz de la aplicación plantea un problema de usabilidad al usuario final ya que dependiendo de la resolución de su pantalla es posible que no tenga a la vista de forma directa todas las pestañas por lo que le resultará más complicado acceder a una de las ocultas. Incluso debemos tener en cuenta que la organización de pestañas horizontalmente resulta más difícil de leer cuando el número de pestañas es elevado.

Formulario con muchas pestañas con la interfaz a mejorar

Objetivo a conseguir

Con el fin de mejorar la usabilidad de la aplicación para el usuario final vamos a intentar sustituir las pestañas por una lista de opciones ubicada en un control de tipo listbox. De esta forma el usuario tendrá muchas opciones a la vista, con la posibilidad de acceder directamente a cada una de ellas e incluso las opciones podrán tener textos largos más descriptivos.

Formulario en  ejecución con intefaz de subformularios sincronizados con listbox

Piezas de la solución

Para conseguir programar una solución práctica y sencilla con un código fácilmente reutilizable vamos a crear un formulario que contenga solo 2 subcontroles: El primero que estará situado a la izquierda será el listbox (MEN_CFG) que contendrá las lista de opciones (subformularios), a su derecha ubicaremos un control de tipo pila de formularios (FRM_CFG) que será el contenedor de todos los subformularios que el usuario tendrá visibles.

Formulario en edición con el control listbox y la pila de formularios sincronizada

Listbox sincronizado con la pila de formularios

La idea se basa en que solo nos tengamos que preocupar en añadir subformularios al control pila de formularios en el orden que deseemos aparezcan en el control listbox que hará de menú. A partir de ahí, al ejecutar la aplicación el código que vamos a ver a continuación se encarga de leer los subformularios de la pila y añadir al listbox los elementos correspondientes basados en los nombre de los objeto formulario incrustados en la pila.

Realmente no se necesita nada más porque el orden de elementos del listbox y el de los subformularios en la pila es el mismo, por lo que cuando el usuario selecciona un elemento del listbox, la posición de ese elemento nos sirve para conocer el índice del subformlulario que debemos activar.

Otro aspecto a tener en cuenta de esta solución es que contempla los puntos de inserción que serán totalmente funcionales, por lo que la personalización de estos controles para incluir nuevos formularios es realmente sencillo, ya que una vez incluido el subformulario a través del punto de inserción el elemento se incorpora automáticamente al listbox igual que el resto de formulario incrustados por el programador directamente en el control pila de formularios.

2 conexiones y 2 manejadores de evento para controlarlo todo

Para programar esta vitamina necesitamos crear 2 manejadores de evento y sus correspondientes conexiones de evento:

Conexión de evento OnShow formulario para carga del listbox
Manejador OnShow para cargar elementos del listbox

Manejador de evento CAR_LIS_BOX

// -----------------------------
// Cargar formularios en listbox
// -----------------------------

var controlListBox = theRoot.dataView().control("MEN_CFG");
var controlPila = theRoot.dataView().control("FRM_CFG");

// -------------------------------------------------------------
// Leer los subformularios  y añadir los registros en el listbox
// -------------------------------------------------------------
var numFormularios = controlPila.count;
for (var numFormulario = 0; numFormulario < numFormularios; numFormulario++)
{
	var formulario = controlPila.form(numFormulario);
	var nombre = formulario.objectInfo().name();
	controlListBox.addItem(nombre);
};

Es muy importante cargar los elementos del listbox en el mismo orden es que están declarados los formularios en el control, y más aún teniendo en cuenta que podemos usar puntos de inserción.

Conexión de evento ítem de cambio seleccionado en el listbox
Manejador de cambio de elemento seleccionado en el listbox

Manejador de evento CAR_FRM_SEL

// --------------------------------
// Abrir el formulario seleccionado
// ---------------------------------
var controlListBox = theRoot.dataView().control("MEN_CFG");
var controlPila = theRoot.dataView().control("FRM_CFG");
controlPila.setCurrentIndex(controlListBox.currentRow);
controlPila.form(controlPila.currentIndex).setFocus();

En la última línea de este código fijamos el foco en el formulario de la pila, por lo que una vez seleccionado el formulario el usuario ya puede comenzar a escribir en los controles del formulario sin necesidad de usar el ratón. Si no deseas esa funcionalidad puedes comentar o quitar la última línea.

Código reutilizable

Lo único que tenemos que hacer para utilizarlo en otro formulario es asegurarnos de que o bien coinciden los identificadores de los controles listbox (MEN_CFG) y pila de formularios (FRM_CFG) o cambiamos dichos identificadores en el código.

El próximo artículo será similar a este pero usando un control combobox en lugar del listbox empleado en esta vitamina.

The post Organiza los subformularios con un listbox appeared first on Lógica mente Velneo V7.

Velneo V7 7.15: API de Programación

Velocidad y estabilidadEn la nueva versión de Velneo V7 7.15 encontraremos nuevas clases y funciones en el API de Velneo para scripts, con las que podremos lanzar procesos, disparar objetos, etc., y que nos permiten ampliar la funcionalidad de nuestras aplicaciones.

A continuación tenemos un detalle de las novedades más importantes que encontrarás en el API de Velneo y que te permitirán disfrutar de la velocidad y estabilidad de esta nueva versión:

Documentación mejorada

Hemos mejorado la documentación del API, incluyendo un árbol de las clases que te ayudarán a conocer la relaciones entre las clases, esto te ayuda a la hora de saber que funciones y propiedades tienes disponibles para ejecutar desde una clase, ya que se pueden ejecutar tanto las suyas propias como todas las de las clases heredadas. Hemos incluido también un enlace por si quieres ver la lista de clases por orden alfabético.

También hemos incluido ejemplos en todas las nuevas clases y funciones incorporadas. Esta mejoras están disponibles tanto desde la ayuda online de vDevelop como desde el manual de la página web.

Nueva clase VObjectInstance

Esta nueva clase representa una instancia de un objeto en ejecución, como por ejemplo una búsqueda (VQuery) o un proceso (VProcess). Esta clase implementa las funciones comunes a todos los objetos como es el uso de las variables locales.

Las funciones de esta clase se usan desde los objetos creados por las clases que la heredan VDataViewDialog, VFinder, VProcess, y VQuery, en los ejemplos de estas clases podemos ver el uso de las funciones de VObjectInstance.

El API de Velneo V7 y los procesos JavaScript son ahora mucho más potentes y flexibles a la hora de integrarse con el resto de procesos y objetos de la aplicación. (VBM-3716)

Nueva clase VDataViewDialog

La clase VDataViewDialog representa un objeto en ejecución de ficha o lista con interfaz. Nos permite ejecutar objetos de lista o ficha como rejillas, formularios, casilleros, etc. Construimos un objeto VDataViewDialog pasándole el objeto VRoot en curso y le indicamos el objeto a ejecutar con la función setDataView.

Una vez inicializado le pasamos un registro (setRegister) o una lista de registros (setRegisterList) en función del tipo de entrada del objeto y también el contenido a las variables locales del proceso con setVarLocal (si lo requiere) y la ejecutamos con la función exec.

El registro que se pasa al objeto si exec devuelve true contendrá la información actualizada tras haber sido procesado en el objeto. No se genera un nuevo registro de salida (result), sino que se trabaja sobre el mismo VRegister o VRegisterList de entrada.

Esta clase nos abre la posibilidad de interactuar con objetos de interfaz de vista de datos de ficha y lista y gestionarlos directamente desde nuestro proceso JavaScript. Esto supone una mayor sencillez en nuestra programación a la vez que nos otorga una mayor potencia a la hora de crear soluciones más flexibles. (VBM-3722).


Nueva clase VFinder

La clase VFinder representa un localizador en ejecución. Nos permite ejecutar el objeto de proyecto localizar. Construimos un objeto VFinder pasándole el objeto VRoot en curso y le indicamos el localizador a ejecutar con la función setFinder. Tras ejecutar la función exec podemos recoger la ficha localizada con la función result, que nos devuelve un objeto de la clase VRegister con el cual podemos operar. (VBM-3712).


Nueva clase VProcess

Hasta esta versión era posible ejecutar procesos JavaScript lanzados desde código V7 pasándole parámetros a través de variables locales. Ahora ya es posible lanzar procesos V7 y JavaScript desde un proceso JavaScript pasando parámetros a través de variables locales, al igual que hacemos en V7 con disparar objeto contra un manejador de objeto. Además, esta clase nos permite ejecutar los procesos en 1º, 2º y 3º plano lo que facilita la optimización de nuestras aplicaciones para conseguir mayor velocidad de ejecución.

La clase VProcess representa un proceso en ejecución. Nos permite ejecutar procesos y recoger el resultado.

Esta nueva clase nos permitirá ejecutar procesos desde procesos javascript de forma análoga a como hacemos con los comandos del grupo de Objeto, de Velneo V7. De esta forma podremos encadenar procesos javascript de forma sencilla, optimizando y reutilizando nuestro código. (VBM-3715).

Clase VQuery revisada

Aunque la clase VQuery ya existía, se ha revisado para que herede de la clase VObjectInstance y tenga un funcionamiento homogéneo con las nuevas clases que la heredan. Este cambio no afecta al código JavaScript existente que use la clase, ya que las funciones se siguen llamando igual.

Nueva clases para controles de tipo browser

En esta versión hemos añadido nuevas clases que nos permite gestionar los controles de edición de tipo browser, que son aquellos a los que les hemos declarado un menú de botón. Las nuevas clases son:

  • VBoundFieldEditBrowser : Control de edición de campo enlazado a tabla maestra con botón de menú. Esta clase implementa la misma funcionalidad que la clase VBoundFieldEdit más las propiedades y funciones heredadas de la clase VAbstractBrowser.

  • VDataCatcherEditBrowser : Control de edición data catcher edit con botón de menú. Esta clase implementa la misma funcionalidad que la clase VDataCatcherEdit más las propiedades y funciones heredadas de la clase VAbstractBrowser.

  • VDateEditBrowser : Control de edición de fecha con doble botón arriba/abajo y botón de menú. Esta clase implementa la misma funcionalidad que la clase VDateEdit más las propiedades y funciones heredadas de la clase VAbstractBrowser.

  • VDateTimeEditBrowser : Control de edición de fecha/hora con doble botón arriba/abajo y botón de menú. Esta clase implementa la misma funcionalidad que la clase VDateTmeEdit más las propiedades y funciones heredadas de la clase VAbstractBrowser.

  • VNumberSpinBoxBrowser : Control de edición de números con doble boton arriba/abajo y botón de menú. Esta clase implementa la misma funcionalidad que la clase VNumberSpinBox más las propiedades y funciones heredadas de la clase VAbstractBrowser.

  • VTimeEditBrowser : Control de edición de hora/minutos/segundos con doble botón arriba/abajo y botón de menú. Esta clase implementa la misma funcionalidad que la clase VTimeEdit más las propiedades y funciones heredadas de la clase VAbstractBrowser.

Mejorado el API de controles browser para hacer funcionales todas sus propiedades y funciones

Hemos mejorado el API para que sean funcionales todas las propiedades y funciones de los controles tipo browser, con botón de menú. (VBM-3704, VBM-3711).

Los clases mejoradas han sido:

  • VBoundFieldEditBrowser
  • VCWebView
  • VDataCatcherEditBrowser
  • VDateEditBrowser
  • VDateTimeEditBrowser
  • VImageEdit
  • VLineEditBrowser
  • VNumberSpinBoxBrowser
  • VTextEdit
  • VTimeEditBrowser

Nueva función parentDataView() de la clase VAbstractDataView

Hasta ahora podíamos acceder a los objetos en cascada navegando por ellos de arriba hacia abajo, es decir, desde el principal o padre hacia sus hijos. También disponemos de la función mainForm() de la clase VFormDataView que nos permitía situarnos en el objeto padre o principal de la cadena de objetos amalgamos donde nos encontramos. Pero con esta nueva función tenemos ya la posibilidad de navegar hacia arriba desde el objeto en el que estamos hacia su padre y así recursivamente hasta llegar al padre u objeto principal.

Si nuestro objeto no se encuentra amalgamado dentro de otro objeto esta función devolverá null.

Si nuestro objeto está amalgamado esta función devolverá un objeto de la clase VAbstractDataView que representa al objeto dentro del que se encuentra amalgamado.

Esta función puede aplicarse recursivamente para movernos hacia arriba en la cadena de objetos amalgamados hasta encontrar un null que nos indique que ya estamos en el objeto de nivel superior de la cadena.


Nueva función deleteRegisterWhithoutDeupdating() de la clase VRegister

Gracias a esta nueva función ahora podemos eliminar un registro con y sin desactualización. (VBM-3576).

Implementación de la función root() en la clase VAbstractDataView

Se implementa la función root() en la clase VAbstractDataView que nos permite obtener un objeto de la clase VRoot correspondiente al objeto en ejecución.

A partir de la versión 7.15 podremos usarlo en nuestros procesos javascript de forma análoga a como hacíamos a cuando obteníamos el root en la clase VMdiView, ampliando las funcionalidades de nuestra aplicación. (VBM-3611).

Mejorada la función control() de la clase VFormDataView

La función control() mejorada de la clase VFormDataView ahora es capaz de devolver el control incluso cuando tipo un botón de menú (browser). (VBM-3701).

Optimizada la gestión de memoria de la clase  VImage

Hemos optimizado el funcionamiento de la clase VImage. Podrás trabajar con múltiples objetos imagen sin que esto afecte al rendimiento y consumo de memoria del equipo. (VBM-3680).

Implementada la función staticTableItemImage() de la clase VApp

Hemos resuelto una incidencia que producía que la función staticTableItemImage() de la clase VApp se mostrase el error:

Error en script: TypeError: cannot call staticTableImage():Unknown return type `const QObject*’ (register de the type with qScriptRegistermetaType()) (VBM-3671).

La entrada Velneo V7 7.15: API de Programación aparece primero en Velneo V7.

Contemplarás el cambio o serás parte

Videovigilancia??? De nuestras oficinas???… me parto!!!!!… Esto es lo que intentaron vender esta mañana.

Me parto, ya que me suena a cosas del pasado. Nosotros no tenemos nada que vigilar, nuestras oficinas son como el camerino de los hermanos Marx y unas cuantas salas de trabajo de ubicaciones tan remotas como España, Colombia, Panamá, Venezuela, República Dominicana
Ni siquiera tenemos que vigilar el código fuente de las cosas que hacemos, ya que es abierto (EUPL 1.1) y compartido por la comunidad de desarrollo.

Es terrible tener que lidiar con los anacronismos de este presente!!!. Me entristezco muy mucho por ello (ya que en el fondo sé, que detrás de está el pasado), pero no perderé un segundo en intentar remediarlo (me apasionan los avances tecnológicos, no es momento de contemplaciones).

 

Bienvenidos al futuro!!! Contemplarás el cambio o serás parte. Tú eliges!!!

 

En un modelo de negocio compartido las cosas son muy distintas a las tradicionales formas de negocio. No existe el concepto de propiedad (solo el de propiedad compartida), por lo que no hay nada que proteger. A lo sumo está la protección del conocimiento alojado en las personas que conforman el proyecto y en el usuario que usa los productos finales.

 

PaaSOS EDS… un nuevo producto para una nueva realidad.

Esta semana estamos centrados en poner en marcha un producto que lleva en cocina casi dos años, PaaSOS EDS es su nombre en clave (una de esas ideas locas que surgieron con mi socio Fernando Herranz). Es un producto único, sin competencia y con un enfoque diametralmente opuesto a lo visto hasta la fecha.

EjemploDeSticker thumb Contemplarás el cambio o serás parte

El resultado es esperanzador. Decenas de personas asombradas por lo que ven, empresas interesadas en montarlo en sus negocios y un feedback de los clientes sorprendente (supera todas nuestras expectativas).

 

Este producto es el primero de otros muchos que serán íntegramente desarrollados mediante Qt, HTML5, QML y C++. Muy probablemente, entrarán en el modelo comercial de los productos de la familia PaaSOS, pero es posible que generen otras derivadas comercialmente hablando.

 

El motivo de no utilizar Velneo V7 en esta derivada de nuestros productos es simple, Velneo no termina en arrancar en el apartado de movilidad y es necesario plantearse soluciones paralelas (que no opuestas) para esta cuestión. Además no avanza en cuestiones transcendentales tales como el soporte para iOS, Android, BB10, procesadores ARM y arquitecturas x64. Esta dura decisión la tomé personalmente al inicio de este proyecto. PaaSOS EDS es el primer (pero no el único) resultado de todo este esfuerzo. Es genial ver como está evolucionando.

Ahora empezamos a vislumbrar como será el futuro de PaaSOS en el apartado de movilidad (cuestión no resuelta aún). Realizaremos una apuesta clara por productos y servicios basados en Qt, HTML5, QML y C++.

Esto no significa que abandonemos a Velneo como proveedor tecnológico, simplemente que lo centraremos en el nicho en el que es bueno, desarrollo de aplicaciones empresariales para Windows/Linux/Mac. Todos los avances que haga Velneo en la multiplataforma nos vendrán bien en el futuro, pero para el presente en movilidad usaremos Qt aderezado.

A por ellos…

El cómo… sencillo.

Utilizaremos PaaSOS como centro de nuestras aplicaciones, Cirrus/vModApache para servir mediante REST nuestros servicios y Qt para los UI.

La decisión de usar Qt (y no las SDK nativas de cada plataforma) es la eclosión de plataformas hard/soft que está aconteciendo (iOS, Android, Windows Phone, BB10, Firefox OS, Jolla, Sailfish OS, Nemo, Ubuntu Phone… no sigo que me canso). Ahora es evidente cual será el futuro tecnológico (fragmentación de plataformas), solo hay dos posibles enfoques a nivel soft: HTML5 y multiplataforma (tú eliges) y uno a nivel hard (prepararse para lo que venga).

Bueno… espero que no os asuste el reto, nosotros ya lo hemos asumido.

Los ejes:

  • Qt 5 al poder (ya estamos con los ports de PaaSOS EDS, RastroES y CocheES).
  • QML y HTML5 para el disfrute de los usuarios.
  • JavaScript y C++ para el funcional
  • y por último PaaSOS en el centro

 

Bienvenidos al nuestro futuro. Ahhhh y que no se te olvide COLABORAR y compartir, lo otro son cosas del pasado.

Blog | Tienda

Contemplarás el cambio o serás parte

Control de edición de etiquetas en Velneo V7

VITAMINA – 11

Las posibilidades que ofrece Velneo V7 para el desarrollo de la interfaz de tus aplicaciones es muy elevado. Si además de todo lo que trae la plataforma le unimos las posibilidades que ofrece la integración de QML y el control visor HTML, nos encontramos que los límites se disipan entre tantas posibilidades. En este artículos veremos como implementar un control de edición de etiquetas en Velneo V7.

Es cierto que los controles que la plataforma trae por defecto son mucho más Life is Soft que crear controles QML o con HTML, pero no es menos cierto que en Internet podemos encontrar controles, plantillas y recursos que nos ayudan a mejorar la interfaz de nuestras aplicaciones de forma más cómoda y rápida.

Ejemplo de formulario con control de edición de etiquetas

Control de edición de etiquetas en Velneo V7

Esta vitamina es un ejemplo de las posibilidades que ofrece el control visor HTML para añadir a nuestros formularios controles que Velneo V7 no incluye en su galería de objetos o controles.

Vídeo que explica como incluir un control de edición de etiquetas en Velneo V7

Para los amantes de Life is Soft

Te dejo el enlace de descarga de la instalación de la solución controlTag que contiene todos los objetos explicados en esta vitamina totalmente operativos para que los pruebes o uses directamente heredándolo en tus aplicaciones.

Por razones de seguridad, el fichero de instalación .vin lo descargarás comprimido en formato zip. Debes descomprimirlo para obtener el fichero con extensión “.vin”.

Recuerda que este fichero de instalación está creado con la versión 7.14, por lo que necesitas instalarlo en un vServer que tenga esa versión o una superior.

icono descarga 32 Descargar controlTag_1_1_714_vin

Actualizado

Cuando publiqué la versión 1.0 comentaba que esta vitamina funcionaba bien en Windows, pero no en Linux y Mac. La versión 1.1 ya funciona correctamente en todas las plataformas. El motivo por el que no funcionaba correctamente era que el controlHtml usa ficheros externos que van adjuntos en la aplicación y en el segundo parámetro de la función setSourceCode con la que se añade el HTML al control se especifica el directorio de caché de la aplicación, sin embargo, eso funcionaba bien Windows pero no el resto de sistemas. Para garantizar la compatibilidad multiplataforma es necesario añadir el prefijo “file:///” (con tres barras) tal y como se muestra en el siguiente código.

// Cambiar el HTML del control
control.setSourceCode( html, "file:///" + theApp.clientCachePath() );

 

Si te ha gustado este artículo, por favor compártelo con los tuyos en las redes sociales

The post Control de edición de etiquetas en Velneo V7 appeared first on Lógica mente Velneo V7.