Informar del control en el que está el cursor


([N4] rpaton) #1

En un formulario quiero que cuando se pulse la tecla F1 me informe del control en el que está el cursor en ese momento para pasarlo a un Manejador de Objetos y presentar un formulario con información de ayuda en función del campo que se esté rellenando en cada momento.

Saludos.

Ricardo Patón


([N1] Lydia.dfr) #2

Buenos dias @rpaton
te dejo un enlace del foro donde se habla de obtener el campo en curso con código de java, igual te sirve de algo:
http://velneo.es/foros/topic/nombre-campo-en-curso-en-un-evento/
Puedes guardar el nombre en una variable y luego en F1 comprobar ese nombre.
Otra opcion que se me ocurre es un evento en cada control que cambie el valor de una variable local al coger el foco, asi al pulsar F1, lees la variable y muestras el formulario que le corresponde. Pero es un poco engorroso hacer un evento para cada control.


([N3] pacosatu) #3

Hola Ricardo.

Otra alternativa, usando exclusivamente Velneo (¡viva el código nativo!).

Colocas un botón <Ayuda> en tus formularios con la Tecla aceledadora F1 y Seleccionable con Tab = Falso. Ejecutas el manejador de evento “Ayuda” y allí gestionas lo que debe suceder.

Normalmente habrá unos cuantos campos (no muchos) que necesitarán una Ayuda Contextual específica (pongamos EDT_1, EDT_2 y EDT_3), para el resto valdrá con una ayuda genérica del formulario actual.

Recorres uno a uno los controles


Set ( CTR_FOCO, “” )
Set ( TIP_AYUDA, “gestion_cuenta” )
Interfaz: ¿Tiene foco? ( EDT_1, LOK )
If ( LOK )
Set ( CTR_FOCO, “EDT_1” )
Set ( TIP_AYUDA, “cuenta_principal” )
Interfaz: ¿Tiene foco? ( EDT_2, LOK )
If ( LOK )
Set ( CTR_FOCO, “EDT_2” )
Set ( TIP_AYUDA, “cargos_pendientes” )
Interfaz: ¿Tiene foco? ( EDT_3, LOK )
If ( LOK )
Set ( CTR_FOCO, “EDT_3” )
Set ( TIP_AYUDA, “cuenta_secundaria” )
If ( !isEmpty(CTR_FOCO) )
rem Mensaje ( "Tiene Foco el Control: " + CTR_FOCO, Información, , )

rem Tenemos fijado el valor de TIP_AYUDA
rem Aquí ejecuto mi sistema de Ayuda (HTML, Webservices, CHM, …)


No es una forma muy dinámica y abstracta de hacer las cosas, pero así es Velneo.

Saludos
Paco Satué


([N4] rpaton) #4

Hola Paco:
Efectivamente eso es lo que quería hacer y con código nativo como indicas.

Saludos.
Ricardo Patón


([N3] blavan) #5

Hola, pero resulta con JS tampoco puede ser muy abstracta o por lo menos esa es mi opinión porque habrá que puntualizar a cada control su tipo de ayuda especifico. en este caso V7 mucho más claro


([N3] pacosatu) #6

Hola blavan.

La abstracción es muy difícil de implementar en Velneo porque no es un lenguaje orientado a objetos. No podemos definir clases, no confundir con plantillas ni herencia de Velneo.
Tampoco podemos recorrer (en tiempo de ejecución) los controles (y subobjetos) de un formulario e interrogar por el valor de sus propiedades. Eso es código dinámico.

Por eso en Velneo tenemos que repetir una y otra vez el mismo código, conocer el Id y jerarquía de cada objeto en desarrollo, porque todo debe estar muy ensamblado (estático) para que funcione bien.

Y vino el API a salvarnos, para que podamos aplicar abstracción y dinamismo a nuestro código.

De todas formas lo del sistema de ayuda se puede generalizar bastante más. El ID del objeto se puede consultar en una tabla “topicos_ayuda” para que nos devuelva el tópico de la ayuda que le corresponde. Esta tabla es la que alimentará el departamento de Ayuda. Así, el mismo ID en diferentes formularios tendrá el mismo tópico de ayuda.

Sí puedo, prepara un ejemplo de ayuda contextual en HTML.

Saludos
Paco Satué


([N4] velavisual) #7

Hola,

Al margen de las soluciones expuestas, yo simplemente suelo dar información al operario a modo de Tooltip.Copio el texto desde un archivo txt y lo pego en las propiedades del Tooltip correspondiente.


([N3] blavan) #8

Hola Paco, nada más de enviar mi comentario me surgio la idea de una tabla de Ayudas tal como expones y la voy a desarrollar.
Gracias a tus comentarios siempre acertados y a tus ayudas de código he podido avanzar unos pasos en JS, me gustaría mostrarte lo realizado y obtener tu valoración, no es Aplicación comercial sólo relax y pruebas con V7 JS

Tienes mi invitación abierta


([N3] pacosatu) #9

Hola Blavan.

Gracias por tu invitación.
Pero quiero aclararte que no soy nada experto en JS, seguro que habrá personas con mucha más experiencia y puedes contactar con ellas a través de sus Blog. Por citar alguno, Jesús Arboleya es un gran comunicador, padre del API y tiene un blog que acepta comentarios.

