Como usar Scriptlets con iReport 3.5.3 y Netbeans

No estoy acostumbrado a escribír post como este, que tengan que ver con desarrollo y todo mi rollo de informática, pero esto me costo un poco ya que no hay mucha información sobre este rollo en internet, que explicaran paso a paso como hacerlo y por eso decidí dedicarle un post a esto, sé que a los que entran por aquí regularmente no les va a interesar, pido disculpas de una vez 🙂

Scriptlets

Se le llama así al uso de metodos, escritos en java, en un reporte hecho en iReport. Por ejemplo en lo que estoy haciendo era necesario jalar de una Base de Datos un valor entero, pero en el mismo reporte tenía que pasar a letras dicho número, esto es fácil hacerlo en código, pero no por medio de SQL, entonces lo más fácil (según yo) era usar una función en java, mandar como parametro mi número y que la función retornara el número en letras.

La Clase a ser usada como Scriptlet

Para que iReport reconozca como scriptlet una clase, esta clase debe de heredar (extend) de JRDefaultScriptlet, en manuales dice que se puede heredar de JRAbstractScriptlet para poder implementar otros métodos que se ejecutaran en distintos puntos del reporte. Pero a mi lo que me interesaba era ejecutar este método cada vez que se imprimia un registro.

Entonces mi clase quedaba definida así:

package presentacion.reportes.jasper;

import net.sf.jasperreports.engine.JRAbstractScriptlet;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;

public class NumerosALetrasScriptlet extends JRDefaultScriptlet {
//..... aqui va todo el código de pasar un número a letras
        //este sera el metodo que llamaré desde el reporte
   public String convertirLetras(int numero) throws JRScriptletException{
               num_letras = centena(numero);
              return num_letras;
    }
}

Entonces el paquete de mi clase es:  presentacion.reportes.jasper el archivo se llama NumerosALetrasScriptlet.java

HUBICACION DE LOS ARCHIVOS:

Como estamos trabajando en java, hay una carpeta destinada a los archivos .java y otra para los .class en mi proyecto están así:

Los .java

C:\….\Proyectos Netbeans\MiProyecto\src\presentacion\reportes\jasper

Los .class

C:\…..\Proyectos Netbeans\MiProyecto\build\classes\presentacion\reportes\jasper

El Archivo .jrxml

Este que es el archivo donde hacemos nuestro reporte,  los tengo hubicados donde están los .class (aunque sí funciona que este a la par de los .java) es decir en:

C:\…..\Proyectos Netbeans\MiProyecto\build\classes\presentacion\reportes\jasper

EL SCRIPTLET EN IREPORT

Propiedades del Reporte

Propiedades del Reporte

Clic derecho sobre el nombre del reporte ->propiedades, y ahi buscamos “Scriptlet Class” y escribimos el paquete junto con el nombre de la clase. En mi caso es presentacion.reportes.jasper.NumerosALetrasScriptlet

IMPORTS

En la parte de “imports” importe el paquete donde esta mi clase:

presentacion.reportes.jasper.*

propiedades->import|

propiedades->import

CLASSPATH

Para agregar carpetas al classpath de iReport lo podemos hacer en “Herramientas -> Opciones” y buscamos la pestaña “classpath”

Aquí yo agregué 3,  no estoy seguro de si son necesarios esas tres direcciones que puse, pero así me funcionó y así lo voy a dejar por el momento 😛

1era:

el path donde estan las clases (todas, no solo las de presentacion.reportes.jasper)

C:\…..\Proyectos Netbeans\MiProyecto\build\classes

2da:

El Path donde estan los archivos .java (donde esta el scriptlet)

C:\….\Proyectos Netbeans\MiProyecto\src\presentacion\reportes\jasper

3era:

El Path donde esetan los archivos .class

C:\…..\Proyectos Netbeans\MiProyecto\build\classes\presentacion\reportes\jasper

Estas direcciones son las mismas que había puesto más arriba, pero igual las vuelvo a poner.

