Se ha sustituido el antiguo ThisDataColl de VBScript por selfDataColl en Javascript.


Esta referencia apunta a la colección dentro de la cual se está ejecutando el script actual. Los scripts que se ejecuten dentro de un ámbito de objeto tendrán esta referencia a Nothing.

Método Descripción
addItem Añade el objeto que se pasa como parámetro, a la colección.
appendChild Adicionar objeto hijo que se pasa como parámetro a la colección.
browseDeleteAll Elimina de la base de datos todos los objetos que cumplan las condiciones de los filtros de la colección.
browseDeleteWithNoRules Elimina de la base de datos todos los objetos pero no se comprueban las reglas de eliminación de los objetos.
browseLength Devuelve la cantidad de objetos que serán recorridos en el ciclo startBrowse activo.
clear Limpia la colección (descarga los objetos que contiene).
collPropertyValue Devuelve el valor de un atributo de la cabecera de la colección.
count Devuelve la cantidad de objetos cargados en memoria por esta colección.
createClone Crea una copia de la colección y la devuelve
createObject Crea un nuevo objeto usando las plantillas de la colección.
createSearchIndex Crea un indice de un content en memoria.
deleteAll Borra todos los objetos que están cargados en la colección
deleteItem Borra el objeto cuya clave o índice se indica, tanto de la colección como de la base de datos.
doSearch Hace búsqueda según parámetros en un content.
doSort Ordena según criterio indicado.
endBrowse Termina el recorrido activo en la colección.
executeSqlString Lanza consulta definida previamente.
findObject Busca un objeto siguiendo los criterios de búsqueda que se pasan como parámetro.
generateRowId Genera un ROWID utilizando los datos de réplica de la conexión utilizada en la colección, así como datos de tabla y demás.
get Obtener valor de objeto definido en la llamada.
getAccessString Devuelve la cadena de acceso a datos de la colección.
getCollPropertyValue Obtiene valor de propiedad de la colección definido en parámetro.
getCount Devuelve cantidad elementos de la colección.
getCurrentItem Devuelve el objeto actual del recorrido startBrowse activo.
getDataConnector TODO
getDevelopedAccessString Devuelve la cadena de acceso a datos de la colección con todas las macros sustituidas, los filtros aplicados .
getDevelopedFilter Devuelve el filtro principal de la colección (Filter) ya desarrollado con las macros sustituidas y listo para usarse dentro de la cadena de acceso a datos.
getDevelopedLinkFilter Devuelve el filtro de enlace de la colección (LinkFilter) ya desarrollado y con las macros sustituidas listo para usarse en la cadena de acceso a datos.
getFilter Devuelve el valor del filtro principal de la colección.
getGroup Devuelve el nombre visible de un grupo de la colección dado su ID.
getGroupCount Devuelve la cantidad de grupos que hay declarados en la colección.
getIdFieldName Devuelve el nombre del campo clave de la colección.
getItem Devuelve un objeto de la colección dada su clave llevada a texto, su índice dentro de la colección o el valor de uno de sus campos.
getLinkFilter Devuelve el valor del filtro de enlace de la colección.
getMacro Devuelve o asigna valor a la macro cuyo nombre se indica.
getMacroCount Devuelve la cantidad de macros que hay definidas en la colección, tanto las que han recibido valor de forma dinámica como las que se han declarado en el mappings.
getMultipleKey Devuelve True (no cero) si la clave del objeto es múltiple o False (cero) si la clave es un solo campo.
getName Devuelve el nombre de la colección, tal como se ha declarado en el mappings.
getObject Devuelve objeto de la colección.
getObjectIndex Devuelve índice de la colección
getOwnerApp Devuelve la aplicación propietaria de la colección.
getOwnerObject Devuelve el objeto propietario de la colección
getPropertyGroup Devuelve el nombre de una propiedad del grupo dado su índice numérico (en orden de declaración en el mappings).
getPropertyTitle Devuelve el título de la propiedad (campo de datos) de la colección.
getPropType Devuelve el tipo de la propiedad de datos tal como está declarado en el mappings.
getPropVisibility Devuelve el valor del campo “visible” de la propiedad.
getSort Devuelve o asigna la cadena de ordenamiento a la colección
getVariables Devuelve o asigna valor a la variable cuyo nombre se indica.
getXmlNode Devuelve nodo XML según criterio de búsqueda.
isBrowsing Devuelve True (no cero) si la colección tiene abierto un recorrido StartBrowse.
isFull Devuelve True (no cero) si la colección está llena (se ha llamado LoadAll y se han cargado todos los objetos que cumplen con el criterio).
isLocked Devuelve True (no cero) si la colección está bloqueada usando Lock. Devuelve False (cero) si la colección está libre (su estado normal).
loadAll Carga en memoria todos los objetos que cumplan con los criterios de filtrado que tiene la colección.
loadFromJson Carga en memoria desde el JSon todos los objetos que cumplan con los criterios de filtrado que tiene la colección.
lock Bloquea la colección para evitar que se modifique su contenido.
moveFirst Mueve el recorrido al primer objeto de la colección
moveLast Mueve el recorrido al último objeto de la colección.
moveNext Mueve el recorrido hacia el siguiente objeto.
movePrevious Mueve el recorrido al objeto anterior. Aquí se cumplen las mismas observaciones que para MoveFirst o para MoveLast.
reload Vuelve a cargar la colección para obtener actualizaciones recientes.
removeItem Elimina de la colección el objeto cuyo índice o clave se pasa como parámetro.
saveAll Graba todos los objetos que contiene la colección.
setFilter Establece el valor del filtro principal de la colección.
setLinkFilter Establece el valor del filtro de enlace de la colección.
setMacro Asigna valor a la macro cuyo nombre se indica.
setSort Asigna valor de orden a la colección.
setVariables Asigna valor a la variable cuyo nombre se indica.
startBrowse Inicia un recorrido siguiendo las reglas de la cadena de acceso, filtros y ordenamiento de la colección.
stringKey Devuelve True (no cero) si la colección utiliza una clave que no es numérica.
unlock Desbloquea la colección para que se puedan usar nuevamente clear y loadAll.



Tipo Método
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)


Añade el objeto que se pasa como parámetro, a la colección.

Opcionalmente permite insertarlo en la posición que se quiera dentro del conjunto de objetos que haya dentro de la colección.

Si el parámetro Index no se pasa (lleva valor Empty), se insertará el objeto al final de la colección.

Este es el comportamiento más usado.

Ejemplo de Uso:

cMsg=appData.getCollection("MensajesTransacSend");
objMsg=cMsg.createObject();
cMsg.addItem (objMsg);
 
objMsg.CODTECNICO=self.MAP_CODTECDEST;
objMsg.ASUNTO=self.MAP_ASUNTO;
objMsg.OBSERV=self.MAP_OBSERV;
objMsg.save();
 
objMsg=null;
cMsg.clear();
cMsg=null;


<onchange>
        <field name="MAP_FOTO">
          <action name="runscript">
            <script language="javascript">
					var cImagen = self.getContents("imagenes");
					var objImagen = cImagen.createObject();
					objImagen.FOTO = self.MAP_FOTO;
					objImagen.FECHA = formatDateTime(new Date(),0);
					if ( self.ID &gt; 0 ){
						objImagen.IDINCIDENCIA = self.ID;
					}
					cImagen.addItem(objImagen);
					objImagen.save();
            		ui.getView(self).refresh("MAP_IMAGENES");
				</script>
          </action>
        </field>
      </onchange>
 


Tipo Método
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)

\\Adicionar Objeto hijo que se pasa como parámetro a la colección.
Ejemplo:

  var lasPropiedades = theColl.getXmlNode().clone();
  lasPropiedades.appendChild(typeTNuevo, mMapTexto);
 



Tipo Método
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)


Elimina de la base de datos todos los objetos que cumplen las condiciones de la cadena de acceso y los filtros de la colección.

Es el equivalente a recorrer una colección con startBrowse/moveNext y borrar cada uno de ellos.

Es el método más recomendable para borrar conjuntos de objetos grandes, ya que cargar todos los objetos con loadAll y después borrarlos con deleteAll es un desperdicio.

Ejemplo de Uso:

self.getContents("Presupuesto").browseDeleteAll();
 
var Coll=appData.getCollection("TerminadasBorradoFinalizadas");
var filtro=Coll.getLinkFilter();
Coll.setLinkFilter("ACEPTADA=2");	
Coll.browseDeleteAll();
Coll.setLinkFilter(filtro);
Coll=null;


Tipo Método
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)


Similar a browseDeleteAll pero no se comprueban las reglas de eliminación de los objetos.

Este sistema es usado para borrar de forma rápida y sin interrupción una cantidad grande de objetos.

Como no se comprueban las reglas de eliminación, las acciones se ejecutan con mayor velocidad y no hay posibilidad de que se interrumpa el ciclo al fallar alguna regla de borrado.

Ejemplo de Uso:

self.getContents("Presupuesto").browseDeleteWithNoRules();


Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto Entero
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve la cantidad de objetos que serán recorridos en el ciclo startBrowse activo.
Si no hay activo ningún ciclo, o si el que hay se ha activado pasando False (o no pasando nada) a la llamada a startBrowse, esta propiedad devuelve -1. En las plataformas Win32 (PC, Web, Windows Mobile) esta propiedad devuelve siempre -1 a menos que la base de datos soporte conteo de registros, o en caso negativo, que la colección tenga el atributo alternate-counter=true.

En casos como MySQL esto es siempre así.

Las plataformas móviles diferentes de WM siempre usan el método alternativo, por lo que no dependen del tipo de base de datos usado.

Ejemplo de Uso:

coll.startBrowse(true);
nLenData=coll.browseLength();


Tipo Método
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)


