Share via Share via... Twitter LinkedIn Facebook Pinterest Telegram WhatsApp Yammer Reddit TeamsCambios recientesSend via e-MailImprimirEnlace permanente × Tabla de Contenidos Self bind clearAllVariables clone getContents GetcontentsCount create deleteObject getdirty executeNode fieldPropertyValue-getFieldPropertyValue setFieldPropertyValue getValue setValue getIdFieldName loadAll getObjectIndex getObjectItem getOldItem / getOldValue getOwnerApp getOwnerCollection getParent getPropertyGroup getPropertyTitle refresh refreshValue save setOwnerCollection getVariables / setVariables toString Self Esta referencia apunta al objeto dentro del cual se está ejecutando el script actual. Los scripts que se ejecuten dentro de un ámbito de colección tendrán esta referencia a Nothing. Se ha sustituido el antiguo THIS que se utilizaba en VBScript por self en Javascript para evitar interferir con el objeto this de Javascript. En cualquier proyecto existente con código VBScript habrá que sustituir this por self si vamos a hacer una migración a código Javascript. El objeto user tiene estos mismo métodos disponibles. Método Descripción bind enlazar. clone clonar. deleteObject borrar objeto. executeNode ejecutar nodo. fieldPropertyValue valor propiedad del campo. getContents obtener contents. getContentsCount obtener recuento de contents. getDirty indica si hubo cambios. getFieldPropertyValue obtener el valor de la propiedad del campo. getObjectIndex obtener índice del objeto. getObjectItem obtener item de objeto. getOwnerApp obtener aplicación propietaria. getOwnerCollection obtener propietario de la colección. getPropertyGroup obtener propiedad de grupo. getPropertyTitle obtener titulo de propiedad. getValue obtener valor. getVariables obtener variables. isNew nuevo. loadFromJson cargar de Json. save guardar. setFieldPropertyValue ajustar valor de la propiedad del campo. setOwnerCollection ajustar colección propietaria. setValue ajustar valor. setVariables ajustar variables. toString cadena. bind Tipo Método Tipo de Dato devuelto Ninguno Enlazar. <action name="runscript"> <script language="javascript"> ui.getView(self).bind("top","onScroll", function (e) { if (e.dy<=10 && self.MAP_SHOWOVERSCROLL==1) { self.MAP_SHOWOVERSCROLL=0; ui.getView(self).refresh("froverscroll"); } else if (e.dy>10 && self.MAP_SHOWOVERSCROLL==0) { self.MAP_SHOWOVERSCROLL=1; ui.getView(self).refresh("froverscroll"); } }); self.MAP_SHOWOVERSCROLL=1; </script> </action> clearAllVariables Tipo Método Tipo de Dato devuelto Ninguno Limpia todas las variables del objeto. Si alguna de ellas contiene un objeto, este será liberado a menos que pertenezca a una colección. clone Tipo Método Parámetros CopyID: True si se copia también el ID del objeto. False para copiar todo menos el ID (crear un objeto nuevo con los mismos valores del objeto original) Tipo de Dato devuelto XOneDataObject Este método copia el objeto actual y devuelve la copia. Todas las propiedades, las variables y los contents del objeto se copian hacia el nuevo objeto. Opcionalmente se puede copiar también el ID por lo que se tendría una copia exactamente igual del objeto original, que al grabarse en base de datos ocuparía el mismo registro en la tabla. Si no se copia el ID, cuando el objeto se grabe, generará un nuevo registro en la base de datos. Ejemplo de Uso: // Este ejemplo es para clonar las líneas de una cabecera, obteniendo nuevos ID para las copias de los registros. objCab.save(); // Grabamos el objeto por si no lo estuviera previamente... var newID=objCab.ID; // Obtenemos el ID var objl; var objlnew; var j; // Recorremos el content de LinDocumentos y vamos clonando los registros actualizando el IDCABDOCUMENTO. obj.getContents("LinDocumentos").loadAll(); var nl = obj.getContents("LinDocumentos").count(); for (j=0;j<nl;j++) { objl=obj.getContents("LinDocumentos").get(j); objlnew=objl.clone(false); //obtenemos un objeto del contents y lo clonamos sin el valor del id // Le asociamos el ID de la cabecera y lo salvamos con lo cual cogería un nuevo ID. objlnew.IDCABDOCUMENTO=newID; objlnew.save(); objlnew=nothing; objl=nothing; } getContents Tipo Función Acceso Lectura Parámetros Name: Cadena, name del content o Indice: Numérico, índice del contents, tenemos un array de contents en la colección Tipo de Dato devuelto OneDataCollection Plataforma Todas Devuelve el contents cuyo nombre se pide. Si el contents no existe, devuelve NULL. Ejemplo de Uso: coll=self.getContents("ContentIncidencias"); <action name="runscript"> <script language="javascript"> var cCal=self.getContents("calendario"); var objCalendario=cCal.createObject(); objCalendario.FECHA=self.MAP_FECHA; cCal.addItem(objCalendario); appData.pushValue(objCalendario); </script> </action> </nuevo> <editar show-wait-dialog="false" refresh="true"> <action name="runscript"> <script language="javascript"> var cCal=self.getContents("Calendariodatos"); cCal.clear(); var objCalendario=cCal.findObject("ID="+self.MAP_IDTAREASELECTED.toString()); if (objCalendario!==null) { objCalendario.MAP_COLORACTIVO = "#666666"; appData.pushValue(objCalendario); } </script> </action> </editar> <eliminar show-wait-dialog="false" refresh="true"> <action name="runscript"> <script language="javascript"> var ok=ui.msgBox ("¿Desea eliminar el registro seleccionado?","Aviso",4); if (ok===6) { var CollCal=appData.getCollection("ContentdatosCalendario"); CollCal.deleteItem (self.MAP_IDTAREASELECTED.toString()); self.MAP_IDTAREASELECTED=0; CollCal=null; ui.showToast ("Elemento borrado correctamente."); } else { ui.showToast ("Se ha cancelado la acción y no se borrará el elemento."); } </script> </action> GetcontentsCount Tipo Propiedad Acceso Lectura Tipo de Dato devuelto Entero Devuelve la cantidad de contents que tiene el objeto. No corresponde a los prop de type=“Z”, sino a las secciones <contents> dentro de la declaración del objeto. Puede haber 2 ó más prop de type=“Z” apuntando al mismo <contents> <action name="runscript"> <script language="javascript"> self.MAP_GROUP=1; self.MAP_TOTAL_PAGES=1; self.MAP_VISIBLE=0; self.getContents("PictureMapData").loadAll(); if(self.getContents("PictureMapData").count() > 0){ var obj = self.getContents("PictureMapData").getItem(0); self.MAP_ID = obj.ID; self.MAP_NOMBRE = obj.TITULO; self.MAP_DESCRIPCION = obj.DESCRIPCION; } self.getContents("PictureMapData").lock(); </script> create Tipo Método Parámetros Params: Arreglo con parejas campo, valor para asignar a las propiedades del objeto. Tipo de Dato devuelto Ninguno Asigna valores a un grupo de propiedades del objeto en una sola llamada. Se utiliza sobre todo para copiar grupos de propiedades o para crear un objeto nuevo por primera vez. <guardar show-wait-dialog="false" refresh-prop="DIBUJO"> <action name="runscript"> <script language="javascript"> //Opcional: Acepta un segundo parámetro, nombre de fichero ui.saveDrawing("DIBUJO"); //Comprobación extra, ver si se ha guardado correctamente var FileManager = createObject("FileManager"); var path = appData.filesPath + self.DIBUJO.toString(); var result = FileManager.fileExists(path); if ( result == 0){ ui.showToast("Fichero " + path + " guardado correctamente"); }else{ ui.showToast("Error al guardar fichero " + path); } FileManager = null; </script> </action> </guardar> <borrar show-wait-dialog="false" refresh-prop="DIBUJO"> <action name="runscript"> <script language="javascript"> ui.clearDrawing("DIBUJO"); </script> </action> </borrar> <onchange> <field name="MAP_FOTO"> <action name="runscript"> <script language="javascript"> var coll = appData.getCollection("ContentFileManagerImagen"); var obj = coll.createObject(); obj.FOTO = self.MAP_FOTO; obj.IDINCIDENCIA = 0; obj.FECHA = formatDateTime(new Date(),0); obj.save(); ui.refresh(); </script> </action> </field> </onchange> deleteObject Tipo Método Tipo de Dato devuelto Ninguno Plataforma Todas Elimina el objeto de la base de datos. Si el objeto no tiene ID (no se ha grabado nunca) el método no hace nada. Ejemplo de Uso: <selecteditem onchange="Refresh255"> <action name="runscript"> <script language="javascript"> var a = ui.msgBox("?Esta seguro que desea borrar esta fotosgraf?a?","???ATENCION!!!",1); var fso = createObject("filemanager"); if ( a == 1){ fso.delete(self.FILENAME.toString()); self.deleteObject(); } fso = null; </script> </action> </selecteditem> <borrar> <action name="runscript"> <script language="javascript"> <![CDATA[ var a = ui.msgBox("¿Esta seguro que desea borrar todos las lineas de las cuales no existen los ficheros en su dispositivo?","¡¡¡ATENCION!!!",1); if( a === 1){ var coll = self.getContents("ReplicaFiles"); var fso = createObject("filemanager"); var borrados = 0; var cantidad = coll.getCount(); if( cantidad <= 0){ coll.loadAll(); cantidad = coll.count - 1; } for (var i = 0; i < cantidad; i++) { var fichero = coll[i].FILENAME.toString(); var fic = fso.fileExists(fichero); if( fic == -1){ coll[i].deleteObject(); cantidad--; borrados++; } } fso=null; fic=null; ui.msgBox("Se han borrado " + cstr(borrados) + " lineas por no existir los ficheros asociados.","Información",0); } ]]> </script> </action> </borrar> <borrar2> <action name="runscript"> <script language="javascript"> <![CDATA[ var a=ui.msgBox ("¿Esta seguro que desea borrar todos las fotos del terminal que ya han sido enviadas a la central?","¡¡¡ATENCION!!!",1); if (a===1) { var coll=self.getContents("ReplicaFilesenviados"); var fso = createObject("filemanager"); var fic; var borrados=0; var borrados2=0; var cantidad=coll.getCount(); if (cantidad<=0) { coll.loadAll(); cantidad=coll.getCount(); } for (var i=0;i<cantidad;i++) { fichero=cstr(coll.get(i).FILENAME); fic = fso.fileExists(fichero); if (fic===0) { fso.delete(fichero); coll.get(i).deleteObject(); cantidad--; borrados++; } else { coll.get(i).deleteObject(); cantidad--; borrados2++; } } fso=null; fic=null; ui.msgBox ("Se han borrado " + cstr(borrados) + " fotos del terminal y sus registros. Se han borrado " + cstr(borrados2) + " registros de fotos que no existen en el terminal.","Información",0); } ]]> </script> </action> </borrar2> <replicar> <action name="runscript"> <script language="javascript"> replica.start(); ui.msgBox ("Proceso de réplica iniciado. Se necesita buena cobertura o wifi para garantizar el envío de las fotos.","Información",0); </script> </action> </replicar> <salir> getdirty Tipo Propiedad Acceso Lectura Tipo de Dato devuelto Booleano (Entero) Devuelve True (No cero) si el objeto está modificado (alguna de sus propiedades se ha modificado o alguno de los objetos de alguno de sus contents ha sido modificado) o False (cero) si está recién cargado o recién grabado, o no se ha modificado desde que se ha creado o cargado. Ejemplo de Uso: is_dirty=self.getdirty(); if (is_dirty!=0) { var st_msg="¿Desea guardar los cambios?"; var ok=ui.msgBox(st_msg,"ATENCION!",4); if (ok==6) { self.save(); } } executeNode Tipo Método Parámetros nodeName: Nombre del nodo que se desea ejecutar. Así si el nodo a ejecutar es <accnode>…</accnode> habrá que pasar en este parámetro “accnode“ Tipo de Dato devuelto Ninguno Si el nodo nombrado no existe, esta función no hace nada. EL nodo puede contener tantos nodos <action> como se quiera, y serán ejecutados en el mismo orden que están declarados en el XML. Ejemplo de Uso: <onchange> <field name="MAP_TIPO_MENSAJE"> <action name="runscript"> <script language="javascript"> self.executeNode("mensajes"); </script> </action> </field> </onchange> <anterior show-wait-dialog="false"> <action name="runscript"> <script language="javascript"> if (self.MAP_GROUP > 1) { self.executeNode("ir",self.MAP_GROUP-1); } </script> </action> </anterior> <siguiente show-wait-dialog="false"> <action name="runscript"> <script language="javascript"> if (self.MAP_GROUP < self.MAP_TOTAL_PAGES) { self.executeNode("ir",self.MAP_GROUP+1); } </script> </action> </siguiente> <prop name="MAP_BTN_OPT_6" type="B" title="Guardar" align="center" bgcolor="#5C881A" forecolor="white" tmargin="10%" width="40%" height="25%" border-corner-radius="12" fontbold="true" method="ExecuteNode(grabarregion)" /> <grabarregion show-wait-dialog="false"> <action name="runscript"> <script language="javaScript"> var coll=appData.getCollection("Filtro"); var obj=coll.createObject(); coll.addItem(obj); //TEMP-LOLO 20200724 pasamos al create de la coll los campos que siempre se van a rellenar al coger esta coll //obj.IMEI=self.MAP_IMEI; obj.REGION=self.MAP_FILTER2; obj.REGIONID=self.MAP_IDREGION_MT; obj.save(); ui.executeActionAfterDelay("mostrarmenu",0.1); </script> </action> </grabarregion> fieldPropertyValue-getFieldPropertyValue Tipo Propiedad Acceso Lectura Parámetros FieldName: Nombre del campo del objeto del que se quiere conocer el valor de un atributo. AttrName: Nombre del atributo cuyo valor se quiere conocer Tipo de Dato devuelto Texto Plataforma Todas Devuelve el valor de un atributo de un campo del objeto. Normalmente los atributos pueden tener como valor macros, por lo que al llamar esta propiedad, dichas macros serán sustituidas. Es importante no confundir esta función con la de igual nombre en la colección, ya que aunque para sacar el valor inicial del atributo, esta función llama a la de la colección propietaria, después se desarrollan las macros, mientras que la función de la colección no puede sustituir macros, porque no tiene valores. Ejemplo de Uso: var tipoCampo=obj.fieldPropertyValue("DESCRIPCION","type"); var tipoCampo=obj.getFieldPropertyValue("DESCRIPCION","type"); case 'textoChange': if(evento != null){ var w; self.MAP_TIPO = 0; if(evento.newText.length > 0 && self.MAP_SHOWADDTEXT == 0){ self.MAP_SHOWADDTEXT = 1; w = self.getFieldPropertyValue("MAP_TITLE","width"); w = w.replace("p",""); w = parseInt(w) + 100; self.setFieldPropertyValue("MAP_TITLE","width",w.toString()+"p"); self.MAP_TITLE = evento.newText; ui.refresh("MAP_TITLE,MAP_ADDFOTO,MAP_ADDRECORD,MAP_ADDTEXT"); }else{ if(evento.newText.length == 0){ self.MAP_SHOWADDTEXT = 0; w = self.getFieldPropertyValue("MAP_TITLE","width"); w = w.replace("p",""); w = parseInt(w) - 100; self.setFieldPropertyValue("MAP_TITLE","width",w.toString()+"p"); self.MAP_TITLE = evento.newText; ui.refresh("MAP_TITLE,MAP_ADDFOTO,MAP_ADDRECORD,MAP_ADDTEXT"); } } } break; setFieldPropertyValue Tipo Propiedad Acceso Lectura Tipo de Dato devuelto XOneApplication Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Establece el valor de un atributo de un campo del objeto. Normalmente los atributos pueden tener como valor macros, por lo que al llamar esta propiedad, dichas macros serán sustituidas. Ejemplo de Uso: // PARAMETROS: (Nombre propiedad, atributo, valor) self.setFieldPropertyValue("MAP_TITULO_VENTANA","title","OPCIONES"); self.setFieldPropertyValue("MAP_BT_SHOWCALENDARIO","img","BarraUp.png"); self.setFieldPropertyValue("@Gastos","height","460p"); case "1": pdf.addCellText("¿Existe en el Servicio la evaluación de riesgos y la planificación de actividad preventiva?"); posY = posY - interlineado; pdf.addTableSetXY(90,posY); pdf.createTable(1); pdf.setTableWidth(414); texto = "¿Se evidencian las Firmas de Entrega de dichos documentos por los Trabajadores?"; break; case "2": texto = self.fieldPropertyValue("MAP_ETQ07_2","title") + " " + self.fieldPropertyValue("MAP_ETQ07_21","title"); break; case "6": texto = self.fieldPropertyValue("MAP_ETQ07_6","title") + " " + self.fieldPropertyValue("MAP_ETQ07_61","title"); break; default: texto = "¿Se evidencian las Firmas de Entrega de dichos documentos por los Trabajadores?"; break; getValue Tipo Método Acceso Lectura Parámetros FieldName: Nombre del campo del objeto del que queremos obtener el valor. Plataforma Todas Devuelve el valor de un campo del objeto. Ejemplo de Uso: var algo=self.getValue("DESCRIPCION"); // El código anterior es similar al siguiente, de forma que en la práctica no se utiliza var algo=self.DESCRIPCION; setValue Tipo Método Acceso Escritura Parámetros FieldName: Nombre del campo del objeto al que se quiere cambiar el valor. Tipo de Dato devuelto Ninguno Plataforma Todas Establece un valor en una propiedad. Ejemplo de Uso: self.setValue("DESCRIPCION")="Loquesea"; // El código anterior es similar al siguiente, de forma que en la práctica no se utiliza self.DESCRIPCION="Loquesea"; function clearControl(propPreview, propsToRefresh) { self.setValue(propPreview, ""); ui.refresh(propPreview+","+propsToRefresh); } getIdFieldName Tipo Propiedad Acceso Lectura Tipo de Dato devuelto Texto Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Devuelve el nombre del campo clave de la colección a la que pertenece este objeto. El valor de esta función está definido en el atributo “idfieldname” de la cabecera de la colección, pero puede haber implementaciones del objeto de datos que definan este valor dinámicamente. loadAll Tipo Propiedad Acceso Lectura Tipo de Dato devuelto XOneApplication Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Este método llama a loadAll en todas las colecciones contents del objeto, excepto aquellas que tengan en su declaración el atributo “obj-loadall=false”. Debido al tipo de acción que ejecuta este método, debe emplearse con cuidado, especialmente en entornos en los que la memoria sea un problema. Ejemplos de Uso: self.getContents("Partes").loadAll(); coll=self.getContents("ContentSinCobrar"); coll.loadAll(); <before-edit refresh="true"> <action name="runscript"> <script language="javascript"> self.MAP_GROUP = 1; self.MAP_TOTAL_PAGES = 5; //Para controlar el 4 content, de tal forma que toda ejecucion a la base de datos la controlamos por script self.MAP_ORDEN = "ASC"; self.MAP_BTORDEN = "sortAZ.png"; self.MAP_BTORDENCLICK = "sortAZ_click.png"; self.getContents("content4").sort = "NOMBRE ASC"; self.getContents("content4").loadAll(); self.getContents("content4").lock(); ui.startGps(); self.MAP_NOMBRESEL = ""; </script> </action> </before-edit> getObjectIndex Tipo Método Acceso Lectura Parámetros FieldName: Nombre del campo usado para leer el valor de enlace.SearchCollName:Nombre de la colección de búsqueda. Puede ser una cadena vacía para usar el valor del atributo “mapcoll” del campo FieldName. Tipo de Dato devuelto XOneDataObject function createChat(userFrom,userTo){ var index = 0; var coll = self.getContents("Chat"); coll.unlock(); var obj = coll.findObject("(USUARIO='" + userFrom + "' AND USUARIO2='" + userTo + "') OR (USUARIO='" + userTo + "' AND USUARIO2='" + userFrom + "')"); if(obj == null){ obj = coll.createObject(); obj.USUARIO=userFrom; obj.USUARIO2=userTo; obj.FECHA= new Date(); obj.save(); } index = obj.getObjectIndex(); coll.lock(); getObjectItem Tipo Método Acceso Lectura Parámetros FieldName: Nombre del campo usado para leer el valor de enlace.SearchCollName:Nombre de la colección de búsqueda. Puede ser una cadena vacía para usar el valor del atributo “mapcoll” del campo FieldName. Tipo de Dato devuelto XOneDataObject Esta es una de las funciones menos comprendidas y por tanto menos usadas del modelo de objetos. En realidad, su principio es bastante simple, pero como no se conoce o no se comprende, se tiende a hacer lo mismo que hace esta llamada “a pelo”. Esta llamada lee el valor del campo indicado por FieldName. Si el parámetro SearchCollName trae valor, se busca la colección con ese nombre, si viene vacío, se busca el valor del atributo “mapcol” del campo indicado por FieldName y con este nombre se busca la colección correspondiente. Una vez que se tiene la colección, se busca en ella el objeto cuya clave corresponda con el valor leído del campo FieldName y se devuelve dicho objeto. En el siguiente ejemplo se muestra mejor: Suponiendo que “self” corresponde a un usuario, cuyo campo IDEMPRESA tiene el ID de la empresa correspondiente a este usuario, la llamada: var emp = self.getObjectItem("IDEMPRESA", "Empresas"); //es equivalente a: var idemp = self.IDEMPRESA; var coll = appData.getCollection("Empresas"); var emp = coll(idemp.toString()); <selecteditem show-wait-dialog="false"> <action name="runscript"> <script language="javascript"> self.getOwnerCollection().getOwnerObject().MAP_IDLINEA = self.getOwnerCollection().getObjectIndex(self); self.getOwnerCollection().getOwnerObject().MAP_IDTAREASELECTED = self.ID; self.getOwnerCollection().getOwnerObject().MAP_SELECCIONADO = self.DESCRIPCION; self.getOwnerCollection().getOwnerObject().MAP_VER = 1; ui.showToast("Seleccionada la tarea: " + self.DESCRIPCION.toString()); </script> </action> </selecteditem> getOldItem / getOldValue Tipo Propiedad Acceso Lectura Parámetros No tiene. Plataforma Todas las que soportan Javascript. Android a partir del framework 4.8.1.33 Esta propiedad permite leer el valor que tenía un campo del objeto antes de asignarle el último valor. Mediante esta estructura se puede implantar un mecanismo simple de “undo” en los valores de las propiedades, siempre teniendo en cuenta que al asignar valor a un campo del objeto pueden saltar eventos que efectúen más actualizaciones y que por tanto provoquen que este valor no sea exactamente el que tenía antes de la primera actualización, sino después de ejecutados todos los eventos. Aunque este no es el caso más normal, es bueno que se tenga en cuenta. Ejemplo de Uso: self.PESO=self.getOldItem("MAP_PESO2"); self.PESO=self.getOldValue("MAP_PESO2"); <oldvalue> <action name="runscript"> <script language="javascript"> //Expuesto en javascript a partir de la v4.8.1.33 self.MAP_TEXT_OLD=self.getOldValue("MAP_TEXT"); //También puede ser: //self.MAP_TEXT_OLD=self.getOldItem("MAP_TEXT"); ui.refresh("MAP_TEXT_OLD"); </script> </action> </oldvalue> getOwnerApp Tipo Propiedad Acceso Lectura Tipo de Dato devuelto XOneApplication Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Devuelve una referencia a la aplicación que ha creado este objeto. Como no hay más de una aplicación ejecutándose en un mismo entorno, el valor devuelto por esta propiedad es el mismo que tiene la variable global appData. El uso de esta propiedad está pensado más bien para uso interno de la maquinaria, pero como es visible para el modelo de objetos, pues ahí está para quien quiera usarlo. getOwnerCollection Tipo Propiedad Acceso Lectura Tipo de Dato devuelto XOneApplication Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Devuelve la colección propietaria del objeto. Es importante tener en cuenta que la colección propietaria de un objeto no es aquella a la que se haya adicionado con addItem sino la que lo ha creado mediante createObject. Si un objeto se va a hacer pertenecer a otra colección se debe llamar setOwnerColl antes de llamar a addItem. La colección propietaria es la que se usa para llamar a los métodos que necesitan acceder al XML base del objeto. Ejemplo de Uso: self.CLIENTEC=self.getOwnerCollection().getOwnerObject().CODCLIENTE // Se ha implementado getParent para acortar, la operación siguiente es igual que la anterior. self.CLIENTEC=self.getParent().CODCLIENTE <selecteditem refresh-owner="MAP_NOMBRESEL,floatadd3,MAP_LINEASEPARAR3" show-wait-dialog="false"> <action name="runscript"> <script language="javascript"> self.getOwnerCollection().getOwnerObject().MAP_NOMBRESEL=self.NOMBRE; self.getOwnerCollection().getOwnerObject().MAP_IDLINEA=self.getOwnerCollection().getObjectIndex(self); self.getOwnerCollection().getOwnerObject().MAP_SELECTEDID=self.ID; </script> </action> </selecteditem> <guardar show-wait-dialog="false"> <action name="runscript"> <script language="javascript"> //Peticion de campos obligatorios var mandatory = ""; if ( self.FECHA.length == 0){ mandatory = "Fecha es obligatorio"; } if ( self.TIPO.length == 0 && mandatory == ""){ mandatory = "Tipo es obligatorio"; } if ( self.HORAINI.length == 0 && mandatory == ""){ mandatory = "Hora Inicio es obligatorio"; } if ( self.DESCRIPCION.length == 0 && mandatory == ""){ mandatory = "Descripción es obligatorio"; } if ( mandatory == ""){ self.save(); var coll = appData.getCollection("ContentTareas"); var obj = coll.findObject("strftime('%Y-%m-%d',t1.FECHA)=strftime('%Y-%m-%d','" + self.FECHA.toString() + "')"); if ( obj === null || obj == "undefined" ){ self.getOwnerCollection().getOwnerObject().MAP_IDTAREASELECTED = 0; self.getOwnerCollection().getOwnerObject().MAP_VER = 0; }else{ self.getOwnerCollection().getOwnerObject().MAP_IDTAREASELECTED = obj.ID; self.getOwnerCollection().getOwnerObject().MAP_SELECCIONADO = obj.MAP_DESCRIPCION; self.getOwnerCollection().getOwnerObject().MAP_VER = 1; } appData.failWithMessage(-11888,"##EXIT##"); }else{ appData.failWithMessage(-8100,mandatory); } </script> </action> </guardar> <onback show-wait-dialog="false"> <action name="runscript"> <script language="javascript"> appData.failWithMessage(-11888,"##EXIT##"); </script> </action> </onback> <selecteditem show-wait-dialog="false"> <action name="runscript"> <script language="javascript"> self.getOwnerCollection().getOwnerObject().MAP_IDLINEA = self.getOwnerCollection().getObjectIndex(self); self.getOwnerCollection().getOwnerObject().MAP_IDTAREASELECTED = self.ID; self.getOwnerCollection().getOwnerObject().MAP_SELECCIONADO = self.DESCRIPCION; self.getOwnerCollection().getOwnerObject().MAP_VER = 1; ui.showToast("Seleccionada la tarea: " + self.DESCRIPCION.toString()); </script> </action> </selecteditem> getParent Tipo Propiedad Acceso Lectura Tipo de Dato devuelto XOneApplication Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Devuelve el objeto padre de la colección propietaria del objeto. Es importante tener en cuenta que la colección propietaria de un objeto no es aquella a la que se haya adicionado con addItem sino la que lo ha creado mediante createObject. Sería la abreviatura de ( getOwnerCollection().getOwnerObject() ) Ejemplo de Uso: self.CLIENTE=self.getParent().CODCLIENTE // Este código es similar a este otro: self.CLIENTE=self.getOwnerCollection().getOwnerObject().CODCLIENTE getPropertyGroup Tipo Propiedad Acceso Lectura Tipo de Dato devuelto XOneApplication Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Devuelve el nombre del grupo a que pertenece el campo cuyo nombre se indica. Si el grupo no existe, la propiedad no tiene definido ningún grupo o el número es incorrecto, esta propiedad devuelve una cadena vacía. Si hay una plataforma activa y el grupo tiene definición de nodo <platform> para la misma, el valor devuelto será el que esté definido por el correspondiente nodo <platform>. Ejemplo de Uso: coll.getPropertyGroup("CODIGO"); getPropertyTitle Tipo Propiedad Acceso Lectura Tipo de Dato devuelto XOneApplication Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Devuelve el título visible de la propiedad (campo de datos) del objeto. El título se encuentra en el atributo “title” de la definición. Si no hay “title” se devuelve el texto del nodo de la propiedad. En caso de que haya nodo <platform> para la propiedad con el nombre de la plataforma activa y en dicho nodo está definido el atributo “title”, este será el valor que se devuelva, con prioridad sobre los casos anteriores. Ejemplo de Uso: self.getPropertyTitle("MAP_CODIGO"); refresh Tipo Propiedad Acceso Lectura Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Este método refresca los datos del objeto volviendo a leerlos de la base de datos. Los cambios hechos en las propiedades serán sustituidos por los que se lean de la base de datos. Una vez terminada la lectura de los datos el objeto queda marcado como “limpio” (no modificado). Los contents no se tocan, así que si se quiere refrescar de forma completa un objeto habrá que hacer un recorrido por sus contents y refrescar cada objeto. Si la colección propietaria de este objeto es especial, el método no hace nada. Ejemplo de Uso: self.refresh(); var params = { //filename : "test.jpg", //saveToGallery: true, width : 640, height : 480, onFinished : function(sFileName) { if (!sFileName) { ui.showToast("Error de cámara"); } else { self.MAP_RESULT = sFileName; self.MAP_ESTADO=2; ui.refresh("MAP_TOGGLE_FLASH_MODE,MAP_CAMERA_QUALITY,MAP_BACK,MAP_TAKE_PICTURE,MAP_TOGGLE_CAMERA,MAP_CANCEL,MAP_SAVE"); } } }; control.takePicture(params); } refreshValue Tipo Propiedad Acceso Lectura Tipo de Dato devuelto XOneApplication Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Este método refresca ÚNICAMENTE EL VALOR de las propiedades del objeto que especifiquemos como parámetro. NO se repintan márgenes, colores, ó cualquier tipo de formato que haya podido cambiar, para eso tendríamos que utilizar el ui.refresh, éste ui.refreshValue es exclusivo para actualizar el “VALOR” de la propiedad, y por lo tanto, es más rápido que el ui.refresh. Ejemplo de Uso: self.PROP1="valor1"; self.PROP2="valor2"; ui.refreshValue("PROP1,PROP2"); <calculaTotal2 refresh="false" show-wait-dialog="false"> <action name="runscript"> <param name="num1" /> <param name="num2" /> <script language="javascript"> self.NUM3_2 = parseInt(num1) + parseInt(num2); ui.refreshValue("NUM3_2"); </script> </action> </calculaTotal2> save Tipo Propiedad Acceso Lectura Tipo de Dato devuelto XOneApplication Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Graba los datos del objeto en el soporte de datos que corresponda. En general se trata de la base de datos descrita por la conexión principal, pero también puede ser una conexión externa, una conexión remota o cualquier otro tipo de soporte permitido. Si el objeto está marcado como read-only en la declaración de la colección, este método no hace nada. Si la conexión en que trabaja la colección propietaria del objeto está marcada para replicar, se generarán todos los datos para que se replique la grabación. Una vez terminada la grabación se ejecutarán las acciones del nodo <insert> que sean del tipo <action> lo que permitirá que se enlacen los objetos que tengan los contents. La llamada a este método graba también los contents una vez que se hayan ejecutado las acciones de inserción. Si no se cumple alguna regla de grabación, la llamada al método falla con el código correspondiente. Si falla la grabación del objeto o de alguno de los que contiene, el método también fallará. Ejemplo de Uso: <guardar refresh="false" show-wait-dialog="false"> <action name="runscript"> <script language="javascript"> self.save(); appData.failWithMessage(-11888,"##EXIT##"); </script> </action> </guardar> <prop name="MAP_BUTACEPTAR" type="B" caption="ACEPTAR" class="btnButton" method="ExecuteNode(guardar)" newline="false" lmargin="20%" /> <guardar show-wait-dialog="false"> <action name="runscript"> <script language="javascript"> //Peticion de campos obligatorios var mandatory = ""; if ( self.FECHA.length == 0){ mandatory = "Fecha es obligatorio"; } if ( self.TIPO.length == 0 && mandatory == ""){ mandatory = "Tipo es obligatorio"; } if ( self.HORAINI.length == 0 && mandatory == ""){ mandatory = "Hora Inicio es obligatorio"; } if ( self.DESCRIPCION.length == 0 && mandatory == ""){ mandatory = "Descripción es obligatorio"; } if ( mandatory == ""){ self.save(); var coll = appData.getCollection("ContentTareas"); var obj = coll.findObject("strftime('%Y-%m-%d',t1.FECHA)=strftime('%Y-%m-%d','" + self.FECHA.toString() + "')"); if ( obj === null || obj == "undefined" ){ self.getOwnerCollection().getOwnerObject().MAP_IDTAREASELECTED = 0; self.getOwnerCollection().getOwnerObject().MAP_VER = 0; }else{ self.getOwnerCollection().getOwnerObject().MAP_IDTAREASELECTED = obj.ID; self.getOwnerCollection().getOwnerObject().MAP_SELECCIONADO = obj.MAP_DESCRIPCION; self.getOwnerCollection().getOwnerObject().MAP_VER = 1; } appData.failWithMessage(-11888,"##EXIT##"); }else{ appData.failWithMessage(-8100,mandatory); } </script> </action> setOwnerCollection Tipo Método Parámetros NewColl: Colección que se quiere asignar como propietaria. No puede ser Nothing. Tipo de Dato devuelto Ninguno Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Asigna como propietaria la colección que se pasa como parámetro. Normalmente esta llamada se usa para cambiar el propietario cuando se crea una copia de un objeto y se va a adicionar a otra colección diferente de la que corresponde al objeto original. getVariables / setVariables Tipo Propiedad Acceso Lectura Tipo de Dato devuelto XOneApplication Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) Sintaxis: getVariables(string name) / setVariables(string name, object value) Lee el valor de una variable, o le asigna un nuevo valor. Las variables pueden considerarse de forma más o menos similar a las propiedades del objeto, teniendo en cuenta que: Las variables no se graban en soporte persistente (base de datos, etc.) Las variables no se replican ni se buscan de forma remota. Las variables no pueden tener indicadores de tipos, fórmulas, llamadas a métodos o eventos, etc. Las variables pueden contener referencias a objetos, colecciones, etc. Ejemplo de Uso: // Ejemplo de getVariables self.GPSFECHA=appData.getCurrentEnterprise().getVariables("GPSTime"); // Ejemplo de setVariables appData.getCurrentEnterprise().setVariables("GPSTime", obj.FECHA); function acceptCameraResult(propPreview) { appData.getCurrentEnterprise().getVariables("lastObjectBeforeCamera").setValue(propPreview, self.MAP_RESULT); ui.getView(appData.getCurrentEnterprise().getVariables("lastObjectBeforeCamera")).refreshAll(propPreview+","+self.MAP_PROPS_TO_REFRESH); self.executeNode("onback"); } // function openCameraInPhotoMode(propPreview, propsToRefresh) { appData.getCurrentEnterprise().setVariables("lastObjectBeforeCamera", self); var camara = appData.getCollection("Camara").createObject(); camara.MAP_FUNCION = "FOTO"; camara.MAP_ESTADO = 0; camara.MAP_RESULT_PREVIEW = propPreview; camara.MAP_PROPS_TO_REFRESH = propsToRefresh; appData.pushValue(camara); } <onclick_BTSELECTED> <action name="runscript"> <script language="javascript"> self.getContents("Rutas").setVariables("selecteditem",self.MAP_SELECTEDITEM); </script> </action> </onclick_BTSELECTED> toString Tipo Método Tipo de Dato devuelto Ninguno Plataforma Todas Convierte a cadena Ejemplo de Uso: <selecteditem onchange="Refresh255"> <action name="runscript"> <script language="javascript"> var a = ui.msgBox("?Esta seguro que desea borrar esta fotosgraf?a?","???ATENCION!!!",1); var fso = createObject("filemanager"); if ( a == 1){ fso.delete(self.FILENAME.toString()); self.deleteObject(); } fso = null; </script> </action> </selecteditem> <onpageselected refresh="true" show-wait-dialog="false" refresh-owner="MAP_FECHA,MAP_TITLE_NAMES_MES,MAP_TITLE_ANO,BEdit,BDelete"> <action name="runscript"> <param name="DATEVALUE" /> <param name="CURRENT" /> <param name="DATEFROM" /> <param name="TOTALDAYS" /> <script language="javascript"> var monthName = new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"); selfDataColl.getOwnerObject().MAP_FECHA = DATEVALUE; selfDataColl.getOwnerObject().MAP_TITLE_NAME_MES = monthName[DATEVALUE.getMonth()].toString().toUpperCase(); selfDataColl.getOwnerObject().MAP_TITLE_ANO = DATEVALUE.getFullYear().toString(); selfDataColl.getOwnerObject().MAP_VER = 0; </script> </action> </onpageselected>