El error...duplicate key violates unique constraint....en la BD PostgreSQL se puede manejar con el evento onError del liveForm...para que se informa al usuario lo que esta pasando durante el proceso. Aqui les pongo un ejemplo de este proceso.
liveForm1Error: function(inSender, inError) {
//PARA CONTROLAR QUE NO SE REPITA
if(inError.toString().split("Error: ERROR: duplicate key violates unique constraint").length==2){
window.alert("La especialidad ya existe!!! \n Por favor Ingrese nuevos datos.");
}
}
14 de noviembre de 2008
31 de octubre de 2008
Añadir por defecto en el lookup editor
Hola les comento que pude lograr añadir un objecto... en este caso de tipo Persona a un lookup editor en el liveForm ligado a un liveView o sea un liveForm con lookup relaciones......
simplemente en el evento begin insert se coloca la relacion:
liveForm1BeginInsert: function(inSender) {
this.personaLookupEditor1.setValue("dataValue",this.serviceVariablePersona.getData());
},
this.serviceVariablePersona.getData() es un service call de tipo Personas
ademas se tiene que poner disabled al lookup editor personaLookupEditor1..nada mas
y por lo tanto sin configurar nada mas este se pone por defecto
simplemente en el evento begin insert se coloca la relacion:
liveForm1BeginInsert: function(inSender) {
this.personaLookupEditor1.setValue("dataValue",this.serviceVariablePersona.getData());
},
this.serviceVariablePersona.getData() es un service call de tipo Personas
ademas se tiene que poner disabled al lookup editor personaLookupEditor1..nada mas
y por lo tanto sin configurar nada mas este se pone por defecto
9 de septiembre de 2008
Hacer Nuevo item desde el related panel
Este proyecto hecho en PostgreSQL muestro como hacer un insert desde el related panel... por medio de un dialogo.
Si seleccionamos la opcion "nuevo item" en el related editor(un select editor cargado con informacion relacional) . podemos observar que se abre un dialogo para poder llenar nuestra informacion que nos falta en esta lista principal de items.
Esto es lo que basicamente realiza la mini aplicacion.
Para una mejor comprensio explicare algunos puntos no comunes que tiene este aplicacion.
!) insertar en la tabla una fila en el primer registro O en el id y "Nuevo NombreEntidad" en Nombre
por ejemplo
id_categoria | nombre |
=================
0 | Nueva Categoria
1 | aaaaa
2 | bbbbb
3 | ccccc
...
2) En la pagina que vas a aplicar estos propiedades
Esto es para asociar el evento onclick con el dialogo
dojo.declare("PageProducts", wm.Page, {
start: function() {
this.connect(app.pageDialog.domNode,"click", this, "click");
},
click: function(e) {
.....
},
_end: 0
});
esto es para filtrar el evento si estas clickeando en el boton Ok o si estas cerrando el dialogo => e.target.id == "app_pageDialog"
pageDialog
click: function(e) {
if(e.target.id == "app_pageDialog"){
....
}
},
esto es para actualizar el nuevo valor en el related editor: this.categoryLookupEditor1.update();
cortersia de Ed Callahan...the ingeniero WM ..
click: function(e) {
if(e.target.id == "app_pageDialog"){
this.categoryLookupEditor1.update();
}
}
Nada mas espero que pueda ser ayuda :)
Fuentes:
http://dev.wavemaker.com/forums/files/NewItemByDialog.zip
http://dev.wavemaker.com/forums/files/newitem.sql_.txt
http://dev.wavemaker.com/forums/files/screenshots.zip
5 de septiembre de 2008
Master Detail V2 en WM4
1)Importar la base de datos "master_detai_db"
2)Crear liveViews para el master y el detail en LiveView panel
- masterView -> seleccionar todos los checkboxes y guardar
- detailView -> seleccionar todos los checkboxes y guardar
3)En el designer
- cambiar en layoutBox la propiedad "box" : de Top_to_Botton a Left_to_Right
- en el palette añadir 2 templates "SearchListDetail" y aplicar flex en los 2
4)Crear variables
Crear 1 liveVariable para el master ->liveSource : masterView y quitarle el seleccionado a la propiedad autoUpdate
Crear 1 liveVariable para el detail ->liveSource : detailView y quitarle el seleccionado a la propiedad autoUpdate
Crear 1 variable para el actual master ->type : Master
5) Enlazar(Bind)..... master y detail con los widgets
Para el master:
- Bind dataGrid1 con el liveVariable1
- Bind liveVariable1 con el dataGrid1.selectedItem
Para el:
- Bind dataGrid2 con el liveVariable2
- Bind liveVariable2 con el dataGrid2.selectedItem
Para el actual_master:
- Bind variable1 -> dataSet -> idMaster con el liveForm1.dataOutput.idMaster
6) Filtrar el liveVariable2 para mostrar los datos del detail
- Bind detail -> master -> idMaster con el liveForm1.dataOutput.idMaster
- En el liveForm2 -> event -> OnSuccess -> liveVariable2
- En el dataGrid1 -> event -> OnSelected -> liveVariable2
7) Seleccionar el widget liveForm2 para poner el actual_master en el related panel
- Seleccionar el widget masterSalesRelatedEditor1 y cambiar la propiedad "editingMode" : de lookup a readonly
- Crear un evento en BeginInsert con javascript y colocar:
liveForm2BeginInsert: function(inSender) {
this.masterSalesRelatedEditor1.setDataSet(this.variable1);
},
8) En la funcion inicial de la pagina poner:
start: function() {
this.liveVariable1.update();
}
Fuentes:
31 de agosto de 2008
Ejemplo de Master Detail en WM4
En esta aplicacin muestro el uso de un maestro detalle usando solo liveVariables para normales aplicaciones CRUD y liveView para CRUD relacionales eso es todol...
este es mi codigo que tengo que añadir en "pagina Sales" ......
dojo.declare("Sales", wm.Page, {
start: function() {
},
liveForm1Success: function(inSender, inData) {
//this shows the detail panel and filter the detail datagrid for current sale
this.panel2.setValue("showing",true);
this.liveVariable2.update();
},
dataGrid1Selected: function(inSender, inIndex) {
//this shows the detail panel and filter the detail datagrid for current sale and go to layer for show all complete sale
this.panel2.setValue("showing",true);
this.liveVariable2.update();
this.gotoLayer2.update();
},
newSaleButtonClick: function(inSender, inEvent) {
//this hide the detail panel and prepar to insert a new master sale
this.editPanel1.beginDataInsert();
this.panel2.setValue("showing",false);
},
_end: 0
});
tambien uso un trigger para actualizar id_master actual en el detalle
CREATE OR REPLACE FUNCTION set_last_master_id()
RETURNS "trigger" AS
$BODY$declare
_id_master integer;
begin
_id_master=0;
select max(id_master) into _id_master from master_sales;
new.id_master=_id_master;
return new;
end;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
--------------------------------------------------------------------
CREATE TRIGGER "beforeInsertSetLastMasterId"
BEFORE INSERT
ON detail_sales
FOR EACH ROW
EXECUTE PROCEDURE set_last_master_id();
---------------------------------------------------------------------
Note: las liveVariables no esta actualizando por defecto
Espero q pueda ayudarte :)
Fuentes:
http://dev.wavemaker.com/forums/files/MasterDetailProject.zip
http://dev.wavemaker.com/forums/files/master_detail_db.sql_.txt
http://dev.wavemaker.com/forums/files/master_detail_db.jpg
24 de agosto de 2008
Uso de Expresiones en WM4
El uso de liveForm y liveVarialbles es excelente pero lo mas util que pude observar es el uso de expresiones como por ejemplo en mi select editor para una tabla relacionada.
Antes en WM3 esto solo me podia mostrar un solo valor pero ahora puedo colocar los que quiera
displayExpression : ${nombre} + " " + ${pap}
15 de agosto de 2008
Ya se lanzo WaveMaker 4.0 !!
El nuevo WaveMaker 4.0 recientemente a lanzado este excepcional framework para el desarrollo de aplicaciones de forma visual, rapida y con menos codigo.
Una de las cosas que voy a destacar es el uso de liveVariables (cargadas de insert, update, delete y list) y liveForms (formulario que generan todo los editores e incluidos los botones new,update, delete, guardar y cancelar).
El uso de la propiedad displayExpression (http://dev.wavemaker.com/forums/?q=node/2237) tambien me llamo la atencion debido a que puedo cambiar la forma en la que veo mi informacion relacional en el aplicaciones con CRUD con tablas relacional.
Ademas de la nueva version pueden ver que tambien actualizaron la pagina www.wavemaker.com con un precioso tema azul.
Aqui pueden ver al equipo de ingenieros de WaveMaker brindando este lanzamiento.
Suscribirse a:
Entradas (Atom)
