La vuelta del perro

A veces las soluciones sencillas parecieran estar ocultas y sólo vienen a la mente soluciones más complejas, que no siempre funcionan en todos los casos.

Hoy visité el sitio de Lan Chile para ver la cartola con el estado de cuentas (como se muestra en la figura). El año seleccionado por omisión es el 2006 (lógico, corresponde a este año). Sin embargo, al seleccionar el año 2005 y presionar el botón «Ir» no funcionaba.

Formulario web de Lanpass

Al revisar la consola Javascript, me indicó un error, que una variable no existía (form1). Fue allí, cuando encontré esta joyita de programación:

<h1>Estado de cuenta LANPASS</h1>
<form name="form1" action='#'>
<input type="hidden" name="base[mbr_username]" value="123456789">
<strong><input type="hidden" id="year" name="year" value=""></strong>
<script type="text/javascript">
function mygoto(year)
{
<strong>form1.year.value = year;
form1.submit();</strong>
}
</script>
...
<select <strong>name="PeriodoConsulta"</strong> size="1">
<option value='2003' >2003</option>
<option value='2004' >2004</option>
<option value='2005' >2005</option>
<option value='2006' SELECTED>2006</option>
</select>
<input type='button'
<strong>onclick="mygoto(this.form.PeriodoConsulta.options[this.form.PeriodoConsulta.selectedIndex].text)"</strong>
value='Ir' class='boton' name="go">
...

En negrita se encuentran marcadas las partes relevantes. Se define un botón, y en vez de indicarle el tipo submit (no hay otros en toda la página), el programador prefirió dejarlo normal y añadir código cuando el usuario lo accione. Allí comienza la vuelta: define una variable eriodoConsulta en donde se encuentra el año, intenta obtener el valor de una forma rebuscada, y cuando lo tiene llama a una función (mygoto); allí le pasa el valor a otra variable (year) y luego envía el formulario.

Eso es lo que se conoce como «la vuelta del perro».

Seguramente esto lo programaron después del abrazo de año nuevo («déjame, si borracho programo mejor» :-). Antes funcionaba, así que es una característica nueva. Claro que dejó de funcionar solamente en Firefox.

Para el caso ni siquiera se requiere Javascript para definir el año seleccionado, simplemente saber un poco de HTML. Podría ser algo así:

<h1>Estado de cuenta LANPASS</h1>
<form name="form1" action='#'>
<input type="hidden" name="base[mbr_username]" value="123456789" />
...
<select <strong>name="year"</strong>>
<option value='2003' >2003</option>
<option value='2004' >2004</option>
<option value='2005' >2005</option>
<option value='2006' SELECTED>2006</option>
</select>
<input <strong>type='submit'</strong> value='Ir' class='boton' name="go" />
...

Llamé al número de servicio al cliente de Lan, y la respuesta que obtuve fue «pero si aquí me funciona», le indiqué la línea del error y que usaba Firefox; y lo siguiente fue: «seguramente su sistema es muy antiguo».

¿De qué forma le explico? Bueno ya, si a la URL basta añadirle «?year=2005» o el año que quiera y obtengo los datos que requiero.

Mi pronóstico para este año es que de Lan Chile dirán que tienen certificación CMM-I. ¡Oh no! Ya tienen certificación CMM-I (nivel 2).

Ojo, estoy conciente que errores cometemos todos y que nadie nace sabiendo. Pero sirve para:

  • Que las empresas sean grandes, no significa que sus programas son perfectos; hasta en los más sencillos contienen errores.

  • De contraejemplo cuando se quiera enseñar programación.

  • En todas partes se cuecen habas.

Tal vez no lo hubiera escrito, de no ser por la inspiración que me dió la respuesta telefónica.