Yo llevo mucho tiempo programando con otro lenguaje interpretado y me divertí mucho con él, pero hace 1 año decidí pasarme a Velneo precisamente porque tenía todo lo que había rechazado anteriormente: código asistido, base de datos cerrada, no es dinámico, no es OOP. Quería pasar de la programación caótica, libre y dinámica de otros lenguajes a una herramienta con la que ensamblar aplicaciones fuera algo PPF (Plis-Plas-Fuera).

Después de este año de aprendizaje, creo que Velneo, con sus muchas limitaciones, es la herramienta adecuada para mis objetivos.

Para mí, poner tanto el foco en JavaScript es un gran error. Es como admitir que Velneo no es dinámico y abstracto, y como son dos cosas buenas que además necesito, pues no tengo más remedio que usarlo. Si cayera en esa tentación, estaría programando como antes y es lo que no quiero, por eso, ¡Viva el código nativo!

Para mí, el API es algo que una buena herramienta pone a mi disposición para que pueda usarla desde otras Aplicaciones o plataformas, mediante DLL’s, webservices, etc… y usando cualquier lenguaje de Script. En Velneo, el API solo puedo usarlo desde el propio Velneo y con un solo lenguaje de script o 2 si consideramos QML. Caso distinto es la API para el Cloud de Velneo, ésta sí que es una auténtica API.

De todas formas, a estas alturas yo soy incapaz de desarrollar cualquier rutina en JavaScript medianamente compleja en el editor de Velneo, sin depurador, sin un buen Intellisense, sin poder establecer puntos de ruptura, en fin, lo habitual en editores de código de scripts.

En resumen, si te aventuras con JS te aseguro que será muy divertido, pero para sacarle todo el jugo necesitas conocer muy bien el modelo de objetos que te muestra el API de Velneo. Ten en cuenta que hoy es JS, pero mañana puede ser PHP, PYTHON, … y el modelo de objetos siempre es el mismo.

Reconozco que la documentación del API es horrorosa, que no hay apenas ejemplos y que el aprendizaje se hace cuesta arriba, pero eso es otro tema.

Saludos
Paco Satué


([N3] blavan) #10

Hola Paco, bueno la botella se puede ver medio llena, medio vacia
Ahora voy a exponerla medio llena para no amedantradar a los que se inician.
Hace menos de un mes yo con Javascritp nada de nada.
Me puse a ello, me ayudaste puntualmente en dos o tres hilos de este foro, se me abrieron los ojos y desarrolle unas rutinas en JS para mí muy útiles.

1º Logro mantener un histórico de la tabla de Permisos con todos los controles, formularios y acciones en donde se usa cada permiso. En aplicaciones grandes en V6 lo echaba mucho de menos.

2º Otra rutina que aplicada como evento al inicio de cada formulario me deshabilita todos los controles de ese formulario según el binomio Usuario-Permiso

Bueno y ya animado sigo adelante con ideas nuevas de cierta utilidad.

Saludos y un abrazo


([N3] pacosatu) #11

Hola Blavan.

No es cuestión de ver la botella llena o vacía es cuestión de ser práctico. En mi caso particular, la elección ha sido ahora Velneo. Hace 25 años seguramente hubiera elegido Servoy o el reciente Lianja.

Meter código JS en tus proyectos complejos, lo meterás, pero luego hay que mantener ese código a largo plazo y Velneo a día de hoy no facilita ese trabajo.

Por supuesto, yo tendré que usar código JS cuando no haya más remedio. Mientras tanto espero que Velneo vaya creando funciones nativas que nos digan el Control Activo, que controle la multiapertura de la misma pestaña, que nos de el nombre de la tabla de la ficha en curso, etc …

Saludos y por supuesto a disfrutar velneando.
Paco Satué


([N2] Mgalvezh) #12

Paco, sabes cual creo que es el problema, que los Hacedores están en ‘eso se puede hacer con JS’ pues nunca lo voy a desarrollar en nativo a que perder el tiempo, yo estoy contigo quiero LifeIsSoft !Ya¡ pero mientras los usuarios se conforman con hacerlo en JS nunca se conseguirá. No quiero decir que no sea interesante y bonito el JS pero no es lo que me venden en Velneo. LIS.

Saludos.
Miguel.


([N1] cristianvg2003) #13

+1 con @Paco el asunto es ser prácticos:

Personalmente uso código estándar de Velneo para todo lo que puedo, porque el editor hace que los errores sean mínimos, hay asistencia de código es muy buena además el código expresa la particular forma en la que fluyen los datos en V7.

Por supuesto se dan funcionalidades que requieren de mayor versatilidad en el código y un mayor grado de abstracción, ahí es donde entra Js, pero es un trade-off, se termina perdiendo algo de mantenibilidad y algo del factor LIS, por ejemplo yo programe a Cirrus.js porque realizar la manipulación de cadenas y la flexibilidad que brinda la OOP cosa que hubera si muy muy difícil con las estructuras de código de v7, pero a cambio de eso Cirrus.js cuenta con una suite de specs escritos con Jasmine.js que me ayudan a su etabilidad y mantenibilidad.

asi que cada cosa para lo que es siempre siendo prácticos.