Tirando el servidor de v7 (II). Modificando registros

 

Para tirar el servidor esta vez vamos a trabajar un poco más. Como sabéis los procesos se pueden ejecutar en distintos planos, para optimizar la aplicación, lo recomendable, es ejecutar los procesos en el servidor, es decir en tercer plano.

Sigue leyendo

Anuncios

Tirando el servidor de v7 (I). Multipartir

Siempre esperamos que nuestra base de datos sea estable y esté operativa 24 horas al día. Los que venimos de trabajar la la versión v6 de Velneo, lo valoramos especialmente, todos tenemos múltiples aplicaciones que llevan años trabajando sin descanso y sin problemas. No es fácil programar con v6 y tirar el servidor. Sin embargo, desgraciadamente, no podemos decir lo mismo de v7. Os voy a mostrar varios casos “sencillos” de tirar el servidor.

Sigue leyendo

Minientrada

Bloqueandome a mi mismo (I)

Vamos a ver un ejemplo curioso, en el que el mismo usuario impide que se realicen las actualizaciones de su propia operación.

El proceso es de lo mas sencillo, partiendo de 2 tablas una de cabecera y otra de líneas, modifica el registro de cabecera y da de alta una nueva línea.

Proyecto de pruebas
Tengo un proyecto para hacer pruebas, y que utilizo para acotar bugs. El proyecto tiene 5 tablas, pero para este ejemplo solo necesitamos 2 de ellas.
Se trata de una estructura de tipo cabecera de albarán – líneas, con una actualización desde las líneas a la cabecera. Esta actualización mantiene un campo NRO_LIN, que nos deberia indicar (cuando las cosas funcionan como debe) el número de líneas del albarán.

Esquema:
PruebasEsquema
Ahora vemos las 2 tablas que usaremos en este caso:
Esta es la estructura de la tabla albaranes (ALB):
PruebasALB
Esta es la estructura de la tabla líneas de albarán (LIN):
PruebasLIN
Esta es la actualización del nº de líneas que tiene un albarán:
PruebasLIN-Actualiza

Cómo veis suma un 1 al campo NRO_LIN de la tabla ALB

Bien ahora ejecutamos el siguiente proceso, que lo que hace es recorrer los albaranes, modificando el campo NAME, y añadiendo una nueva línea. Como este proceso modifica el registro de albaranes, lo bloquea, y cuando el mismo proceso, al crear una línea, intenta actualizar la tabla de albaranes y sumarle 1 al campo NRO_LIN, no puede!!!!!!. Nosotros mismos nos bloqueamos

REM. Recibimos una lista de albaranes (tabla: ALB)
Recorrer lista lectura/escritura
Modificar campo NAME: "ANTES: Nº lineas:" + #NRO_LIN + ". AHORA deberia tener Nº:" + numberToString( #NRO_LIN + 1 , "L", 0 ) + "<--MAL"
Set ALB = #ID
Crear nueva ficha en memoria lin: LIN
Modificar campo ALB: ALB
Modificar camop CNT: 1
Alta ficha lin

Proceso autobloqueo.

RESULTADO:
Vista_Fallo_Actualiza
¿que os parece?. Una forma sencilla de generar una incongruencia de datos no?

Extendiendo entidades de vBase

unas de las dudas que mas se plantean a la hora de utilizar una OpenApps, es el poder beneficiarnos de futuras versiones (para lo que no debo modificar nada de la misma), pero a la vez poder complementarla según mis necesidades.
Siempre acabo necesitando añadir mis campos a alguna de sus tablas 😦

El caso más común se produce con la tabla entidades de vBase. Vamos a explicar como hacerlo con un ejemplo.

Quizás se conveniente recordar el artículo Personalizando entidades

Datos de partida:

  • Tenemos creado un tipo de entidad proveedor (Tabla ENT_TIP: ID = PRV, NAME=Proveedor, EMP = 1)
  • Utilizamos una constante para hacer referencia a este tipo de entidad. En nuestro caso usamos la contanes de vConta ~PRV_TIP@vConta.dat

Bien, en nuestro ejemplo queremos añadir datos específicos de una entidad que es un proveedor. Lo primero que hacemos es crear una tabla donde pondremos todos los campos del proveedor, la podemos llamar PRV_CND (Condiciones del proveedor).

El ID de la tabla, recomiendo hacer que sea el mismo ID que la tabla entidades (ENT).
En ella podemos añadir todos los campos que queramos. Un ejemplo:

Bien ahora vamos a crear un entidad que sea proveedor.

Yo crearía un mantenimiento en gestión, para ver solo proveedores. Desde ese mantenimiento haría un proceso para dar de alta un proveedor, el proceso sería:

Mediante esas funciones nos aseguramos que la entidad que se ha dado de alta queda como proveedor.

El usuario también podría ponerlo como proveedor desde el mantenimiento de las entidades de vBase, a través de la pestaña “Tipos de entidad”.

Ya tenemos la tabla con las condiciones del proveedor, ya sabemos como hacer que una entidad sea proveedor. Ahora lo que nos interesa es que cuando editen una entidad, si esta es un proveedor, podamos ver y modificar sus condiciones. Bien, vamos a ello.

1.- Formulario para editar condiciones del proveedor (PRV_CND)

Creamos un formulario para editar todos los campos del proveedor. Le ponemos un único botón, con la instrucción “aceptar”, y el texto “Guardar cambios”

2.- Proceso para presentar las condiciones del proveedor en la ficha de entidad (ENT_PRV_CND).

Creamos un proceso con origen Ficha de entidades, y salida Ficha de condiciones de proveedor

3.- Creamos un subformulario de entidades donde pondremos las condiciones del proveedor

En este subformulario ponemos un objeto “vista da datos”. Como primer objeto ponemos el proceso anterior ENT_PRV_CND, y como segundo el formulario del punto uno (PRV_CND)

Todo esto lo hemos hecho, naturalmente un nuestro proyecto de gestión. Para que este formulario se vea en el mantenimiento de entidades, debemos añadirlo a un punto de inserción de vBase.

Este punto de inserción lo condicionamos a que sea proveedor

Vista de la entidad:

VJavascript ejemplo cargar plurales

En este artículo vamos a escribir un ejemplo de VJavascript que nos servirá para hacer algo super frecuente en v7: Cargar plurales, pero de forma genérica.

De esta forma podremos aprovechar el fichero javascript para cargar cualquier plural de cualquier tabla. Solo tendremos que crear el objeto proceso en v7 que nos índique cual es la ficha origen y cual la lista destino, y asociarlo con este fichero. Con la salvedad que la lista destino tiene que ser de un histórico de la ficha origen.

Fichero: CargarPlurales.js

// IN.- Ficha
// OUT.- Lista de historico (Cargar plurales en v7 )
// Este proceso puede recibir una ficha de cualquier tabla
// Retornará la lista del historico de esa ficha, que espere a la salida

// Recogemos la información de las dos tablas
var TableInfoEntrada = VRegisterIn.tableInfo();
var TableInfoOut = VRegisterListOut.tableInfo();

var ListOut = VRegisterList;

var NumHist = TableInfoEntrada.PluralCount();

// Suponemos que la numeración de los historicos es de 0 a n-1
for (h= 0; h < NumHist; h++ )
{

if ( TableInfoEntrada.pluralBoundedTableId( h ) == TableInfoOut.id() )
{
ListOut = VRegisterIn.loadPlurals( TableInfoEntrada.pluralId( h ) );

     h = NumHist;
}

}

// Retornamos la lista
VRegisterListOut.append( ListOut );

Velneo y Javascript la conexión de dos mundos

Ya deciamos que después del 11/11/11 algo iba a cambiar y vaya que cambió. Las jornadas no tuvieron desperdicio, cada cual mejor. Pero no me he puesto a esta hora a escribir para hablar de la conferencia de hace casi un mes (lo siento pero no he tenido mucho tiempo, y supongo que eso es bueno ;), sobre todo para los tiempos que corren ). Me pongo por que después de esas jornadas ha habido otro acontecimiento a destacar y ha sido el blog de nuestro querido vArquitecto Juan Muñoz-Cobos, en él nos está informando de primerísima mano por donde se está trabajando para las siguientes versiones, algo que muchos reclamabamos a Velneo desde hace tiempo y ahora Juan, como siempre, nos ha dicho “quieres caldo… pues toma tres tazas”.

En él nos está informando de la apertura de v7 a la programación en javascript, detallandonos los objetos que tendremos para acceder a toda las información de la aplicación desde el entorno gráfico a la base de datos. Así podremos crear procesos y funciones en javascript o v7, a gusto del consumidor.

