como evitar el continuo reload en el visor html?


([N3] ereitmann) #1

Hola a todos, alguien sabe o tiene alguna solución para evitar el continuo reload que hace el objeto visor HTML en los formularios? esto ocurre desde la versión 7.15 creo y no se ha solucionado?


([N3] pacosatu) #2

Hola ereitmann.

Velneo tiene un mecanismo de refresco, a veces muy efectivo, pero en la mayoría de las situaciones es un sistema endemoniado que invalida muchos de los diseños que henos hecho en papel y que llevados a la práctica no funcionan bien.

Entre otros tenemos a las Rejillas, Casilleros (sobre todo en Cloud), los Timers y el Visor HTML.

Para el Visor HTML existe la siguiente solución (un poco ñapa pero es lo que hay):

  • Fija el contenido a HTML
  • Usa la siguiente función de la clase VCWebView
    oVisorHTML.setSourceCode(cHTML,cPathBase)
    Siendo cHTML el código HTML que quieras mostrar y cPathBase la ruta base para los paths relativos

De esta forma el Visor HTML se mantiene ‘quietecito’.

Saludos
Paco Satué


([N3] ereitmann) #3

Hola Paco , gracias por responder y perdona si abuso de ti., es que de javasript no se nada, en mi caso el visor html lo estoy utilizando para mostrar un gráfico de hightchart, el visor se alimenta con una variable por lo que en las propiedades el “contenido” es esa variable. y la otra propiedad “Opciones” esta fijada en contenido=texto html… como podría hacer para evitar ese continuo reload?

Gracias


([N3] pacosatu) #4

Hola ereitmann.

No es cuestión de saber JavaScript, que lo puedes aprender en un fin de semana con un buen manual de referencia, ya que solo necesitas un nivel básico de programación funcional.
Lo que sí es imprescindible es conocer a fondo el API de Velneo, aunque sea una labor muy tediosa por la falta desesperante de documentación de calidad.

Tienes que crear un manejador JavaScript en el formulario que contiene el Visor HTML.

  • Deja la propiedad Contenido del Visor en blanco (muy importante) y la propiedad Opciones a Contenido=Texto HTML

El código JavaScript es así de sencillo:


var oForm = theRoot.dataView()   // formulario
var oVisorHTML = oForm.control("CTR_VISOR_HTML")    // Visor HTML
// Fijamos el código HTML del control
oVisorHTML.setSourceCode(theRoot.varToString("CHTML"))

Saludos
Paco Satué


([N3] ereitmann) #5

Gracias Paco y perdona nuevamente, como hago referencia a la variable que tiene el codigo html que alimentaria el visor html? en mi caso la variable local al formulario que contiene al objeto visor html se llama HTML_CAB, seria lo que esta entre comillas en la ultima línea?


([N3] pacosatu) #6

Hola ereitmann.

Exacto,
oVisorHTML.setSourceCode(theRoot.varToString(“HTML_CAB”))

Saludos
Paco Satué


([N3] ereitmann) #7

Gracias Paco, pero evidentemente me faltan algunos conocimientos mas ya que en el contenido de la variable “HTML_CAB” hay concatenaciones de texto, pero también de contenidos de otras variables y variables del sistema que me parece que hay que llamarlos dentro de java script con otra sintaxis (la de api de javascript supongo)

te paso para que veas el contenido de esa variable que da como resultado un grafico:

