16 de mayo de 2014

Limpiar el dojogrid sin actualizar livevariable/servicevariable

Hola les comparto una forma simple de limpiar el dojogrid sin la necesidad de actualizar livevariable/servicevariable y asi no ahorramos hacer un query a nuestra db.

Aqui el codigo

var emptyCells = { items: "" };//creamos un objeto con items vacios 
var emptyStore = new dojo.data.ItemFileWriteStore({data: emptyCells}); this.myGridname.dojoObj.setStore(emptyStore);//aplicamos solo sobre el objeto dojo del grid

Espero que les sirva.

Fuente: http://jadendreamer.wordpress.com/2011/03/07/dojo-tutorial-clear-all-data-from-the-grid/

19 de febrero de 2014

DojoGantt widget en WaveMaker

Hola les quería compartir este widget que estoy utilizando el dojo gantt .es ideal para gestionar proyectos, tareas y recursos en un marco de tiempo.Aquí les muestro lo que se genera el diagrama gantt cargado desde la base de datos.

Este widget esta en la librería de dojo desde la version 1.6 y para la integración con wavemaker no es necesario descargar nada externo.
Aquí les muestro la estructura básica en json.

{
"identifier":"id",
"items":[{
   "id":1,
  "name":"Development Project",
  "startdate":"2012-2-11",
  "tasks":[]
}]
}

y la definicion necesario para crear un widget..en este case necesita un elemento para cargar con id: ganttid

 var ganttChart = new dojox.gantt.GanttChart({
    readOnly: false,
    dataFilePath: "some_url", 
    withResource: false
  }, "ganttid");
  
  ganttChart.init();  
  ganttChart.loadJSONData();
  
});

luego obviamente cargarlo en un widget contenedor de html
 <div id="ganttid">
      </div>

Aqui les muestro la aplicacion corriendo


Bueno luego mejoramos un poco al widget..

1 de septiembre de 2012

Input Mask Editor en WaveMaker

Buscando un buen Mask plugin para integrar a un proyecto que estaba trabajando pude unir este de jquery
http://digitalbush.com/projects/masked-input-plugin/#demo a un editor de waveker.. aqui les dejo el proyecto de prueba...



Lo primero que hay que hacer es buscar el editor id#..se lo puede hacer con un inspector de codigo como firebug
y luego colocar los enlaces en index.html page de los javascripts que vamos a necesitar 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="resources/javascript/jquery.maskedinput.js"></script>
luego en la funcion "start" poner el masked pattern que necesites
dojo.declare("Main", wm.Page, {
    start: function() {
        try {
            //here we set the mask to current texteditor
            jQuery(function($) {
                $("#dijit_form_TextBox_0").mask("99/99/9999");
            });
        } catch (e) {
            app.toastError(this.name + ".start() Failed: " + e.toString());
        }
    },
    _end: 0
});

js file: http://cloud.github.com/downloads/digitalBush/jquery.maskedinput/jquery.maskedinput-1.3.min.js
Descargar desde aqui el proyecto de ejemplo: www.mavirroco.com/InputMask.1.Alpha.zip

28 de agosto de 2012

Integrar JPEGCAM con WaveMaker para tus fotos en tu web

Hace un tiempo realize una pequeña integracion con JPEGCAM para WaveMaker para sacar fotos desde tu webcam y guardarlas en el servidor. aqui les paso un breve tutorial para poder resolverlo.



Tutorial aqui http://mavirroco.com/DocsJPEGCAMWAVEMAKER.pdf

OFFTOPIC: Scriptlet para numeros en literal en jasperreports

Queria compartir este scriptlet, una clase java para crear funciones especificas en jasper reports, que estaba usando para un reporte en para mostrar los numeros en literal, muy utilizados en facturas.


Bueno no es un post directamente relaciondo a WaveMaker pero quize compartir para que puedan incluirlo en sus aplicaciones.