USANDO LA FUNCION EN EL REPORTE

Luego de ya tener configurado todo lo anterior, hay que usar el método que querramos de la clase. En mi caso como dije mi metodo se llama

convertirLetras(int numero)

Recibe como parametro un entero.

En la paleta de componentes jalamos un “Text Field” y ya que este en el reporte le damos clic derecho -> Edit Expresion

y ahí para usar el método escribimos

$P{REPORT_SCRIPTLET}.convertirLetras($F{nota}.intValue())

uso del scriptlet

uso del scriptlet

En esta expresion

el parametro REPORT_SCRIPLET es un parametro que por default ya tiene iReport para manejar los scriplets, incluso lo podemos buscar en la ventana de “Report Inspector” y ver que su valor cambia dependiendo de lo que ingresemos en la parte de “Scriplet class” en las opciones del reporte.

A esto

$P{REPORT_SCRIPTLET}

le agregamos el nombre del método “convertirLetras” y le mandamos como parametro nuestro entero para que retorne el valor en letras. En mi caso mi campo traido de la BD se llama “nota” pero es un BigInt … entonces como en mi metodo recibo un “int”  por cualquier cosa jale su valor entero. por eso esta como $F{nota}.intValue()

$P{REPORT_SCRIPTLET}.convertirLetras($F{nota}.intValue())

Esto fue lo que hice para que me funcionara el scriplet, tuve muchos problemas al principio porque en ningún lugar encontraba como hacer referencia a mi clase y en donde tenían que estar hubicados los archivos tanto los .class como mi .jrxml  En un principio tenia mis .jrxml junto a los archivos .java y no a los .class

Otra cosa, por el momento solo he probado correr esto desde el iReports y no desde una aplicación, por lo que podría darme otros problemas, pero al menos ya estoy seguro de varias cosas que en un principio tuve que estar “adivinando” y probando sin saber si lo que estaba haciendo estaba bien, y al final no se mira tan complicado, lo que me frego fue la hubicación de los archivos creo yo.  Gracias a Dios me salio.

Cerré Ingenieria en Ciencias y Sistemas!

Estoy tan agradecido con Dios, con mis padres porque fue también gracias a ellos que pude cerrar mi carrera, esa que tantos desvelos me dió, tantas emociones, muchas veces  enojo, descepción, tristesa, impotencia, pero también me dió muchas alegrías, satisfacciónes, logros, felicidad, me dió de todo y ahora luego de ya varios días de saber que oficialmente he cerrado la carrera me da una gran felicidad que quiero compartír en este humilde blog porque también les debo las grácias a muchos de ustedes lectores por esos ánimos que me dieron desde un inicio cuando contaba que podía cerrar, en esos momentos no estaba seguro de poder lograrlo, pero tenía fe en que si fuera posible, en esos momentos sentía que el semestre iba de lo más tranquilo, sin saber que llegarían un par de semanas en las que me sentí perdido, sentía que era demasiado lo que tenía que hacer, y más ese fín de semana en el que se me acumularon para un sábado dos exámenes parciales, dos exámenes finales y dos proyectos, nunca en la carrera había tenido tanta carga para un sólo día de vários cursos, creo firmemente que ese día solo pude salir adelante con ayuda de Dios, yo creo que él me dio el coraje y determinación para no habandonar la lucha ese día.