Limpia la colección (descarga los objetos que contiene).

La llamada a este método no afecta los recorridos startBrowse activos, por lo que currentItem no se verá afectado por la llamada a este método.

Es importante que si se tienen referencias a objetos que están cargados en la colección, dichas referencias se anulen antes de llamara a clear, ya que en plataformas que trabajan con COM pueden ocurrir errores al tratar de anular las referencias posteriormente, o al salir del script, ya que cuando las referencias salen de ámbito intentarán liberarse y al estar destruidos los objetos, se producirán errores.

Estos mismos scripts, al ejecutarse en entornos que no usen COM, no darían error mientras no se traten de usar las referencias posteriormente, lo cual no implicaría que estuvieran bien programados, sino que simplemente están desarrollados usando una tecnología diferente.

El orden a la hora de liberar memoria:

  1. Anular referencias a objetos.
  2. Limpiar colecciones.
  3. Anular referencias a colecciones.

Ejemplo de Uso:

....
obj.save();
objMsg=null;
cMsg.clear();
cMsg=null;
    <applyfilter>
          <action name="runscript">
            <script language="javascript">
                self.getContents("ContentDatosFiltroMultiseleccion").clear();
                self.getContents("ContentDatosFiltroMultiseleccion").loadAll();
                ui.refresh("@ContentDatosFiltroMultiseleccion");
            </script>
        </action>
      </applyfilter>     
function fillMessagesContent(colMUser,page,cant) {
    var colMsg,obj,n,i,nInit,nEnd,ObjB;
	colMsg=appData.getCollection("MensajesReader");
 	colMsg.setFilter("IDCHAT="+self.MAP_IDCHATSEL+"");
	colMUser.unlock();
	colMUser.clear();
	colMUser.loadAll();
	colMsg.setSort("FECHA ASC");
	colMsg.startBrowse();
	while (colMsg.getCurrentItem() !== undefined && colMsg.getCurrentItem() != null) {
	    obj=colMsg.getCurrentItem();
		addUserMessage(colMUser,obj,0,obj.ROWID);
		colMsg.moveNext();
	}
	colMsg.endBrowse();
	colMsg.clear();
	colMsg = null;
	colMUser.lock();
	ui.refresh("Chatear");
}


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 valor de un atributo de la cabecera de la colección.

coll.collPropertyValue("title");

Si hay una plataforma activa y existe el nodo <platfom> para la misma dentro de la colección, el valor se buscará primero dentro de dicho nodo.

Si el atributo no existe o no tiene valor, la propiedad devolverá una cadena vacía.


Tipo Método
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)


Hace búsqueda según parámetro en content.

function cochesBuscar(evento,obj) {
 
    obj.getContents('DatosListado').doSearch(evento.newText);
    ui.getView(obj).refresh("MapaDatosListado");
 
}
let contentMemoria=self.getContents("Content");
contentMemoria.createSearchIndex(["MAP_CAMPO,"]);
contentMemoria.lock();
 
 
contentMemoria.doSearch(campo);
let objContent=contentMemoria.get(0);
if (objContent)
{
    //Encuentra
}
function AccionesChatEspecial(parametro, evento) 
{
    var coll,obj,fecha;
    switch (parametro) {
        case 'nuevochat':
            // Aqui es donde vamos a crear un nuevo chat ...
            openListUser();
            break;
        case 'ok':
            // Aqui es donde ese crea el chat y se abre ...
            // creamos el chat, si no existiera ...
            var index = createChat(user.LOGIN,self.MAP_CCUSUARIO);
            // cerramos el menu de seleccion de usuarios ...
            closeListUser();
            // abrirmos el chat ...
            openChat(index,self);
            break;
        case 'llamada':
            //ver a quien llamamos
            //si es unico, es decir, personal, se llama al USUARIO
            //si es grupo: mostrar frame flotante, para llamar a uno de ellos
            if(self.MAP_PHONE.toString().length == 0){
                ui.msgBox("La persona con la que quiere contactar no tiene relleno el número de teléfono","Notificación",0);
            }else{
                ui.makePhoneCall(self.MAP_PHONE);
            }
            break;
        case 'fotoabrir':
            self.MAP_TIPO = 1;
            ui.startCamera("MAP_FOTO","photo");
            break;
        case 'voz':
            if( self.MAP_RECORDON==0){
                self.MAP_TIPO = 2;
                self.MAP_RECORDON=1;
                self.MAP_SHOWADDTEXT=1;
                self.MAP_TIMERECORD="0:00";
                ui.startAudioRecord("onrecordfinished","MAP_VOZGRABADA", 0);
                ui.executeActionAfterDelay("onSetTime", 1);
                ui.refresh("frmNormal,MAP_ADDTEXT");
                ui.getView(self).refreshAll("frmRecording");
            }else{
                self.MAP_TIPO = 0;
                self.MAP_RECORDON=0;
                self.MAP_SHOWADDTEXT=0;
                self.MAP_TIMERECORD="0:00";
                ui.stopAudioRecord();
                ui.refresh("frmRecording,MAP_ADDTEXT");
                ui.getView(self).refreshAll("frmNormal");
            }
            break;
        //Revisar esto en sistema operativo Android-10
        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;
        case 'enviar':
            switch (self.MAP_TIPO) {
                case 0:
                    sendMessage(self.getContents("Chatear"),self,"MAP_TITLE",true);
        	        self.MAP_TIPO = 0;
                    break;
                case 1:
                    sendMessage(self.getContents("Chatear"),self,"MAP_FOTO",true);
        	        self.MAP_TIPO = 0;
        	        break;
        	    case 2:
                    ui.stopAudioRecord();
                    sendMessage(self.getContents("Chatear"),self,"MAP_VOZGRABADA",true);
        	        self.MAP_TIPO = 0;
                    self.MAP_RECORDON=0;
                    self.MAP_SHOWADDTEXT=0;
                    self.MAP_TIMERECORD="0:00";
                    ui.refresh("frmRecording,MAP_ADDTEXT");
                    ui.getView(self).refreshAll("frmNormal");
        	        break;
            }
            break;
        case 'textoU':
            if(evento != null){
                self.getContents("nUsuarios").doSearch(evento.newText);
                ui.refresh("@nUsuarios");
            }
            break;
 
    }
}
 
function AccionesChat(parametro) 
{
    switch (parametro) {
        case 'ver':
            // abrirmos el chat ...
            openChat(self.getObjectIndex(),self.getOwnerCollection().getOwnerObject());
            break;
        // case 'veradjunto': 
        //     ui.openFile(self.ADJUNTO);
        //     break;
        case 'verfoto': 
            ui.openFile(self.MAP_FOTO);
            break;
        case 'vervoz': 
            ui.openFile(self.MAP_VOZ);
            break;
        // case 'compartir': 
        //     break;
    }
}


Tipo Método
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)


Ordena según criterio definido por parámetro.

 function onWifiNetworksFound(wifiNetworks) {
    self = onWifiNetworksFound.OBJETO;
    var sMessage = "";
    var wifiManager = new WifiManager();
    var orden = 1;
    for (var i = 0;i < wifiNetworks.length;i++) {
        //sMessage = sMessage + "SSID: " + wifiNetworks[i].getSsid() + "\n";
        var wifi = wifiNetworks[i];
        var isOpen = false;
        var coll = self.getContents("ContentWifis");
        if (coll != null)
        {
	    	var obj2=coll.getItem("MAP_SSID",wifi.getSsid());
	    	if (!obj2)
	    	{
				coll.lock();
				var obj = coll.createObject();
				coll.addItem(obj);
 
				if (obj) {
 
				    if (wifi.getNetworkSecurity()=="OPEN")
					{
					    obj.MAP_IMAGE = "wifi-open.png";
					    isOpen = true;
					}
					else
					{
					    obj.MAP_IMAGE = "wifi-lock.png";
					    isOpen = false;
					}
 
					if (saberSiWifiGuardada(wifi.getSsid()))
					{
						obj.MAP_ESTADO = "Guardado";
						obj.MAP_ORDEN = orden;
						orden ++;
						obj.MAP_IDESTADO = 0;
					}
					else
					{ 
					    obj.MAP_ESTADO="";
					    obj.MAP_ORDEN = 99999;
						obj.MAP_IDESTADO = -1;
					}
 
 
					var wifiInfo = wifiManager.getActiveWifiInfo();
 
					if (wifiInfo != null) {
						if (wifiInfo.getSsid() == wifi.getSsid())
						{
							obj.MAP_ESTADO="Conexión establecida";
							if(isOpen){
							    obj.MAP_IMAGE = "wifi-open-conected.png";
							}else{
							    obj.MAP_IMAGE = "wifi-lock-conected.png";
							}
							obj.MAP_ORDEN = 0;
							obj.MAP_IDESTADO = 1;
						}
					}
 
					if(wifi.getSsid().length > 0){
					    obj.MAP_SSID = wifi.getSsid();
					}else {
					    obj.MAP_SSID = "Red desconocida";
					}
					obj.MAP_SECURITY=wifi.getNetworkSecurity();
				}
 
				coll.unlock();
			}
		}
    }
    self.MAP_LOADING = 0;
    ui.refresh("ContentWifis,frmLoading");
 
    self.getContents("ContentWifis").doSort("MAP_ORDEN ASC");
 
}



Tipo Método
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)


Devuelve la cantidad de objetos cargados en memoria por esta colección.

Los objetos se pueden cargar llamando a LoadAll, llamando a AddItem, o efectuando búsquedas que carguen objetos en memoria (Item o FindObject).