Pero me parece que cuando empezemos a hacer los procesos en javascript, vamos a dejar los de v7 para las cosas sencillas solamente.

Estoy tratando de digerir las posibilidades, y lo que quiero en esta entrada es hacer un ejercicio teorico, de las posibilidades que se abren. Para ello voy a partir del ejemplo de su entrada http://varquitecto.wordpress.com/2011/11/24/procesos-javascript/ donde dispone de una estructura de tres tablas:

Hay tenemos un ejemplo de como en javascript podemos retornar las PELICULAS de una PERSONA.

Yo voy a tratar de hacer un proceso en javascript que sustituya a 2 procesos de v7.

Procesos en v7:

  1. PERSONAS_REPARTOS. Origen ficha PERSONA, Salida Lista REPARTOS
  2. PELICULAS_REPARTOS. Origen ficha PELICULA, salida Lista REPARTOS

Estos procesos en v7 todos sabremos hacerlos, ahora ¿como sería un único proceso en javascript que nos sirva para los dos casos?.

// Este proceso puede recibir una ficha de la tabla PERSONAS o de la tabla PELICULAS

// Retornará en cualquier caso la lista de la tabla REPARTOS historica de la ficha recibida

var TableInfoEntrada = VRegisterIn.tableInfo();

var reparto = VRegisterList;

if ( TableInfoEntrada.id() == “PELICULAS” ) {

reparto = VRegisterIn.loadPlurals( “REPARTOS_PELICULAS” );

}

else {

reparto = VRegisterIn.loadPlurals( “REPARTOS_PERSONAS” );

}

// Ponemos a la salida la lista

VRegisterListOut.append( reparto );

 

Ya tenemos el mismo proceso que retorna el histórico REPARTOS a partir de cualquiera de sus maestros. Ahora es cuestión de perfeccionar el proceso para que sirva para muchas mas combinaciones.

Espero que funcione, pues no lo he podido probar ;), pero si no es así es culpa mía no de la herramienta.

 

 

Life is Soft 11.11.11. Algo va a cambiar

Todos los desarrolladores que hemos entrado en el mundo de Velneo y la v7, tenemos una cita anual en Noviembre. Una cita que este año se consolida, ampliando a tres días (en años anteriores era un único día).

En estas jornadas conoceremos todas las novedades de la versión 7.8, y también nos avanzarán lo que nos puede esperar a lo largo de 2012, que estoy seguro será el año de la consolidación, de la mano del mejor ponente posible (Juan Muñóz-Cobos), avances que sorprenderán a todos.

Podremos ver como profesionales sacan rendimiento a esta herramienta, escuchando sus experiencias de primera mano y conociendo sus OpenApps, que nos permitirán tener una curva de aprendizaje  menor.

Empezamos con 2 jornadas de seminarios con talleres técnicos, sobre temas muy interesantes, y enfocados a desarrolladores:

El miércoles día 9:

  • Presentación novedades Velneo V7 7.8. Con los ponentes más cualificados
  • Integración de Apps. Como integrar aplicaciones utilizando la potencia de la herencia y cómo aplicar la guía de estilo vDiseño a la interfaz de tus aplicciones.
  • vGestión V7. Nueva OpenApps de gestión integrada
  • Integración jQuery y Velneo. Open Apps para importar/exportar datos y generar gráficos
  • vConta V7. Open Apps de contabilidad profesional
El jueves día 10:
  • Aplicación de CSS en Velneo V7. Revolucionar el aspecto de tus aplicaciones con hojas de estilo
  • Curso de programación QML. Curso sobre el lenguaje declarativo para el diseño de interfaz en QT
  • Cómo implantar soluciones de movilidad. Soluciones autónomas con sincronización
  • Portal web + tienda online en Velneo. Solución web con módulo Apache y Velneo
  • Druneo. CMS Drupal + Velneo. Cómo integrar soluciones Velneo con el conocido CMS Drupal
  • CERTIFICACIÓN. Proceso de certificación para convertirte en Desarrollador Certificado Velneo 2012. Algo que todo programador de V7 que se precie debería obtener ( ya no faltaré 😉 ).
y por último el viernes, nos queda la jornada abierta al público en general como en años anteriores, que seguro no defraudará. Life is soft

Si en años anteriores este evento no nos ha defraudado, este desde luego los superará.

Nos vemos en él, y si quereis en la vCena (no oficial) que intentaremos organizar los velneadores.