Ahora que leo esos post me da nostalgia, los leo y me recuerda todas esas sensaciones que sentía, esa inseguridad pero también emoción saber que lo que había querido por tanto tiempo estaba tan cerca, y ahora que lo he logrado todavía me es raro cuando alguien me pregunta si estoy estudiando les digo “no, ya no estoy estudiando, porque ya cerré”, yo sé que es algo que muchos han logrado, pero fue un éxito que tuve que realmente me da mucha satisfacción y orgullo, realmente amo éste éxito, siento que es el más grande que hé tenido y le doy gracias a Dios por eso, talvez se note que muchas veces digo que estoy agradecido con Dios, pero esque realmente habían momentos cuando se siente que no van a salir bien las cosas y luego se arreglaban sin si quiera yo pensarlo, tuve más de una vez el pensamiento “alagran! y yo que sentí tan cerca el cierre” . Como luego de un examen final que tuve en escuela de vacaciones de un curso que ya había llevado en semestre, pero no tenía notas finales, entonces me metí para dis que asegurar el curso, pero en el examen final al terminar yo sabía con total seguridad que había perdido, fue un 30 de Diciembre ese examen, pasé mal el año nuevo, sin ganas de hacer nada, triste porque pensaba que en semestre también había perdido aunque no tenía notas de nada, pero luego en  enero me daban la noticia que había ganado con 61 en semestre, despues de unos cuantos días me daban la otra nota de vacaciones y en efecto había perdido pero ya no importaba, con esa nota yo ya sabía que había cerrado, aunque me faltara que me confirmaran notas finales de otros cursos.

Fue un 12 de febrero (sí ya casi un mes, este post se atrazó más de lo que hubiera querido) que me entregaron la nota final de mi último curso, ya pude gritar a los 4 vientos que había cerrado mi carrera, fue un día muy emotivo y grandioso para mí, sentía que me quitaba un gran peso de encima pero por otro lado también había alcanzado mi meta, se había acabado ya los cursos de la U, ya no más, eso era todo.

Actualmente ya estoy con lo del EPS (ejercicio profesional supervisado) el cual es de 6 meses, luego de cumplirlo y terminar con todos los trámites y toda la cosa me podría graduar, si Dios así lo quiere sería en Noviembre de este año, ni yo me lo creo todavía, pero esperemos que así sea.

Por último dejo este vídeo que fue grabado el día del piletazo donde celebrabamos que ibamos a cerrar, de todos los que estamos ahí no se cuantos en realidad lo lograron porque como mencioné esa vez muchos (talvez todos) estabamos ahí sin saber sí ibamos a cerrar o no, ahí si que a pura fé fue que estuvimos ahí ese día celebrando algo todavía inexistente.

La culpa de los catedráticos

No muchos saben que actualmente estoy siendo auxiliar de un par de cursos de Intoducción a la Programación, como parte de mis practicas finales, pero de pura casualidad estoy dando el mismo laboratorio para el curso por un lado a estudiantes de Ing. En Sistemas, este curso es del tercer semestre, y por otro lado estoy dando el mismo laboratorio para esa clase pero a estudiantes de Ing. en Mecanica Eléctrica y es un curso que pueden llevar desde el segundo semestre si no estoy mal, la diferencia es bastante en cuanto a los contenidos que se dan, a los primeros se les enseña a diseñar y POO (programación orientada a objetos)  y a los segudos solo C++ y pura programación modular y pues lo relativamente sencillo.

Pero eso no es lo que me hace sorprenderme en cuanto a la diferencia, porque obviamente si unos estan estudiando Sistemas se les debe de dar más contenido. Yo entiendo que cada quien tiene su área de estudio, y las costumbres entre los estudiantes también debe de ser bien diferente también. Pero me sorprendio darme cuenta que varios estudiantes de eléctrica ni siquiera tenian correo electrónico, o ni siquiera tienen una costumbre de tocar una computadora al menos una vez a la semana, yo no se si en este post me voy a leer como culero o algo así, sinceramente no es mi intención, pero si me sorprende y me preocupó que entre estudiantes universitarios, preparandose para competir en un mundo bien pisado, con tecnologías cambiantes, haya una brecha digítal bien marcada, donde hablarles sobre hotmail, google, yahoo, blogs etc, todavía sea algo que no se le dá mucha importancia, no es escencial para avanzar en sus clases, como digo no son todos, pero el hecho de que hayan algunos si es para ponerse a pensar; mencione anteriormente que es un curso del segundo semestre, y se puede pensar que como a penas acaba de entrar a la U no se les puede exigir eso, pero yo pienso que ya estamos en el 2008 (y finalizandolo), y pues personas que tienen a su alcance todos los recursos para usar tecnologías para prepararse mejor no las están usando, puedo mencionar que ahí dentro del edificio de la facultad hay un internet donde dan 5 horas de internet grátis mensualmente, talvez no sea tanto, pero es algo.