cInstAux=self.getContents("Instalaciones");
cInstAux.loadAll();
vCount=cInstAux.count();
  <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>
 <checkAll refresh="false">
          <action name="runscript">
          <param name="activo" />
            <script language="javascript">
                var objContent = self.getContents("ContentDatosFiltroMultiseleccion");
                if (activo == 1) {
                    var vres = userMsgBox("OPCIONES", "Confirme que desea marcar todos los registros", "2");
                else
                    var vres = userMsgBox("OPCIONES", "Confirme que desea DESmarcar todos los registros", "2");
                }
    	        if (vres == 1) {
                    for ( var i=0; i &lt; objContent.count(); i++) {
                        var item = objContent.get(i);  
                        if (activo == 1) {
                            if ( item.MAP_SELECTED == 1 &amp;&amp; item.REALIZADA == 0 ) {
                                ReportarTareaPendiente2(item);
                                item.MAP_SELECTED = 0;
                            }
                        } else {
                            if (item.MAP_SELECTED == 1 &amp;&amp; item.REALIZADA == 1 ) {
                                DesregistrarPendiente2(item);
                                item.MAP_SELECTED = 0;
                            }
 
                        }
                    }
    	        }
                self.executeNode("applyfilter");
            </script>
        </action>
      </checkAll>


Tipo Método
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)


Crea una copia de la colección y la devuelve.

El contenido de la colección no se copia, en caso de que se quieran copiar también los datos hay que hacerlo a mano.

var cUsuarios=appData.getCollection("Usuarios").createClone();
cUsuarios.setFilter("t1.LOGIN='" + self.MAP_USUARIO);
cUsuarios.startBrowse();
....
cUsuarios.endBrowse();
function userMsgBox(title, msg, type) {
	var collMsgBox, objMsgBox, nResult;
	collMsgBox = appData.getCollection("EspecialMsgbox").createClone();
	objMsgBox = collMsgBox.createObject();
	collMsgBox.addItem(objMsgBox);
	objMsgBox.MAP_TITULO = title;
	objMsgBox.MAP_MENSAJE = msg;
	objMsgBox.MAP_TIPO = type;
 
	nResult = ui.msgBox(objMsgBox);
	return nResult;
}


Tipo Método
Parámetros NewObj: Opcional. True para crear un objeto nuevo (Valor por defecto) o False para crear un objeto que se usará para cargar de base de datos, etc.
Tipo de Dato devuelto XOneDataObject


Crea un nuevo objeto usando las plantillas de la colección.

La clase usada para construir el objeto se sacará del atributo “progid” de la colección.

Cada plataforma utiliza un mapa para pasar los nombres de los progids a los nombres de clase reconocidos por dicha plataforma.

En aquellas en las que hay posibilidad de usar reflexion, se puede usar el atributo “classname” para indicar directamente el nombre de clase, aunque lo más recomendable es utilizar el progid de toda la vida y dejar que la plataforma efectúe la conversión.

Cualquiera que haya sido la clase utilizada, será descendiente de la clase base XoneDataObject o como se llame en cada plataforma.

cMsg=appData.getCollection("MensajesTransacSend");
objMsg=cMsg.createObject();
cMsg.addItem (objMsg);
 
objMsg.CODTECNICO=self.MAP_CODTECDEST;
objMsg.ASUNTO=self.MAP_ASUNTO;
objMsg.OBSERV=self.MAP_OBSERV;
objMsg.save();
 
objMsg=null;
cMsg.clear();
cMsg=null;


  <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>
      <nuevo show-wait-dialog="false">
        <action name="runscript">
          <script language="javascript">
          	var coll = self.getContents("content1");
      		var obj = coll.createObject();
      		coll.addItem(obj);
			appData.pushValue(obj);
		</script>
        </action>
      </nuevo>
// Lectura de DNIs (firma digital)
function signPdfDemo() {
    var fm = createObject("FileManager");
    var nResult = fm.fileExists(appData.getFilesPath() + "PDFbyXOne.pdf");
    if (nResult != 0) {
        ui.showSnackbar("El fichero PDF a firmar no existe. Genérelo primero.");
        return;
    }
    if (self.MAP_CAN_NUMBER == "") {
        ui.showSnackbar("Introduzca el CAN del DNI electrónico");
        return;
    }
    if (self.MAP_PIN == "") {
        ui.showSnackbar("Introduzca el PIN del DNI electrónico");
        return;
    }
	var options = {
		readSignatureCertificate : true,
		canNumber : self.MAP_CAN_NUMBER,
		pin : self.MAP_PIN,
		onDnieRead : function(dnieReadResult) {
			var pdf = createObject("XOnePDF");
			var sSourcePdf = appData.getFilesPath() + "PDFbyXOne.pdf";
			var sSignedPdf = appData.getFilesPath() + "PDFbyXOne_signed.pdf";
			pdf.signPdfWithKey(sSourcePdf, sSignedPdf, dnieReadResult.getSignatureKey(), dnieReadResult.getSignatureCertificateChain());
			pdf.launchPDF(sSignedPdf);
		},
		onDnieReadError : function(sReadError) {
			self.MAP_TEXT = "Error: " + sReadError;
			ui.refreshValue("MAP_TEXT");
		},
		onProgressUpdated : function(sMessage, nProgress) {
			self.MAP_TEXT = "Reading DNIe.\nProgress: " + nProgress + "%\n" + sMessage;
			ui.refreshValue("MAP_TEXT");
		}
	};
	var nfc = createObject("XOneNFC");
	nfc.enableDnieReader(options);
	ui.showSnackbar("Pase su DNI electrónico por el lector NFC");
}

Sobrecarga del createObject


Ahora al método createObject se le puede pasar parámetros.

PARÁMETRO 1 Inicializa los props indicados en el objeto.


Ejemplo:

  var param = {
  USUARIO:”usuario 1”,
 DESCRIPCION:”Descripción de usuario 1”
 }
 var obj = appData.getCollection(“Usuarios”).createObject(param);


PARÁMETRO 2 Agrega el objeto a la colección “addItem”, posibles valores true-false


Ejemplo:

 var param = {
 USUARIO:”usuario 1”,
 DESCRIPCION:”Descripción de usuario 1”
 }
 var obj = appData.getCollection(“Usuarios”).createObject(param,true);



Tipo Método
Parámetros campo o valor para crear el índice
Tipo de Dato devuelto XOneDataObject


Crea un índice de un content en memoria.

let contentMemoria=self.getContents("Content");
contentMemoria.createSearchIndex(["MAP_CAMPO,"]);
contentMemoria.lock();
 
 
contentMemoria.doSearch(campo);
let objContent=contentMemoria.get(0);
if (objContent)
{
    //Encuentra
}


Tipo Método
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)


Devuelve valor solicitado en llamada.

         try {
    	    let coll=appData.getCollection("ComprobarConexion");
            coll.loadAll();
            if (coll.count()==1) {
            	if (coll.get(0).RESULTADO=="##OK##") {
            		return true;
            	}
            }


Tipo Método
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)


Devuelve la cadena de acceso a datos de la colección, con las macros sustituidas, sin los filtros y sin subqueries ni nada.

Se usa básicamente para depurar.


Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto XOneDataObject


Devuelve cantoidad elementos de la colección.

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


Tipo Método
Tipo de Dato devuelto XOneDataObject
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 actual del recorrido startBrowse activo.

Si no hay ningún recorrido activo, esta propiedad vale nothing. Esto es lo que se utiliza para saber que un recorrido se ha acabado, pero claro, eso ya lo saben, así que para qué profundizar.

Excepto las plataformas de PC y web, todas las demás utilizan por defecto el mismo objeto y solamente sustituyen las propiedades al moverse por el recorrido, así que no se deben comparar las referencias sino los valores (preferiblemente de las claves) para saber qué objeto es el que está activo en cada momento o si ha cambiado el objeto actual.

cInst=appData.getCollection("InstalacionesCount");
cInst.setFilter ( "ACTIVO=1 AND NUMINCIDENCIA='" + vb.cstr(self.NUMINCIDENCIA) + "'");
cInst.startBrowse ();
if ( cInst.getCurrentItem() )
{
	if (cInst.getCurrentItem().getValue("ID")>0)
	result=1;
}
cInst.setFilter("");
cInst.endBrowse();
   <entrar>
        <action name="runscript">
          <script language="javascript">
			var ObjB,st_erraut,CollB,CollC,ObjC;
			st_erraut="";
			var CollB = appData.getCollection("Usuarios");
			CollB.setFilter("LOGIN='" + self.MAP_USERNAME.toString() + "'");
			CollB.startBrowse();
			var ObjB = CollB.getCurrentItem();
			if( ObjB === null || ObjB == "undefined"){
				st_erraut = "Nombre de usuario o password incorrecto";
			}
			ObjB = null;
			CollB.endBrowse();
			CollB.clear();
			CollB = null;
			// Si todo OK, intentamos el logueo
			if( st_erraut == ""){
				self.setVariables("##LOGIN_USERCOLL##","Usuarios");
				self.setVariables("##LOGIN_NEWUSER##","LOGIN," + self.MAP_USERNAME);
				self.setVariables("##LOGIN_NEWPASS##","PWD," + self.MAP_PASSWORD);
				self.setVariables("##LOGIN_NEWNOUSERIN##",0);
				appData.failWithMessage(-11888,"##LOGIN_START##");
			}else{
				appData.failWithMessage(-8100,st_erraut);
			}
		</script>
        </action>
      </entrar>
 


Tipo Método
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)


Borra todos los objetos que están cargados en la colección.

Los objetos se borran de la base de datos (si se cumplen las condiciones de borrado) y después se eliminan de la colección.

Si falla alguna de las reglas de eliminación de alguno de los objetos, la ejecución se interrumpe en ese momento.

Es más recomendable utilizar el método browseDeleteAll, pero si ya hemos hecho un loadAll podemos utilizar éste.


Tipo Método
Parámetros ObjectKey: Clave del objeto que se va a borrar. Puede ser una cadena que identifique la clave o un entero que identifique el índice dentro de la colección.
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)