Aqui la clase en java.
import java.text.DecimalFormat; public class EnglishNumberToWords extends JRDefaultScriptlet{ private static final String[] tensNames = { "", " ten", " twenty", " thirty", " forty", " fifty", " sixty", " seventy", " eighty", " ninety" }; private static final String[] numNames = { "", " one", " two", " three", " four", " five", " six", " seven", " eight", " nine", " ten", " eleven", " twelve", " thirteen", " fourteen", " fifteen", " sixteen", " seventeen", " eighteen", " nineteen" }; private static String convertLessThanOneThousand(int number) { String soFar; if (number % 100 < 20){ soFar = numNames[number % 100]; number /= 100; } else { soFar = numNames[number % 10]; number /= 10; soFar = tensNames[number % 10] + soFar; number /= 10; } if (number == 0) return soFar; return numNames[number] + " hundred" + soFar; } public static String convert(long number) { // 0 to 999 999 999 999 if (number == 0) { return "zero"; } String snumber = Long.toString(number); // pad with "0" String mask = "000000000000"; DecimalFormat df = new DecimalFormat(mask); snumber = df.format(number); // XXXnnnnnnnnn int billions = Integer.parseInt(snumber.substring(0,3)); // nnnXXXnnnnnn int millions = Integer.parseInt(snumber.substring(3,6)); // nnnnnnXXXnnn int hundredThousands = Integer.parseInt(snumber.substring(6,9)); // nnnnnnnnnXXX int thousands = Integer.parseInt(snumber.substring(9,12)); String tradBillions; switch (billions) { case 0: tradBillions = ""; break; case 1 : tradBillions = convertLessThanOneThousand(billions) + " billion "; break; default : tradBillions = convertLessThanOneThousand(billions) + " billion "; } String result = tradBillions; String tradMillions; switch (millions) { case 0: tradMillions = ""; break; case 1 : tradMillions = convertLessThanOneThousand(millions) + " million "; break; default : tradMillions = convertLessThanOneThousand(millions) + " million "; } result = result + tradMillions; String tradHundredThousands; switch (hundredThousands) { case 0: tradHundredThousands = ""; break; case 1 : tradHundredThousands = "one thousand "; break; default : tradHundredThousands = convertLessThanOneThousand(hundredThousands) + " thousand "; } result = result + tradHundredThousands; String tradThousand; tradThousand = convertLessThanOneThousand(thousands); result = result + tradThousand; // remove extra spaces! return result.replaceAll("^\\s+", "").replaceAll("\\b\\s{2,}\\b", " "); } }
y desde el ireport podemos usar este scriptlet.




Espero que les sirva.

21 de julio de 2012

Configurando el Log4j para distribuir la salida del server tomcat


Quiero compartir algunas configuraciones que realize hace un tiempo en mi trabajo cuando tuve problemas con mi log file del tomcat. Si tienes muchos proyectos y quieres distribuir las salidas del server de esos proyecto esto te
puede servir.









En este ejemplo voy a usar la clase DailyRollingFileAppender del log4j que trae mi proyecto wavemaker que va a guardar la salida en un archivo nuevo y por fechas ya no en el tipico wm.log en wavemaker.
Para ello editamos el archivos NOMBREDELPROYECT/src/log4j.properties

log4j.rootLogger=warn, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m> (%x) %n
y cambiar por
log4j.rootLogger=warn, stdout

log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m> (%x) %n
log4j.appender.stdout.file=/yourfolder/yournameoflogfile.log

Espero que les sirva..

10 de abril de 2012

No mas Related Editors in readonly mode....bienvenido evento onBeforeServiceCall

En la ultima version de WaveMaker 6.4.5GA al fin pude decir adios a los tediosos Related editors para colocar mis variables ocultas y enviar como datos estaticos, bueno existian otras formas pero no me convencian.. pero ahora con el evento del liveform  onBeforeServiceCall puedo hacerlo facilmente y ahorrarme de generar mas editors para configurar mis claves foraneas. esto me facilita escribir una sola vez el codigo en vez de hacerlo al insertar o al modificar.

Aqui un ejemplo como puede indicar que campos tiene que llenar con JSON para su clave foranea.


liveForm1BeforeServiceCall: function(inSender, inOperation, inData) {
 try {
       
 inData.tlkpersonnes = {gid:this.getUserId.data.dataValue};

 } catch(e) {
 console.error('ERROR IN liveForm1BeforeServiceCall: ' + e);
 }
  },



Mis cosas

Powered By Blogger