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.



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&lt;=10 &amp;&amp; self.MAP_SHOWOVERSCROLL==1) {
                      self.MAP_SHOWOVERSCROLL=0;
                      ui.getView(self).refresh("froverscroll");
                  } else if (e.dy&gt;10 &amp;&amp; self.MAP_SHOWOVERSCROLL==0) {
                      self.MAP_SHOWOVERSCROLL=1;
                      ui.getView(self).refresh("froverscroll");
                  } 
              });
              self.MAP_SHOWOVERSCROLL=1;
          </script>
        </action>


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.


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;
}


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>
 
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() &gt; 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>
 
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>
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>
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();
	}
}


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 &gt; 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 &lt; 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> 
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;
 


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;
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;


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);
}


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.


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>
 


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();
 
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>


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>
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.


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 &amp;&amp; mandatory == ""){
          			mandatory = "Tipo es obligatorio";
          		}
          		if ( self.HORAINI.length == 0 &amp;&amp; mandatory == ""){
          			mandatory = "Hora Inicio es obligatorio";
          		}
          		if ( self.DESCRIPCION.length == 0 &amp;&amp; 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>


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



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");



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");



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);
}


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>



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 &amp;&amp; mandatory == ""){
          			mandatory = "Tipo es obligatorio";
          		}
          		if ( self.HORAINI.length == 0 &amp;&amp; mandatory == ""){
          			mandatory = "Hora Inicio es obligatorio";
          		}
          		if ( self.DESCRIPCION.length == 0 &amp;&amp; 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>


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.


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>
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>