Borra el objeto cuya clave o índice se indica, tanto de la colección como de la base de datos.

Si las reglas de borrado no se cumplen el método falla y lanza un error.

Si falla la ejecución de alguna de las acciones de borrado, el objeto tampoco se elimina y se lanza un error.

  <eliminarFoto refresh="false" show-wait-dialog="false">
        <action name="runscript">
          <param name="index" />
          <script language="javascript">
				var collCont = self.getContents("imagenes");
	            if( collCont != null &amp;&amp; collCont != "undefined"){
		            var obj = createObject("FileManager");
		            var res = obj.fileExists(self.MAP_NOMBREFOTO);
					if(res == 0){
						  obj.delete(self.MAP_NOMBREFOTO);
						  //si se pasa una cadena borra el id 
						  //si se pasa un entero borra el indice del array del contents (Empieza por 0)
						  //En este caso el parámetro viene como cadena
						  collCont.deleteItem(index);
					}else{
						ui.msgBox("El fichero no existe","Aviso",0)
					}
		          	ui.getView(self).refresh("MAP_IMAGENES");
	            }
			</script>
        </action>
      </eliminarFoto>
 <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>
      </eliminar>


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 la cadena de acceso a datos de la colección con todas las macros sustituidas, los filtros aplicados y en caso de que se trate de una colección que soporte subqueries, ya preparada para usarse en la base de datos o en la conexión remota en que se vaya a ejecutar.


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 filtro principal de la colección (Filter) ya desarrollado con las macros sustituidas y listo para usarse dentro de la cadena de acceso a datos.

appData.getCurrentEnterprise().setVariables("COLLFILTER",self.contents("ImpDocumento").getDevelopedFilter());


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 filtro de enlace de la colección (LinkFilter) ya desarrollado y con las macros sustituidas listo para usarse en la cadena de acceso a datos.

appData.getCurrentEnterprise().setVariables("COLLFILTER",self.contents("ImpDocumento").getDevelopedLinkFilter());


Tipo Método
Tipo de Dato devuelto XOneDataObject
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Termina el recorrido activo en la colección.

Si no hay ningún recorrido, esta función no hace nada.

La llamada a este método siempre anula getCurrentItem, pero no afecta a los objetos cargados en memoria mediante loadAll, búsquedas o llamadas a addItem.

cInst=appData.getCollection("InstalacionesCount");
cInst.setFilter("ACTIVO=1");
cInst.startBrowse ();
if ( cInst.getCurrentItem() )
{
	if (cInst.getCurrentItem().getValue("ID")>0)
		result=1;
}
cInst.setFilter("");
cInst.endBrowse();
  <entrar>
        <action name="runscript">
          <script language="javascript">
			var ObjB,st_erraut,CollB,CollC,ObjC;
			st_erraut="";
			var CollB = appData.getCollection("Usuarios");
			CollB.setFilter("LOGIN='" + self.MAP_USERNAME.toString() + "'");
			CollB.startBrowse();
			var ObjB = CollB.getCurrentItem();
			if( ObjB === null || ObjB == "undefined"){
				st_erraut = "Nombre de usuario o password incorrecto";
			}
			ObjB = null;
			CollB.endBrowse();
			CollB.clear();
			CollB = null;
			// Si todo OK, intentamos el logueo
			if( st_erraut == ""){
				self.setVariables("##LOGIN_USERCOLL##","Usuarios");
				self.setVariables("##LOGIN_NEWUSER##","LOGIN," + self.MAP_USERNAME);
				self.setVariables("##LOGIN_NEWPASS##","PWD," + self.MAP_PASSWORD);
				self.setVariables("##LOGIN_NEWNOUSERIN##",0);
				appData.failWithMessage(-11888,"##LOGIN_START##");
			}else{
				appData.failWithMessage(-8100,st_erraut);
			}
		</script>
        </action>
      </entrar>


Tipo Método
Tipo de Dato devuelto XOneDataObject
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Lanza consulta definida previamente.

 let sqlreserva;
                let fecha=new Date();
                sqlreserva="UPDATE gen_reservas SET FECHA_FIN=" + appData.variantToString(fecha);
                sqlreserva=sqlreserva + ",HORA_FIN='" + ponerCeros(fecha.getHours(),2) + ":" + ponerCeros(fecha.getMinutes(),2) + "'";
                sqlreserva=sqlreserva + ",ZONA_FIN='" + obj.MAP_ZONA + "'";
                sqlreserva=sqlreserva + ",DISTANCIA=" + distancia;
                sqlreserva=sqlreserva + ",COSTETOTAL=" + importetotal;
                sqlreserva=sqlreserva + " WHERE NUMERORESERVA='" + user.RESERVABD + "'";
 
                coll.executeSqlString(sqlreserva);
 
  let cuenta=appData.getCollection("CuentaClienteFinReserva");
                cuenta.setLinkFilter("c.NUMERORESERVA='" + user.RESERVABD + "'");
                cuenta.loadAll();
                if (cuenta.getCount()==1) {
                    cuenta.get(0).IMPORTE=importetotal;
                    obj.getParent().MAP_FECHAHORAVERI=ponerCeros(cuenta.get(0).FECHA_INI_SYS.getDate(),2) + "/" + ponerCeros(cuenta.get(0).FECHA_INI_SYS.getMonth()+1,2) + "/" + cuenta.get(0).FECHA_INI_SYS.getFullYear() + "  " + cuenta.get(0).FECHA_INI_SYS.getHours() + ":" + ponerCeros(cuenta.get(0).FECHA_INI_SYS.getMinutes(),2) + ":" + ponerCeros(cuenta.get(0).FECHA_INI_SYS.getSeconds(),2);
                    obj.getParent().MAP_FECHAHORAVERF=ponerCeros(cuenta.get(0).FECHA_FIN_SYS.getDate(),2) + "/" + ponerCeros(cuenta.get(0).FECHA_FIN_SYS.getMonth()+1,2) + "/" + cuenta.get(0).FECHA_FIN_SYS.getFullYear() + "  " + cuenta.get(0).FECHA_FIN_SYS.getHours() + ":" + ponerCeros(cuenta.get(0).FECHA_FIN_SYS.getMinutes(),2) + ":" + ponerCeros(cuenta.get(0).FECHA_FIN_SYS.getSeconds(),2);
                    obj.getParent().MAP_COCHEVER=cuenta.get(0).COCHE;
                    cuenta.get(0).save();
                }
                cuenta.setLinkFilter("");
 
 
                //Liberar Vehiculo Ocupado
                var coll2 = appData.getCollection("RevisarVehiculosOcupados");
                // METODO 1: CON SELECT ONLINE
                // coll2.setMacro("##MACRO##","v.MATRICULA='" + obj.getParent().MAP_COCHE + "'");
                //     // coll2.setMacro('##MACROTABLA##','datoscan' + mesyearaux.toString());
                // coll2.loadAll();
                // if (coll2.getCount()==1) {
                //     coll2.get(0).ESTADO='LIBRE';  
                //     coll2.get(0).save();
                // }
 
                // METODO 2: CON SQL DIRECTO
                coll2.executeSqlString("UPDATE vehiculo SET TARIFA='BASICA',ESTADO='LIBRE' WHERE ESTADO IN ('OCUPADO') AND MATRICULA='" + obj.getParent().MAP_COCHE + "'");
 
 
                //NO muestro el mapa        
                // let sql="SELECT d.LATITUD,d.LONGITUD,'viaje2.png' AS I FROM gen_reservas r LEFT OUTER JOIN datoscan" + mesyearaux.toString() + " d  USE INDEX (idvehiculofecha) ON r.IDVEHICULO=d.IDVEHICULO WHERE r.NUMERORESERVA='" + user.RESERVABD + "' AND d.FECHA>=r.FECHA_INICIO AND d.FECHA<=r.FECHA_FIN ORDER BY d.FECHA ASC ";
                // obj.getParent().getContents('DatosMapaViaje').setMacro('##SQL##',sql);
 
                obj.getParent().MAP_RESERVAFINAL=user.RESERVABD;
 
                actualizarObjetoUser('-','LIMPIA',0,0,0,'-','-');
 
                refrescarMapa();
                obj.getParent().MAP_SETFOCUS="_";
                ui.getView(obj.getParent()).refresh();
                ui.hideWaitDialog();
                ui.getView(obj).exit(); 
            } 
        }


Tipo Método
Tipo de Dato devuelto XOneDataObject
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve el valor del filtro principal de la colección.
El filtro que está en el atributo “filter” de la colección en el mappings NO es este filtro.

Ejemplo de Uso:

var collInc=appData.getCollection("Incidencias");
var filtro=collInc.getFilter();


    self.MAP_LAST_FILTER="";
 
        var plansContent = self.getContents("Plans");
        if(plansContent.getFilter()=="CATEGORY='"+category+"'")
            plansContent.setFilter("");
        else
            plansContent.setFilter("CATEGORY='"+category+"'");
 
        plansContent.unlock();
        plansContent.loadAll();
        plansContent.lock();
        ui.getView(self).refresh("@Plans,"+propName);
 
 
        ui.hideWaitDialog();
    }
 


Tipo Método
Tipo de Dato devuelto XOneDataObject
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 del filtro principal de la colección.
El filtro que está en el atributo “filter” de la colección en el mappings NO es este filtro. Este filtro se añade
al atributo “filter” que esté definido en la colección con un AND.
Este filtro es el que se utiliza en el UI cuando se filtra el contenido mediante los controles visuales.

Modificar este filtro tampoco afecta la selección de un contents, ya que no es el que se usa para limitar los objetos que forman parte de dicho contents.

Ejemplo de Uso:

collInc.setFilter("t1.LOGIN="+appData.variantToString(self.MAP_USUARIO));
 <entrar>
        <action name="runscript">
          <script language="javascript">
			var ObjB,st_erraut,CollB,CollC,ObjC;
			st_erraut="";
			var CollB = appData.getCollection("Usuarios");
			CollB.setFilter("LOGIN='" + self.MAP_USERNAME.toString() + "'");
			CollB.startBrowse();
			var ObjB = CollB.getCurrentItem();
			if( ObjB === null || ObjB == "undefined"){
				st_erraut = "Nombre de usuario o password incorrecto";
			}
			ObjB = null;
			CollB.endBrowse();
			CollB.clear();
			CollB = null;
			// Si todo OK, intentamos el logueo
			if( st_erraut == ""){
				self.setVariables("##LOGIN_USERCOLL##","Usuarios");
				self.setVariables("##LOGIN_NEWUSER##","LOGIN," + self.MAP_USERNAME);
				self.setVariables("##LOGIN_NEWPASS##","PWD," + self.MAP_PASSWORD);
				self.setVariables("##LOGIN_NEWNOUSERIN##",0);
				appData.failWithMessage(-11888,"##LOGIN_START##");
			}else{
				appData.failWithMessage(-8100,st_erraut);
			}
		</script>
        </action>
      </entrar>
      <salir>


Tipo Método
Parámetros SearchCriteria: Criterios de búsqueda. Esta cadena tiene el mismo formato que la usada para poner filtros a la colección, y de hecho puede incluso contener macros y demás.
Tipo de Dato devuelto CXoneDataObject


Busca un objeto siguiendo los criterios de búsqueda que se pasan como parámetro.

El formato usado es el mismo que para filtrar la colección.

Si el objeto no se encuentra como resultado de la búsqueda, el método devuelve Nothing.

var CollB = appData.getCollection("Usuarios");
ObjB = CollB.findObject("LOGIN='"+self.MAP_USUARIO)+"' AND ACTIVO=1");
 
if ( ObjB )
{
   ......
}
function hacerLogin(usuario,contrasenna){
    var obj=getLoginColl();
    var collUser = appData.getCollection("Usuarios");
    var objUser = collUser.findObject("LOGIN='" + usuario.toString() + "'");
    if(objUser !== undefined
        && objUser != null){
        if(objUser.PWD == contrasenna){
            obj["MAP_T_ERROR"] = "";
            ui.refresh("MAP_T_ERROR");
            doLogin(obj,usuario,contrasenna);  
        }else{
            obj["MAP_T_ERROR"] = "Usuario o contraseña incorrectos.";
            ui.refresh("MAP_T_ERROR,frmError");    
        }
 
    }else{
        obj["MAP_T_ERROR"] = "Usuario o contraseña incorrectos.";
        ui.refresh("MAP_T_ERROR,frmError");
    }
} 
 
function comprobarUsuario(usuario){
    var collUser = appData.getCollection("Usuarios");
    var objUser = collUser.findObject("LOGIN='" + usuario.toString() + "'");
    if(objUser == undefined){
        return false;
    }else{
        return true;
    }
}
 
function GrabarContrasenna(usuario,contrasenna){
    var collUser = appData.getCollection("Usuarios");
    var objUser = collUser.findObject("LOGIN='" + usuario.toString() + "'");
    if(objUser !== undefined){
        objUser.PWD = contrasenna;
        objUser.save();
    }
}


Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto Booleano (Entero)
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve True (no cero) si la colección está llena (se ha llamado LoadAll y se han cargado todos los objetos que cumplen con el criterio). Devuelve False (cero) si la colección no se ha cargado con LoadAll, o después de cargarla se han eliminado objetos o se han efectuado búsquedas que modifican el estado de carga de la colección.


Tipo Método
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)


Genera un ROWID utilizando los datos de réplica de la conexión utilizada en la colección, así como datos de tabla y demás.

Este método encapsula al sistema interno de generación de ROWIDs por lo que es bastante seguro usarlo para generar valores únicos.

En todos los entornos que lo soporten se usan los métodos de generación de GUIDs. En aquellos en que este mecanismo no está disponible se trata de usar una maquinaria de generación de números aleatorios lo más segura posible.


Tipo Propiedad
Acceso Lectura
Parámetros Index: ID del grupo cuyo nombre se quiere obtener
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 visible de un grupo de la colección dado su ID.

Si el grupo tiene nodo <platform> dentro y hay plataforma activa, se buscará primero en dicho nodo y después en el nombre del grupo.


Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto Entero
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve la cantidad de grupos que hay declarados en la colección.


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.

Normalmente no se declara campo clave, sino que se usa el valor por defecto (ID). En caso de que el campo clave tenga otro nombre, se define en la cabecera de la colección y ese es el valor que devuelve esta propiedad.


Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto Booleano (Entero)
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve True (no cero) si la colección tiene abierto un recorrido StartBrowse. Claro que también se puede comprobar el CurrentItem, pero en caso de que el recorrido esté al final, CurrentItem será Nothing y sin embargo habrá un recorrido abierto, es decir, recursos de la conexión en uso.

Devuelve False (cero) si no hay ningún recorrido activo.


Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto Booleano (Entero)
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve True (no cero) si la colección está bloqueada usando Lock. Devuelve False (cero) si la colección está libre (su estado normal).


Tipo Propiedad
Acceso Lectura
Parámetros Key:Clave (en formato texto), Indice numérico del objeto, o nombre del campo por el cual se quiere buscar. Val: Opcional. Valor por el que se quiere buscar. Omitido si se va a buscar por clave.
Tipo de Dato devuelto XOneDataObject
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve un objeto de la colección dada su clave llevada a texto, su índice dentro de la colección o el valor de uno de sus campos.

La búsqueda por índice numérico siempre se hace en memoria. La búsqueda por clave o por pareja campo, valor se hace primero en memoria y en caso de no encontrarse el objeto con estas características, se efectúa la búsqueda en la conexión de datos.

Esto permite que se puedan acelerar las búsquedas en colecciones que tienen pocos elementos cargándolos en memoria y manteniéndolos allí durante la ejecución de la aplicación.


Tipo Método
Acceso Lectura
Plataforma Todas las que soporten Javascript


Devuelve el valor del filtro de enlace de la colección.

Este es el filtro que se declara en el atributo “filter” de la colección en el mappings, o en la declaración de los contents.

Ejemplo de Uso:

var collInc=appData.getCollection("Incidencias");
var filtro=collInc.getLinkFilter();


Tipo Método
Acceso Escritura
Tipo de Dato devuelto Texto
Plataforma Todas las que soporten Javascript


Establece el valor del filtro de enlace de la colección.

Este es el filtro que se declara en el atributo “filter” de la colección en el mappings, o en la declaración de los contents y como indica su nombre es un filtro auxiliar que no debería modificarse en tiempo de ejecución.

Aún así, cada cual puede hacer lo que estime conveniente.

Ejemplo de Uso:

    var fm = new FileManager();
	var jsParams = {
 
       // url: "https://....,
        file: documento,
        allowUnsafeCertificates: false,
        parameters: {
         	NNAMEFILE: usuariofile,
        	KEEPFILENMAME:"true",
         	CATEGORIA:tipo
        },
        onSuccess:function(data){
            ui.showWaitDialog("Subiendo fotografía ...");
 
            //SI NO HA DADO ERROR, ENTONCES SE GUARDA EN LA BASE DE DATOS 
            var coll, objuser;
            coll = appData.getCollection("ReplicaFicheros");
            if (tipo=='CARNET_DELANTE' || tipo=='CARNET_DETRAS' || tipo=='FOTO_PERFIL' || tipo=='DNI_DELANTE' || tipo=='DNI_DETRAS') {
                coll.setLinkFilter("USUARIO='" + usuario + "' AND TIPO='" + tipo + "'");
            } else {
                coll.setLinkFilter("RESERVA='" + reserva + "' AND USUARIO='" + usuario + "' AND TIPO='" + tipo + "'");
            }
            coll.loadAll();
            if (coll.count()===0) {
                //INSERT
                objuser=coll.createObject();
                coll.addItem(objuser);
            } else {
              //UPDATE 
                objuser=coll.get(0);
            }
            var namefile, pos, filesave;
            namefile=documento;
            namefile=namefile.split("/");
            pos=namefile.length-1;
            filesave=namefile[pos];
            if (tipo=='CARNET_DELANTE' || tipo=='CARNET_DETRAS' || tipo=='FOTO_PERFIL' || tipo=='DNI_DELANTE' || tipo=='DNI_DETRAS') {
                objuser.USUARIO =usuario;
                objuser.TIPO =tipo;
                objuser.DOCUMENTO = filesave;
            } else {
                objuser.RESERVA =reserva;
                objuser.USUARIO =usuario;
                objuser.TIPO =tipo;
                objuser.DOCUMENTO = filesave;
            }
            objuser.save();
            coll.setLinkFilter('');   
 
            ui.hideWaitDialog();
 
 
            // ficheroSubir=ficheroSubir - 1;
            // if (ficheroSubir===0) {
            //     ui.hideWaitDialog();
            // }
        },
        onError:function(code,description){
            ui.hideWaitDialog();
        },
        onProgress:function(percent){
            // ui.updateWaitDialog("Subiendo...",percent);
        },
 
    };
    //  comprobarEstadoGps()
	sRespuesta = fm.uploadFile(jsParams);
	// 
 
}


Tipo Método
Tipo de Dato devuelto XOneDataObject
Plataforma Todas las que soportan Javascript


Carga en memoria todos los objetos que cumplan con los criterios de filtrado que tiene la colección.

Es importante antes de llamar a este método asegurarse que hay filtros puestos, ya que en caso de que haya demasiados objetos que cumplan los criterios, se puede producir un problema de falta de memoria.