La semana pasada dejé una tarea, la subí domingo al grupo que manejamos para publicar cosas y para responder dudas, yo les había avisado que estuvieran pilas porque no pasaba la semana sin que les subiera el enunciado de la tarea, llegó jueves, y les dije “como van con la tarea?”, la mara se me queda viendo como que estoy loco, un chavo me dijo que no sabía de la tarea, yo le pregunto que porque no sabe si desde el domingo había dejado esa onda, y me dijo “pues porque no he revisado mi correo”. 5 días sin revisar correo, personalmente no puedo dejar pasar un día sin revisarlo, incluso cuando no tenía internet, también día a día iba a revisar el pinche correo a un café internet por aquello de que dejaran algo mis auxiliares, en cambio ellos no, y no es de que me la lleve de mamón o algo así, pero me acostumbre a las exigencias de mis auxiliares, si no me doy cuenta y nadie me avisa de tareas, el que pisa solito soy yo.

Entonces, yo creo que en parte es culpa de los catedráticos y auxiliares de estos chavos, que no les exigen desenvolverse usando tecnologías nuevas, me han contado algunos estudiantes que hay clases donde las tareas las tienen que entregar impresas, a mano, y yo creo que entre más hojas escritas a mano, mayor es el punteo en el trabajo, pela el contenido y la calidad, que mediocridad pienso yo. Son profesores ya dinosaurios que se quedaron en su mismo rollo, de hace añales y de ahí no pasaron, y ahora les están enseñando a sus alumnos esas mismas costumbres, y solo los están perjudicando. No sé muy bien porque no entregar por correo los trabajos, sino que hay que gastar un montón en papel, que al final, la persona que califica tira a la basura, e incluso si se devolvieran los trabajos, también nosotros como estudiantes lo tiramos a la basura.

Ya sé que no soy el indicado para estar criticando cosas así, de otras carreras, que posiblemente me debería enfocar en lo que pasa en mi área, pero por otro lado yo soy el que esta a cargo de darles contenido a estos chavos, y si no voy a poderles bien los contenidos o no puedo lograr que avancen por cosas que son culpa de demás gente, pues si me importa. Ojala cambiaran un poco las cosas, para que se saliera mejor preparado de la U.

proyecto version final (si pues!)

mis carpetas

mis carpetas (click para agrandar)

Luego de andar perdiendo el tiempo por dosisdiarias.com me encontre con esta imagen, y pensé “demasiado buena para no compartirla”, y además escribír una anecdota con la que me puedo imaginar muchas personas se han de identificar, sobre todo si son de sistemas 😉 .

Resulta que ya hace unos cuantos años, nos dejaron un proyecto, pero el auxiliar “buena onda” nos dice que hagamos el proyecto entre toda la clase!, eramos unos 15 mas o menos, de primero lo que pensé fue “a que de ahuevo”, (primer error) , entonces como había que tener a alguien que coordinara al grupo, nunca falta el cuate que menos sabe sobre esto y por desgracia se autoproclama “lider!” nosotros también de mulas que lo aceptamos, (segundo error), … pensandolo bien desde ahí estuvo destinado el proyecto a fracasar; se repartieron las partes del proyecto entre subgrupos y cada quien que hechara punta por su lado; todos le preguntaban al ‘lider’:

  • “vos mira y esta parte como se integra con la otra”
  • “ah no se vos, esa es tu parte, la tenes que ver vos”  …….. :S

