Una de las características que nos ayuda a la hora de escribir código es, sin duda, la función de autocompletado. En la mayoría de editores que utilizo esta función me permite seleccionar métodos, clases o propiedades de forma rápida.

En el caso de los métodos, muchas veces el nombre tiene el mismo prefijo, getters y setters, o por ejemplo:

editAudiencia(audiencia);

y lo quiero cambiar a

editNewAudiencia(audiencia);

lo que tienes que hacer es posicionar el cursor justo al terminar el prefijo ‘edit’ y presionar CTRL+SPACE para ver las opciones. Para mi sorpresa, en Eclipse, al seleccionar el nuevo método me quedó algo así

editNewAudiencia(inicio, fin)Audiencia(audiencia);

cómo podemos observar, Eclipse por default inserta el código en vez de reemplazar el sufijo del método. Para cambiar esto, ve a las preferencias de Eclipse->Java->Editor->Content Assist y selecciona ‘Completion overwrites’

Fuentes:
http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftips%2Fjdt_tips.html

Cuando tienes varios reportes, es buena idea crear una librería para reutilizar elementos en los reportes. Un ejemplo común es cuando necesitamos usar el mismo encabezado y pie de página para los reportes.

BIRT nos permite agregar algunos elementos dinámicos -tales como el número de páginas, la fecha e incluso un valor obtenido mediante código javascript en un DynamicText- El problema es que esto dependerá de cada reporte, así que ¿cómo agregamos elementos dinámicos desde una librería a nuestro reporte?

Pues habrá que crear una “master page” en la librería donde pongamos elementos “DynamicText” en el encabezado y que estos desplieguen el valor de un parámetro. Después podemos modificar el valor del parámetro en cada reporte, y así, tener un título personalizado pero manteniendo el formato.

Si además, queremos obtener el título mediante una consulta a la base de datos. Lo que tenemos que hacer es crear el DataSource a la base de datos y un DataSet con la consulta que obtiene el título, por ejemplo


SELECT DESCRIPCION
FROM OFICINAS
WHERE ID=:OFICINA

Luego, debemos poner el siguiente código en el evento “beforeFactory” de nuestro reporte


//public final static int MODE_GENERATION = 1; //This mode is for generate the report document. Typically used in Report Engine run task
//public final static int MODE_PRESENTATION = 2; //This mode is for present data that saved in report document, without further data manipulation operation. Typically used in report engine render task
//public final static int DIRECT_PRESENTATION = 3;//This mode is to execute the data query without create report document. It is used in report engine runAndRender task.
//public final static int MODE_UPDATE = 4; //This mode is used to update the existing report document with new queries. Typicially used in IV.
importPackage( Packages.org.eclipse.birt.report.model.api );
importPackage(Packages.java.lang);
importPackage(Packages.java.util);
importPackage(Packages.org.eclipse.birt.report.data.adapter.api);
importPackage(Packages.org.eclipse.birt.report.model.api);
importPackage(Packages.org.eclipse.birt.data.engine.api.querydefn);
var myconfig = reportContext.getReportRunnable().getReportEngine().getConfig();
var des = DataRequestSession.newSession(myconfig, new DataSessionContext(3));
var dsrc = reportContext.getDesignHandle().findDataSource("dsrcOficina");
var dset = reportContext.getDesignHandle().findDataSet("dsetOficina");
des.defineDataSource(des.getModelAdaptor().adaptDataSource(dsrc));
des.defineDataSet(des.getModelAdaptor().adaptDataSet(dset));
var paramBinding = new InputParameterBinding("param_1", new ScriptExpression("\""+ params['IDOFICINA'].value +"\"") );
queryDefinition = new QueryDefinition( );
queryDefinition.setDataSetName( "dsetOficina" );
queryDefinition.addInputParamBinding( paramBinding );
queryDefinition.setAutoBinding(true);
var pq = des.prepare( queryDefinition );
var qr = pq.execute( null );
var ri = qr.getResultIterator( );
if ( ri.next( ) )
{
params["Titulo"].value = ri.getString("DESCRIPCION");
}
ri.close( );
qr.close( );
des.shutdown( );

Es importante poner los nombres exactamente igual que en el diseñador.
En nuestro caso, el parámetro “IDOFICINA” es de tipo String, así que lo ingresamos de la siguiente manera


var paramBinding = new InputParameterBinding( "param_1",new ScriptExpression("\""+ params['IDOFICINA'].value +"\"") );