var cCompoAux=appData.getCollection("[[wiki:2.-desarrollo-app:2.4.-scripting-modelo-objetos:b.-javascript:3.-selfdatacoll:ComponentesAux]]");
cCompoAux.setFilter("t1.ACTIVO=1 AND t1.REFCLIENTE LIKE '" + self.getValue("REFCLIENTE") + "'");
cCompoAux.loadAll();
  <after-edit show-wait-dialog="true" refresh="false">
        <action name="runscript">
            <script language="javascript">
                var sPIN= new DebugTools().getDeviceId(); 
                self.getContents("Avisos").setMacro("##MACRO##","d.EMAIL='@@user'");
                self.getContents("Avisos").setMacro("##MACRO2##","IDENTIFICADOR='" + sPIN + "'");
                self.getContents("Avisos").loadAll();
                ui.getView(self).refresh("Avisos");
            </script>
        </action>
    </after-edit>
	<cargarSugerencias2 show-wait-dialog="false" refresh="false">
		<action name="runscript">
			<script language="javascript">
		        if (self.MAP_CARGADO===0) {
		            try {
		                verDialog('A19');
        		        self.MAP_CARGADO=1;
		                self.getContents("Sugerencias").setMacro("##MACRO##","X.EMAIL='" + user.MAP_USER + "' AND DATE_ADD(X.FECHA, INTERVAL -365 DAY)");
        		        self.getContents("Sugerencias").setMacro("##MACRO2##","1=1");
 
        		        self.getContents("Sugerencias").unlock();
        		        self.getContents("Sugerencias").loadAll();
        		        self.getContents("Sugerencias").lock();
        			    ui.getView(self).refresh("Sugerencias");
        			    ui.hideWaitDialog();
		            } catch(e) {
		                ui.hideWaitDialog();
		                showPregunta('P0',self);
		            }
		        } 
			</script>
		</action>
	</cargarSugerencias2>


Tipo Método
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)


Bloquea la colección para evitar que se modifique su contenido.

Si la colección está bloqueada los métodos loadAll y clear no tendrán efecto sobre el contenido de la colección.

La búsqueda de objetos no se ve afectada por el estado de bloqueo de la colección.

  <create show-wait-dialog="false">
		<action name="runscript">
			<script language="javascript">
 
                    if (user.MAP_SESION===0 || user.MAP_TOKEN==="") {
                       self.MAP_INICIADO=0; 
                    } else {
                       self.MAP_INICIADO=1;
                    }
                    self.MAP_GRUPO=1;
			        self.MAP_CARGADO=0;
			        self.MAP_INVISIBLE1=0;
			        self.MAP_QUEVER2=0;  
			        self.MAP_ID=-1;
    			    self.MAP_NCOK=0;
    			    self.MAP_NCNOOK=0;
    			    self.getContents("CuentaClienteCalendario").lock();
    			    self.getContents("Sugerencias").lock();
    			    self.getContents("CuentaClienteBuscar").lock();
    			    self.getContents("Ayuda").lock();
    			    app.loadAyuda(self,"Ayuda","Ayuda",false,null);
			</script>
		</action>
	</create> 
	<verurl show-wait-dialog="false" refresh="false">
		<action name="runscript">
			<script language="javascript">
			    ui.openUrl('https://minits.es/about.php');
			</script>
		</action>
	</verurl>
	<cargarSugerencias show-wait-dialog="false" refresh="false">
		<action name="runscript">
			<script language="javascript">
	            irGrupo('2');
	            self.MAP_GRUPO=2;
	            self.executeNode("cargarSugerencias2");
			</script>
		</action>
	</cargarSugerencias>
	<cargarSugerencias2 show-wait-dialog="false" refresh="false">
		<action name="runscript">
			<script language="javascript">
		        if (self.MAP_CARGADO===0) {
		            try {
		                verDialog('A19');
        		        self.MAP_CARGADO=1;
		                self.getContents("Sugerencias").setMacro("##MACRO##","X.EMAIL='" + user.MAP_USER + "' AND DATE_ADD(X.FECHA, INTERVAL -365 DAY)");
        		        self.getContents("Sugerencias").setMacro("##MACRO2##","1=1");
 
        		        self.getContents("Sugerencias").unlock();
        		        self.getContents("Sugerencias").loadAll();
        		        self.getContents("Sugerencias").lock();
        			    ui.getView(self).refresh("Sugerencias");
        			    ui.hideWaitDialog();
		            } catch(e) {
		                ui.hideWaitDialog();
		                showPregunta('P0',self);
		            }
		        } 
			</script>
		</action>
	</cargarSugerencias2>
	<cargarCalendario show-wait-dialog="false" refresh="true">
		<action name="runscript">
			<script language="javascript">
	            self.MAP_INVISIBLE1=1;
	            self.MAP_GRUPO=3;
	            ui.getView(self).refresh('CuentaClienteCalendario','CuentaClienteBuscar');
	            irGrupo(3);
	            self.MAP_FECHA=new Date();
			</script>
		</action>
	</cargarCalendario>
	<movercalendar show-wait-dialog="false" refresh="false">
        <action name="runscript">
          <param name="parametro" />
          <script language="javascript">
                try {
              		if (parametro=="prev") {
              		    self.getContents("CuentaClienteCalendario").setVariables("moveto","prev");
              		}else {
              		    self.getContents("CuentaClienteCalendario").setVariables("moveto","next");
              		}
          			ui.getView(self).refresh("CuentaClienteCalendario","MAP_TITLE_NAMES_MES","MAP_TITLE_ANO");
                } catch(e) {
                   showPregunta('P0',self); 
                }
      		</script>
        </action>
    </movercalendar>
    <onchange refresh="false">
        <field name="MAP_FECHA">
          <action name="runscript">
            <script language="javascript"> 
                try {
                    let coll=self.getContents('CuentaClienteBuscar');
                    ui.showWaitDialog("Mostrando datos...");
                    let mes=0;
                    mes =self.MAP_FECHA.getMonth() + 1; 
                    coll.setMacro("##MACROFILTER1##","c.USUARIO='" + user.MAP_USER + "' AND DAY(c.FECHA_INI_SYS)=" + self.MAP_FECHA.getDate()  + " AND MONTH(c.FECHA_INI_SYS)=" +mes.toString()  + " AND YEAR(c.FECHA_INI_SYS)=" + self.MAP_FECHA.getFullYear());
                    coll.setMacro("##MACROFILTER2##","c.USUARIO='" + user.MAP_USER + "' AND DAY(c.FECHA)=" + self.MAP_FECHA.getDate() + " AND MONTH(c.FECHA)=" + mes.toString() + " AND YEAR(c.FECHA)=" + self.MAP_FECHA.getFullYear());
 
                    coll.unlock();
                    coll.loadAll();
                    coll.lock();
                    ui.getView(self).refresh('CuentaClienteBuscar');
                    ui.hideWaitDialog();
                } catch(e) {
                    ui.hideWaitDialog();
                    showPregunta('P0',self);
                }
			</script>
          </action>
        </field>


Tipo Propiedad
Acceso Lectura/Escritura
Parámetros Name: Nombre de la macro cuyo valor se quiere leer o asignar
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 o asigna valor a la macro cuyo nombre se indica.

Las macros se sustituyen cuando se evalúan las cadenas de acceso, los filtros y demás, por lo que esta es una forma de lograr que el cambio de estos datos se efectúe de forma dinámica durante la ejecución del programa.

 <identificador show-wait-dialog="false">
        <action name="runscript">
          <param name="param" />
          <script language="javascript">
          	if(param == 1){
          		self.MAP_IDENTIFICADOR = appData.getGlobalMacro("##DEVICEID##");
          	}else{
          		self.getContents("DatosOnlineWS").setFilter("stPIN=" + self.MAP_IDENTIFICADOR.toString());
          		self.getContents("DatosOnlineWS").loadAll();
          	}
		</script>
        </action>
 
  <before-edit>
        <action name="runscript">
          <script language="javascript">
				self.MAP_VERSION = appData.getGlobalMacro("##VERSION##");
				self.MAP_FRAMEWORK = appData.getGlobalMacro("##FRAME_VERSION##");
				self.MAP_XONELIVE = appData.getGlobalMacro("##LIVEUPDATE_VERSION##");
				self.MAP_MID = appData.getGlobalMacro("##MID##");
				self.MAP_IMEI = appData.getGlobalMacro("##DEVICEID##");
				self.MAP_MODELO = appData.getGlobalMacro("##DEVICE_MODEL##");
 
				self.MAP_DEVICE_MANUFACTURER = appData.getGlobalMacro("##DEVICE_MANUFACTURER##");
				self.MAP_DEVICE_OSVERSION = appData.getGlobalMacro("##DEVICE_OSVERSION##");
				self.MAP_DEVICE_OSSDK = appData.getGlobalMacro("##DEVICE_OSSDK##");
				self.MAP_DEVICE_OSSDKCODE = appData.getGlobalMacro("##DEVICE_OSSDKCODE##");
				self.MAP_CURRENT_ORIENTATION = appData.getGlobalMacro("##CURRENT_ORIENTATION##");
				self.MAP_SCREEN_RESOLUTION_WIDTH = appData.getGlobalMacro("##SCREEN_RESOLUTION_WIDTH##");
				self.MAP_SCREEN_RESOLUTION_HEIGHT = appData.getGlobalMacro("##SCREEN_RESOLUTION_HEIGHT##");
				self.MAP_CURRENT_DENSITY = appData.getGlobalMacro("##CURRENT_DENSITY##");
				self.MAP_CURRENT_DENSITY_VALUE = appData.getGlobalMacro("##CURRENT_DENSITY_VALUE##");
				self.MAP_CURRENT_COUNTRY_CODE = appData.getGlobalMacro("##CURRENT_COUNTRY_CODE##");
				self.MAP_CURRENT_LANGUAGE = appData.getGlobalMacro("##CURRENT_LANGUAGE##");
				self.MAP_GROUP = 1;
				self.MAP_TOTAL_PAGES = 3;
			</script>
        </action>
      </before-edit>
 


Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto Entero
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve la cantidad de macros que hay definidas en la colección, tanto las que han recibido valor de forma dinámica como las que se han declarado en el mappings.