Para no hacer largo el cuento, resulto que un día antes de la entrega del proyecto todos tenian hechas sus partes, funcionaban a la perfección, siempre y cuando estuviera todo separado, ….. nos llevo tanto la chingada querer unir todo, que resulto algo como lo del dibujo, pijasal tras pijasal de versiones del proyecto, carpetas tras carpetas con diversos nombre, al final nadie sabia que version del proyecto se estaba modificando, me di cuenta horrorizado como en el editor modificaban y modificaban un proyecto, pero a la hora de correrlo no hacia para nada lo que se programaba, todos empezamos a pensar que las malditas maquinas se nos estaban rebelando en el peor momento, alguien decia, “nohombre copia lo que estas haciendo en otra carpeta, y modifica esta otra…. y uní lo que estaba en la otra en esta … y ” bla bla bla, otro más sabio … “empeza a debuguear” jajajaja , como a la hora , oh!! sorpresa, nos dimos cuenta que se estuvo perdiendo tiempo modificando un proyecto, pero el proyecto que siempre se corria, era otro, el cual era alguno que estaba en alguna carpeta de las mil que teníamos!!! … PUUTAAAAAA…..

Llego un momento como a las 2 o 3 de la mañana (entregabamos a las 7 am ) cuando un compañero fue a despertar a otro, “vos levantate, esque acaba de pasar algo, que mejor ni te digo jajaja” (por sobre todo no había que perder el buen humor), lo que había pasado es que lo que se llevaba avanzado del proyecto dejo de funcionar, alguien modifico algo que hizo que se petateara el proyecto, no servía nada de nada!! … esa sensación de impotencia no se la deseo a nadie, esque en serio, de ver tantas versiones, y que no funcionara ninguna!!… cómo decidir por donde empezar, cómo saber cual de todas las versiones funcionaba más que otra, ni modo que empezar a revisar carpeta por carpeta, … en esos momentos también no sé como es que el mendigo reloj no camina, más bien vuela el desgraciado. ah! y adivinen quien estaba durmiendo … nuestro super lider.

No podiamos creer que un proyecto que se había dejado para todo el salon no iba a funcionar, estabamos seguros que “entre más personas, mejor se trabaja” … aja … vaya ilusos; llegamos a la U seguros de que ibamos a perder todos,  o por lo menos la mayoría, en eso llamamos al auxiliar, y nos dijo que no nos iba a poder calificar porque tenía que salir de viaje a El Salvador; nos calificamos a los 2 días, y al final sacamos 70 en el proyecto y eso que se porto buena onda.

Desde ese entonces me gusta trabajar solo ……. no, no es cierto, lo que aprendí fue a tratar de ser más ordenado y con una sola versión, si se chinga esa, ya se que con esa tengo que parir hasta arreglarlo xD

Feliz día Programadores!

Escribo este por algo rápido porque tengo que ir a programar porque tengo muchas cosas que hacer el día de hoy, pero quería celebrar el día del programador, porque hoy es el día 11111111 (256) del año. Se me hace raro no haber escrito un post el año pasado para esta fecha, no me acuerdo porque no lo hice, pero hoy si me tomo este tiempesito para escribir algo sobre este día.

Ser programador no es algo de lo que uno pueda decir que es un trabajo ideal, no es algo de lo que una persona “normal” pueda disfrutar, tampoco uno se va a volver millonario por programar, tampoco se va a tener gran vida social, al contrario, cuando uno programa al parecer uno desaparece del mundo, y el mundo desaparece para uno, y esto que escribo no es que sea una muestra de mala poesía, para nada, simplemente a uno se le olvida que hay muchas cosas afuera del cuarto de uno, que hay vida, que hay sol!! (o luna, la verdad a veces ni uno sabe si ya es de dia o de noche). Pero entonces porque lo hacemos? porque simplemente nos gusta, disfrutamos pensar como resolver un problema, disfrutamos cuando creamos un nuevo archivo .java (o la extención que prefirás 😀 ) y esta la página en blanco, y sentímos que es como un lienzo en blanco donde podremos empezar pintar y plasmar todo nuestro arte (que engazado va?), empezamos a pensar en polimorfismo, en herencia, en las interfaces, clases abstractas, y tanta cosa más haya, con tal de que quede chilero lo que estamos programando!! …. para que luego cuando ya terminemos, y luego de que nos haya llevado la chingada alguien lo vea, y nos diga “y que más hace??”, …… sublime