`"<html>
<head>
<script type=\ctext/javascript\c src=\c" +sysCacheClientPath+ "jquery-1.9.1.min.js\c></script>

<script type=\ctext/javascript\c src=\c" + sysCacheClientPath + “highcharts.js\c></script>
<script type=\ctext/javascript\c src=\c” + sysCacheClientPath + “exporting.js\c></script>
<script type=\ctext/javascript\c src=\c” + sysCacheClientPath +“gray.js\c></script>
<div id=‘container’ style=‘min-width: 650px; height: 550px; margin: 0 auto’></div>
</head>
<script type=‘text/javascript’>
$(function () {
$(’#container’).highcharts({
chart: {
type: ‘line’,
zoomType: ‘xy’
},
title: {
text: ‘Fuerza/Tiempo’
},
xAxis: {
categories: [”+CATEGORIAS+" ]
},
yAxis: {
title: {
text: ‘Fuerza’
}
},
series: [{
name: ‘Kg’,
data: ["+SER+" ]
}]
});
});"+"

	&lt;/script&gt; 
	
&lt;/head&gt; 
&lt;body&gt; 
	
	&lt;!-- 3. Add the container --&gt; 
	&lt;div id=container style=width: 100%; height: 100%; margin: 0 auto&gt;&lt;/div&gt; 
	
			
&lt;/body&gt; 

</html>"


([N3] pacosatu) #8

Hola ereitmann.

La variable HTML_CAB en la expresión theRoot.varToString(“HTML_CAB”) debe contener todo el código HTML para dibujar el gráfico.
Antes has debido componer todo el código HTML en HTML_CAB mediante una fórmula Velneo, es decir, no necesitas para nada el JavaScript.

Saludos
Paco Satué


([N3] ereitmann) #9

Hola Seh, el código he comprobado que funciona, tal cual lo dices, si lo disparo desde un botón que dispare el evento en el formulario previa carga de la variable, funciona perfecto y se pinta el grafico
ahora si forma parte de un evento de interfaz pos inicializado y en la ultima sentencia (luego de alimentar la variable con los datos) pongo interfaz ejecutar manejador de evento (el que dispara todo el codigo javasript) allí no pinta el grafico

gracias


([N3] ereitmann) #10

He comprobado que si al manejador de evento de javasript que hice, si lo llamo desde otro manejador de evento, por ejemplo hice un manejador de evento en velneo cuya única instrucción es “interfaz ejecutar manejador de evento” (el de codigojava script) allí no funciona, pero si solo es llamado desde un boton el evento original de javasript si funciona, sera otra mas de VELNEO?


([N1] vgegeo) #11

Gracias por vuestro aporte.

He solucionado el problema planteado en el hilo Enlazar Velneo con HTML


([N1] hgilmunoz) #12

Buenos días Paco

En su momento implementamos este código para evitar el refresco de los visores HTML, pero hemos actualizado a la versión 21 en un servidor de prueba y nos ha dejado de funcionar.
Haciendo pruebas hemos visto que si en el visor rellenamos en contenido directamente la variable con el HTML calculado, se presenta correctamente pero no se evita el refresco.
Creemos que el problema está relacionado con la sentencia Visor_html.setSourceCode(codigo, “”), ¿habéis detectado algún tipo de incidencia relativo a esta instrucción o algún problema en la ejecución del visor que pueda estar relacionado?

Gracias de antemano y saludos


([N3] ereitmann) #13

por lo pronto tengo terror de instalar la 21, no le tengo confianza aún ya que el cambio de visor altera muchas de las funcionalidades que veniamos realizando con el anterior y hay que empezar nuevamente con prueba y error,


([N3] pacosatu) #14

Hola hgilmunoz.

La solución es sencilla.

Usa la función setSourceCode con los 2 parámetros.
oVisorHTML.setSourceCode(cHTML, “file:///” + sysCacheClientPath)

El Path base del código Html debe estar expecificado usando un esquema válido como file:///

Aunque puede haber otros problemas que parece que están investigando en soporte.

Yo de momento no tengo incidencias en mis aplicaciones con el nueva Visor HTML.
Mira el hilo siguiente.

Saludos
Paco Satué


([N3] ereitmann) #15

Bueno…El diablo nos metio en velneo…pero dios nos mandó a seh (Paco) para compensar…


([N1] hgilmunoz) #16

Con esa modificación funciona perfectamente.

Muchísimas gracias Paco por tu ayuda.