Tipo Método
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)


Mueve el recorrido al primer objeto de la colección.

El método está definido en todas las plataformas, pero en las que no se muestran no tiene ningún efecto.

En las plataformas que se muestran solamente funciona cuando la base de datos asociada a la conexión lo soporta.


Tipo Método
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)


Mueve el recorrido al último objeto de la colección.

Al igual que moveFirst, solamente funciona en aquellas plataformas que trabajan con varias bases de datos y en concreto en aquellas que permiten esta operación.

En las plataformas no mostradas el método no tiene efecto ninguno.


Tipo Método
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)


Mueve el recorrido al objeto anterior. Aquí se cumplen las mismas observaciones que para MoveFirst o para MoveLast.


Tipo Método
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)


Mueve el recorrido hacia el siguiente objeto.

Si como resultado del movimiento se llega al final del recorrido, el objeto actual (CurrentItem) se pondrá a Nothing para indicar que el recorrido ha terminado.

function  processNotification(){
    logfuncionesJS("processNotification","js_replica.js");
	// para depuerar metemos aqui del tiron la info que queremos similar
	//testProcessNotification(2);
	try{
        var bsalir=false;
        // D20200304 LM: cambiamos la llamada a DeviceLog incluyendo un createClone para ver si evitamos problemas de concurrencia con los salvados de campos sobre colls que no son 
        var collNotif= appData.getCollection("Notificacion").createClone();
        collNotif.startBrowse();
        while (!bsalir && !isNothing(collNotif.getCurrentItem())){// recorremos todas las notificaciones recibidas y las tratamos
            var objNotif=collNotif.getCurrentItem();
            var tipoNotif= objNotif.TIPO;
            // incluimos EXPEDIENTE, CODINCIDENCIA Y MID del dispositivo (esto ultimo ya veremos si lo usamos o no....)
            switch (tipoNotif) {
                case 1: //ESTADOS: lanzamos le proceso de revision del estado del coche
                    if (inApp()){
                        trazaAverias("CONTROLESTADOS-processNotification - Revisando estado del coche.","replica.js"); 
                        Panel1ResfreshJS(); 
                    }else{
                        trazaAverias("CONTROLESTADOS-processNotification - La aplicacion está cerrada. Flujo sin desarrollar","replica.js"); 
                    }
                    break;
                case 2: //Pedimos al coche que fuerce el envio de una coordenada
                    if (inApp()){
                        trazaAverias("CONTROGPS-processNotification - Capturando coordenadas","replica.js"); 
                        CapturaCoordJS(true);
                    }else{
                        trazaAverias("CONTROGPS-processNotification - La aplicacion está cerrada. Flujo sin desarrollar","replica.js"); 
                    }
                    ui.showToast("replicaok-notificacion TIPO=2");
                    break;
                case 3: //registramos el PUSHID   NO PARECE FUNCIONAR EN EL REPLICAOK-FUERA DE LA APP
                    trazaAverias("PUSHID-processNotification - Previo registrarPushV2","replica.js"); 
                    registrarPushV2();
                    trazaAverias("PUSHID-processNotification - Despues registrarPushV2","replica.js"); 
                    break;
                default://Test. Nos deja información de log de que ha recibido y procesado una petición. 	
                    writelogExceptionJS(" processNotification. Notificacion sin tipo controlado: "+tipoNotif,"js_replica.js");
                    break;
            } 
            // marcamos la notificacion como revisada y anotamos tambien fecha..
            objNotif.MODIFICADO=1;
            objNotif.FECHAM=new Date(); 
            objNotif.save();
            objNotif=null;
            collNotif.moveNext();
        }
        collNotif.endBrowse();
        collNotif.clear();
        replica.start();
    }catch (e) {
        let sterror=e.message;
        writelogExceptionJSv2(" processNotification. ERROR: "+sterror,"js_replica.js",false);
    }  
}


Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto Booleano (Entero)
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve True (no cero) si la clave del objeto es múltiple o False (cero) si la clave es un solo campo.

Esta propiedad devuelve siempre False en las plataformas que no están listadas en la tabla, ya que en esas plataformas no se soporta el uso de claves múltiples.

En realidad las claves múltiples están pensadas para utilizar la maquinaria XOne con bases de datos diseñadas para uso de otras aplicaciones, algo que en la movilidad no es el caso, ya que la idea es que la aplicación móvil lleve una base de datos diseñada desde el primer momento.

La interfaz de integración con el posible backend deberá encargarse de traducir las claves múltiples a una clave única (normalmente un campo autonumérico).


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 de la colección, tal como se ha declarado en el mappings.

function getVisibleCollName() {
        try {
            let view = ui.getView();
            if (!view || view === null) {
                return "";
            }
            let dataObject = view.getDataObject();
            if (!dataObject || dataObject === null) {
                return "";
            }
            let dataCollection = dataObject.getOwnerCollection();
            if (!dataCollection || dataCollection === null) {
                return "";
            }
            let sCollectionName = dataCollection.getName();
            if (!sCollectionName) {
                return "";
            }
            return sCollectionName;
        }catch (e) {
            let sterror=e.message;
            return "";
        }          
    }


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 aplicación propietaria de la colección.

Debido a que en un entorno de ejecución no puede haber más de una aplicación, el valor de esta propiedad es el mismo que el de la variable global appData.


Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto XOneDataObject
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 propietario de la colección.

Esta propiedad tiene valor solamente cuando la colección es un contents.

Si se trata de una colección global o si es una copia de un contents, el valor de esta propiedad es Nothing.

 <ondateselected refresh="true" show-wait-dialog="false" refresh-owner_XX="MAP_FECHA,MAP_TITLE_NAME_MES,MAP_TITLE_ANO,BEdit,BDelete">
        <action name="runscript">
          <param name="DATEVALUE" />
          <param name="TIMEVALUE" />
          <param name="EVENTVALUE" />
          <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();
				var coll = appData.getCollection("ContentTareas");
				var obj = coll.findObject("strftime('%Y-%m-%d',t1.FECHA)=strftime('%Y-%m-%d','" + DATEVALUE.toString() + "')");
				if (obj == null){
					selfDataColl.getOwnerObject().MAP_IDTAREASELECTED= 0;
					selfDataColl.getOwnerObject().MAP_VER= 0;
				}else{
					selfDataColl.getOwnerObject().MAP_IDTAREASELECTED = obj.ID;
					selfDataColl.getOwnerObject().MAP_SELECCIONADO = obj.MAP_DESCRIPCION;
					selfDataColl.getOwnerObject().MAP_VER = 1;
				}
			</script>
        </action>
      </ondateselected>
function getVisibleCollName() {
        try {
            let view = ui.getView();
            if (!view || view === null) {
                return "";
            }
            let dataObject = view.getDataObject();
            if (!dataObject || dataObject === null) {
                return "";
            }
            let dataCollection = dataObject.getOwnerCollection();
            if (!dataCollection || dataCollection === null) {
                return "";
            }
            let sCollectionName = dataCollection.getName();
            if (!sCollectionName) {
                return "";
            }
            return sCollectionName;
        }catch (e) {
            let sterror=e.message;
            return "";
        }          
    }
 


Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto Entero
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve la cantidad de propiedades que tiene la colección.

Si la colección hereda de otra, esta propiedad devuelve el número correcto de propiedades (propias más las heredadas del padre). Aunque el mecanismo de herencia no es lo que se dice muy decente, al menos lo que funciona funciona en todas las plataformas.

De todas maneras aquello de tratar de no usar el mecanismo de herencia sigue vigente hasta nuevo aviso.


Tipo Propiedad
Acceso Lectura
Parámetros Index:Indice numérico de la propiedad cuyo nombre se quiere conocer.
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 de una propiedad de la colección dado su índice numérico (en orden de declaración en el mappings).

Con este nombre se pueden acceder las propiedades y métodos que llevan como parámetro un nombre de campo.


Tipo Propiedad
Acceso Lectura
Parámetros FieldName:Nombre del campo tal y como está declarado en el mapping.
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 título de la propiedad (campo de datos) de la colección.

Si hay una plataforma activa y esta propiedad tiene nodo <platform> se buscará primero en dicho nodo el atributo “title”. Si no se encuentra, se buscará el atributo “title” de la propiedad, y en caso de no aparecer se devuelve el texto del nodo <prop>.

Si el nodo no tiene texto, se devuelve el nombre del campo.


Tipo Propiedad
Acceso Lectura
Parámetros FieldName:Nombre del campo tal y como está declarado en el mapping.
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)


Tipo Propiedad
Acceso Lectura
Parámetros FieldName:Nombre del campo tal y como está declarado en el mapping.
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 tipo de la propiedad de datos tal como está declarado en el mappings.

Devuelve el nombre del grupo a que pertenece la propiedad en la colección.

Para buscar el nombre se siguen las reglas de plataformas mostradas en las propiedades anteriores.


Tipo Propiedad
Acceso Lectura
Parámetros FieldName:Nombre del campo tal y como está declarado en el mapping.
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 valor del campo “visible” de la propiedad.

Cumple las reglas de plataformas descritas anterioremente. Si al final de todas las pruebas no hay ningún valor que devolver, se devuelve “1”, ya que el valor por defecto de visibilidad es siempre 1.