Celebro el día del programador, no porque a eso me vaya a dedicar toda mi vida, tampoco quiero decir que nunca lo vuelva a hacer, sino porque es una etapa por la que uno pasa para alcanzar otras metas, porque ser programador es un complemento para todo lo que más se abre delante de uno, pero ante todo creo yo, porque programar fue algo que supere mientras me encontraba en la U.

Y para quien se identifique con este día: System.out.println("FELIZ DÍA DEL PROGRAMADOR!!");

FAQ para estudiantes de Ciencias y Sistemas

Recientemente se creo un foro para los estudiantes de la Escuela de Ciencias y Sistemas de la Facultad de Ingeniería de la USAC. Esta iniciativa fue tomada por el auxiliar Gabriel Cu Dias quien fue apoyado por otros auxiliares de dicha escuela, el objetivo es ayudar a los estudiantes que tengan dudas con los cursos que estén llevando y que esto sea como una retroalimentación entre ellos (nosotros) mismos como estudiantes, todavía no están los foros para todas las clases de la escuela, solo para algunas, pero espero que poco a poco se vayan agregando.

Se me hace una idea muy buena, en especial para esta carrera que no deja de ser muy difícil y que se mantiene en constante cambio, esperemos que esto nos ayude a todos, a resolver dudas que en muchos casos la llegan a tener muchos estudiantes y que antes uno se tenía que esperar a que hubiera otro día de laboratorio o a escribirle al auxiliar y esperar a que él nos conteste (y la respuesta no era para todos los alumnos sino solo para quien la hacía), a diferencia de ahora que los estudiantes por medio de este foro nos podremos contestar. Pero ahí viene otro punto, será que los estudiantes serán más abiertos a compartir sus conocimientos con los demás? en base a mi experiencia la mayoría son muy celosos en cuanto a sus conocimientos, a muchos no les gusta compartirlos y si dicen algo medio lo dicen, pero yo los entiendo perfectamente porque a mi también me ha pasado, pero por supuesto no con toda la mara, solo con los que son bien pero bien peles y quieren que uno les resuelva el clavo, son momentos en los que me digo “puchica, si a mi me costo días de desvelo y ponerme como la chingada con la compu, estar investigando, ¿porque a este que ha dormido rico, se la pasa viendo tele, jugando, le tengo que hacer fácil la vida?, no es justo”, no es que uno tenga todas las respuestas (sino no estaría estudiando), pero también que se esfuercen algo o no?, ahora con los cuates que se mira que comen mierda igual que uno partiéndose la cabeza, y todo el rollo, a huevos si yo tuve la fortuna de resolverlo, ya haya sido porque le atine más o de pura guasa lo resolví, obvio, nos ayudamos; pero bueno….. si sé la respuesta a alguna pregunta la trataré de contestar 😛 , aunque lo que yo más creo es que voy a tener más dudas que respuestas jajaja.

Ya me salí del tema, retomándolo, ojala que tome vuelo este foro, que haya un cambio, que no se vaya a quedar como tanto proyecto bueno que se empieza y ya no se terminan o que no le dan apoyo, y por ultimo que los estudiantes lo sepamos aprovechar que eso es lo más importante.

Codigo del Kernel del Windows Vista

#include uac.h
int main() {
uac_alert(”You are attempting to initialize variables. Cancel or allow?”);
int i;
uac_alert(”You are attempting to enter a loop. Cancel or allow?”);
for (i = 0; i 100; i++) {
uac_alert (”You are attempting to iterate a loop. Cancel or allow?”);
i++;
}
uac_alert(”You are attempting to exit program. Cancel or allow?”);
return 0;
}

jajaja, visto en kbglob