si fuera un Integer tendría que ser de la siguiente manera


var paramBinding = new InputParameterBinding( "param_1",new ScriptExpression(params['IDOFICINA'].value) );

El valor de ScriptExpression debe ser un bloque de javascript válido, cómo si lo ingresaramos en la ventana “ExpressionBuilder” 🙂

Fuentes:
eclipse forums
birt exchange

Si tienes un ListGrid enlazado a un DataSource y quieres actualizar un registro mediante código, lo puedes hacer de la siguiente manera

</pre><p>IButton btnEliminar=new IButton("Eliminar");<br /> btnEliminar.addClickHandler(new ClickHandler() {<br /> <br /> @Override<br /> public void onClick(ClickEvent event) {<br /> final ListGridRecord empleado = grdEmpleados.getSelectedRecord();<br /> if(grdEmpleados.getSelectedRecord()!=null){<br /> SC.ask("Baja", "¿Dar de baja al empleado '"+empleado.getAttribute("nombre")+"' ?", new BooleanCallback() {<br /> <br /> @Override<br /> public void execute(Boolean eliminar) {<br /> if(eliminar){<br /> empleado.setAttribute("status", "BAJA");<br /> grdEmpleados.updateData(empleado);<br /> }<br /> }<br /> });<br /> }<br /> }<br /> });</p><pre><br />

En este ejemplo utilizamos un botón para dar de baja a un empleado, actualizando su propiedad status en vez de eliminar el registro.

Fuentes:

Changing the list grid values on runtime.

Para desarrollar aplicaciones GWT utilizo Eclipse y el plugin de Google. Mi navegador por default es Google Chrome así que lo más natural para mí fue utilizarlo para depurar el código. Pues realmente Chrome es una mala elección para esto, me di cuenta cuando un SelecItem no me mostraba las opciones y la aplicación en general era demasiado lenta. Así que si padeces alguno de estos síntomas, mejor prueba con otro navegador –Firefox 😉 –

Fuentes:
http://forums.smartclient.com/showthread.php?t=8159#aChrome
https://groups.google.com/forum/?fromgroups#!topic/google-web-toolkit/qfVFxoieOXg 

Si necesitas modificar el query de un dataset, en tiempo de ejecución, por cualquier motivo. Puedes utilizar la sección “Property Binding” en el editor o modificar la consulta en el evento “beforeOpen” del DataSet. Recuerda que el código que utilices en BIRT es javascript.

Por ejemplo, podemos utilizar un esquema dinámico de la siguiente forma


var query="SELECT FRECEPCION  FROM @ESQUEMA.DOCUMENTOS WHERE ID = ?";

query.replace(/@ESQUEMA/g,params["Esquema"].value);

El esquema lo recibimos como parámetro. En la función “replace” utilizamos la forma global para que reemplace todas las ocurrencias de “@ESQUEMA”, de lo contrario sólo sustituiría la primera.

Fuentes:
http://vhspiceros.blogspot.mx/2008/12/replace-all-en-javascript.html
http://www.w3schools.com/jsref/jsref_replace.asp

Hay ocasiones en que es necesario buscar en los logs de git para saber cuándo, o quién, hizo algún cambio en el código. Para ello existe el comando git log.

Existen 2 formas comunes para buscar en los logs.

Buscar en los comentarios del commit

$ git log –grep=texto

Buscar en los cambios hechos al código

$ git log -Stexto

Fuentes:
http://stackoverflow.com/questions/1337320/how-to-grep-git-commits-for-a-certain-word 


Tengo un encabezado estándar que uso en la mayoría de reportes, el cual he compartido a través de una librería. El detalle es que el título para cada reporte es diferente, así que en la plantilla coloqué etiquetas cuyo valor depende del parámetro que se les pase. Es común también que el título contenga el período que comprende el reporte. El formato de fecha que comunmente utilizamos es “dd/MM/yyyy” p. ej. 14/06/2011. Para dar este formato a las fechas -que recibo como párametros- utilizo el siguiente código en el evento “initialize” del reporte:

importPackage(Packages.java.text);
sdf = new SimpleDateFormat(“dd/MM/yyyy”);
params[“Titulo”]=”Reporte del “+sdf.format(params[“FechaInicio”])+” al “+sdf.format(params[“FechaFin”]);

Fuentes:
Eclipse Forums