Tipo Método
Tipo de Dato devuelto XOneDataObject
Plataforma Todas las que soportan Javascript



Ejemplo:

  var theColl = self.getOwnerCollection();
  var lasPropiedades = theColl.getXmlNode().clone();
  theColl.reload(lasPropiedades);


Tipo Método
Parámetros Index:Indice numérico del objeto que se quiere sacar de la colección o clave de texto para buscar el objeto en la colección y sacarlo de ella.
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)


Elimina de la colección el objeto cuyo índice o clave se pasa como parámetro.

El objeto no se elimina de la base de datos, solamente de la colección.

                           if(collIc.get(i) != null){
    						fechaIncid = fechaIncid.replace(/-/g, "/");
 
    						var minutosActuales = fechaAtrasada.substring(14,16);
    						var minutosIncid = fechaIncid.substring(14,16);
 
 
    						//var fechaIncid = new Date(collIc.get(i).FEC_INICIO);
    						//ui.msgBox("Filtro: " +minutosFiltro + "fecha: " + fechaAtrasada,"",0);
 
    						//ui.msgBox(fechaAtrasada + "-" + minutosActuales, "", 0);
    						if((minutosActuales - minutosIncid) < minutosFiltro){
    						    collIc.removeItem(i);
    						    i--;
    						}
    						}
    					}
 
    					itot = collIc.count();
    					for( i=0; i <= itot-1; i++){
 
    						var objIc = collIc.get(parseInt(i));
    						iSumCLi = iSumCLi + parseInt(objIc.CAN_CLIENTES_BT);
    						iSumPot = iSumPot + parseInt(objIc.CAN_POT_INSTALA);
 
    					}
 


Tipo Método
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)


Graba todos los objetos que contiene la colección.

Si alguna grabación falla el método se detiene y se lanza el error ocurrido.


Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto Ninguno


Ejemplo:

  var theColl = self.getOwnerCollection();
  var lasPropiedades = theColl.getXmlNode().clone();
  var mMapTexto = lasPropiedades.selectSingleNode("prop", "name", "MAP_TEXTO");
 



Tipo Propiedad
Acceso Lectura/Escritura
Tipo de Dato devuelto Entero
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve o asigna la cadena de ordenamiento a la colcción.

La sintaxis es la misma que debe tener una sentencia ORDER BY en una cadena SQL.
El valor que tiene esta propiedad cuando se crea la colección es el valor del atributo “sort” de la cabecera de la colección.

function fillMessagesContent(colMUser,page,cant) {
    var colMsg,obj,n,i,nInit,nEnd,ObjB;
	colMsg=appData.getCollection("MensajesReader");
 	colMsg.setFilter("IDCHAT="+self.MAP_IDCHATSEL+"");
	colMUser.unlock();
	colMUser.clear();
	colMUser.loadAll();
	colMsg.setSort("FECHA ASC");
	colMsg.startBrowse();
	while (colMsg.getCurrentItem() !== undefined && colMsg.getCurrentItem() != null) {
	    obj=colMsg.getCurrentItem();
		addUserMessage(colMUser,obj,0,obj.ROWID);
		colMsg.moveNext();
	}
	colMsg.endBrowse();
	colMsg.clear();
	colMsg = null;
	colMUser.lock();
	ui.refresh("Chatear");
}
<buscar show-wait-dialog="false">
        <action name="runscript">
          <param name="param" />
          <script language="javascript">
          <![CDATA[
          	if (param==="1") {
          		// No filtra bien porque los campos de busqueda, no pierden el foco correctamente al dar al boton de buscar
          		self.getContents("DatosOnlineJSON").setFilter("");
          		if (len(self.MAP_FILTRONOMBRE)!==0)
          			self.getContents("DatosOnlineJSON").setFilter("NOMBRE like '%" + cstr(self.MAP_FILTRONOMBRE) + "%'");
 
          		if (len(self.MAP_FILTRODIRECCION)!==0)
          			if (len(self.getContents("DatosOnlineJSON").getFilter())=0)
          				self.getContents("DatosOnlineJSON").setFilter("DIRECCION like '%" + cstr(self.MAP_FILTRODIRECCION) + "%'");
          			else
          				self.getContents("DatosOnlineJSON").setFilter(self.getContents("DatosOnlineJSON").getFilter() + " AND DIRECCION like '%" + cstr(self.MAP_FILTRODIRECCION) + "%'");
          	} else {
          		if (self.MAP_ORDEN==="ASC") {
          			self.MAP_ORDEN="DESC";
          			self.MAP_BTORDEN="sortZA.png";
					self.MAP_BTORDENCLICK="sortZA_click.png";
          		} else {
          			self.MAP_ORDEN="ASC";
          			self.MAP_BTORDEN="sortAZ.png";
					self.MAP_BTORDENCLICK="sortAZ_click.png";
          		}
          		self.getContents("DatosOnlineJSON").setSort("NOMBRE " + cstr(self.MAP_ORDEN));          		
          	}
      		self.getContents("DatosOnlineJSON").unlock();
          	self.getContents("DatosOnlineJSON").loadAll();
			self.getContents("DatosOnlineJSON").lock();
			]]>
		</script>
        </action>
      </buscar>


Tipo Método
Parámetros Count: Opcional. True para contar los objetos que se recorrerán o False (valor por defecto) para no lanzar el conteo.
Tipo de Dato devuelto Entero
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Inicia un recorrido siguiendo las reglas de la cadena de acceso, filtros y ordenamiento de la coleccóin.

Si hay al menos un objeto, este se carga en el CurrentItem. Si se pasa True como parámetro, la colección cuenta la cantidad de objetos que se van a recorrer.

var Usuarios=appData.getCollection("Usuarios").createClone();
Usuarios.setFilter("t1.LOGIN='" + Cstr(This("MAP_USUARIO")) + "'");
Usuarios.startBrowse();
var Usuario=Usuarios.getCurrentItem();
var UCorrecto=false;
if (Usuario)
{
	if (self.MAP_PWD = Usuario.PWD)
		UCorrecto = true;
 
}
Usuarios.endBrowse();
Usuario=nothing;
Usuarios=nothing;



Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto Booleano (Entero)
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve True (no cero) si la colección utiliza una clave que no es numérica (normalmente se emplea junto con “idfieldname” para utilizar juegos de claves diferentes a los que se emplean en las bases de datos XOne).

Devuelve False (cero) cuando la clave es numérica (valor por defecto).
La forma de contar dependerá de la plataforma y de la base de datos.


Tipo Método
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)


Desbloquea la colección para que se puedan usar nuevamente clear y loadAll.

  if (!isEmptyString(obj)) {
                callOnlineApi(obj,"/api/App/Sugerencia",{
                    id: obj.MAP_ID,
                    email:user.MAP_USER,
                    sugerencia: obj.SUGERENCIA,
                    numerocuenta: obj.NUMEROCUENTA
                    },function(objself,jsresult) {
                        objself.MAP_QUEVER2=0;
                        objself.getContents("Sugerencias").unlock();
                        objself.getContents("Sugerencias").loadAll();
                        objself.getContents("Sugerencias").lock();
                        ui.refresh();
                    },function(objself,jsresult) {
                        app.globalErrors(objself,jsresult);
 
                    });
	<refrescarmp>
	    <action name="runscript">
            <param name="grupo" />
            <script language="javascript">
                try {
                    self.getContents("MediosPago").unlock();
                    self.getContents("MediosPago").loadAll();
                    self.getContents("MediosPago").lock();
                    ui.getView(self).refresh();
                } catch(e) {
                    showMensajes('G6');
                }
            </script>
        </action>
	</refrescarmp>


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 que se usa para las actualizaciones.

Normalmente este campo es el mismo que IdFieldName, aunque pueden darse casos en los que se lea en un objeto y se escribe en otro, por lo que el campo de actualización puede ser diferente.

También puede ocurrir que el campo clave esté cualificado y se quiera utilizar este sin cualificar para poder actualizar los datos.


Tipo Propiedad
Acceso Lectura/Escritura
Parámetros Item:Nombre de la variable que se quiere leer o asignar.
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 o asigna valor a la variable cuyo nombre se indica.

Las colecciones también pueden tener variables, lo que permite que haya un entorno realmente global para almacenar valores que vayan más allá de los ámbitos de script, ya que las colecciones globales siempre lo son.

Los valores almacenados en las variables de las colecciones globales pueden mantenerse allí mientras se mantenga la ejecución de la aplicación o mientras no se limpien las variables.

  <onback>
        <action name="runscript">
          <script language="javascript">
                if(self.MAP_FUNCION == "VIDEO")
                {
                    appData.getCurrentEnterprise().getVariables("lastObjectBeforeCamera").setValue(self.MAP_RESULT_PREVIEW, appData.getCurrentEnterprise().getVariables("lastVideo"));
                    ui.getView(appData.getCurrentEnterprise().getVariables("lastObjectBeforeCamera")).refreshAll(self.MAP_RESULT_PREVIEW+","+self.MAP_PROPS_TO_REFRESH);
                    appData.getCurrentEnterprise().setVariables("lastVideo", "");
                }
                appData.failWithMessage(-11888,"##EXIT##");
            </script>
        </action>
      </onback>
 
 <code javascript>
  <refrescarmapa show-wait-dialog="false" refresh="false">
      <action name="runscript">
          <script language="javascript">
              app.estadoCuenta.readEstadoCuenta(self,function(jsResult){});
              app.loadDatosCoches(appData.getCurrentEnterprise().getVariables('OBJETOMENUAPP'),"DatosMapa","MapaDatos",false);
              if (user.MAP_REFRESCAR_ZONAS===1) {
                  app.drawArea(self, "MapaDatos");
              }
          </script>
      </action>
  </refrescarmapa>
  
 </code>