appData


Javascript es CASE SENSITIVE, por lo tanto, los nombres de los objetos y los nombres de los métodos, tendrán que escribirse en la notación lowerCamelCase, es decir, la primera palabra del método u objeto en minúsculas y las demás palabras con la primera letra en mayúsculas.

Por Ejemplo: appData.getCollection(“Gastos”)


El objeto appdata contiene la referencia a la aplicación XOne dentro de la cual se está ejecutando cualquier script.

Sea cual sea el nivel de anidamiento, el ámbito activo o cualquier otra condición, este objeto es siempre el mismo y siempre está disponible. Sus Métodos son los siguientes:

Tipo Propiedad
Acceso Lectura/Escritura
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 la macro ##ENTIDCOLL## tal como quedaría en los filtros de los SQLs o en cualquier otro lugar que se sustituya la macro.

Se puede asignar valor a esta macro para que al sustituir ##ENTIDCOLL## se haga con el valor asignado a esta propiedad (i.e. Durante el <onlogon> para trabajar con los filtros de todas las colecciones que usen esta macro.)

Ejemplo de Uso:

 ui.showToast(appData.getAllowedEnterprise);
Tipo Propiedad
Acceso Lectura/Escritura
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 la macro ##USERIDCOLL##.
El comportamiento es similar al de allowedenterprises, es decir, se puede asignar para que se use el nuevo valor en los filtros y demás.

Ejemplo de Uso:

ui.showToast(appData.getAllowedUsers);
Tipo Función
Acceso Lectura
Tipo de Dato devuelto Texto


Devuelve la ruta en la que se está ejecutando la aplicación.

Esta ruta es la que se utiliza como raíz para la búsqueda de todos los ficheros de datos y de configuración (mappings, appwizard, etc.) así como los ficheros de script y la base de datos si su acceso lleva una ruta (i.e. SQLite).

Ejemplo de Uso:

var fichero=appData.getAppPath() + "files/AlmeriaGranada.txt";
<script language="javascript">
	var filemanager01 = createObject("FileManager");
	var lst = filemanager01.listDirectories(appData.getAppPath());
	if ( lst != null ){
	self.MAP_LISTADO = " Los directorios son: \r\n";
	for ( var i = 0; i &lt; lst.length; i++){
	self.MAP_LISTADO = self.MAP_LISTADO + lst[i].toString().replace(appData.getAppPath()," - ") + "\r\n";
		}
	}else{
	ui.showToast("No hay carpetas...");
		}
</script>
function deleteApp() {
    let sBadPath = appData.getAppPath() + "../app_FileManager/";
    let fm = new FileManager();
    if (fm.directoryExists(sBadPath) !== 0) {
        ui.showToast("Nada que hacer");
        return;
    }
    let nResult = fm.delete(appData.getAppPath() + "../files/lastexecuted.ini");
    if (nResult !== 0) {
        ui.showToast("Error al borrar lastexecuted.ini");
        // Continuar
    }
    nResult = fm.deleteDirectory(sBadPath);
    if (nResult !== 0) {
        ui.showToast("Error!");
        return;
    }
    if (nResult === 0) {
        ui.showToast("OK!");
        appData.exit();
        return;
    }
}
Tipo Función
Acceso Lectura
Tipo de Dato devuelto Texto


Devuelve la ruta donde está localizado un archivo.

Ejemplo de Uso:

 <selecteditem refresh="false" show-wait-dialog="true">
        <action name="runscript">
          <script language="javascript">
      	        var fm = createObject("FileManager");
                var nResult = fm.fileExists(appData.getFilesPath() + self.DOCUMENTO.toString());
                if (nResult != 0) {
                    ui.showToast("Descargando fichero...");
                    var documento="https://crm2.fertinagro.es/files/" + self.DOCUMENTO.toString();
    			    var estado=fm.download(documento,self.DOCUMENTO.toString());
                    if (estado==0) {
                        ui.openFile(self.DOCUMENTO);
                    } else  {
                       ui.showToast("Error descargando el documento. Inténtelo de nuevo más tarde."); 
                    }
                } else {
                    ui.openFile(self.DOCUMENTO);
                }
	 	 	  </script>
        </action>
      </selecteditem>
 
Tipo Función
Acceso Escritura
Parámetros string ruta: Nombre de la nueva ruta a aplicar.
Tipo de Dato devuelto Ninguno


Establece el valor de una nueva ruta de ejecución de la aplicación.

Ejemplo de Uso:

appData.setAppPath("\carpeta1\carpeta2\images\capturas\");



getConnString()/ setConnString(string value)

Tipo Función
Acceso Lectura/Escritura
Tipo de Dato devuelto Texto


Devuelve o asigna la cadena de conexión de la conexión principal de la aplicación.

Normalmente, las aplicaciones tienen una conexión principal y de forma opcional pueden tener un número adicional de conexiones.
Esta propiedad se refiere a la conexión principal de la aplicación.
Modificar el valor de esta propiedad después que se ha llamado a iniciarapp no tiene efecto en el funcionamiento del programa, por lo que se debe asignar antes de iniciar el runtime, o en su defecto, cambiarla, llamará a terminateapp y después volver a iniciar la aplicación (logon incluido).

Ejemplo de Uso:

	self.MSG = appData.getConnString();
	appData.getConnString("");



getConsoleOutput()/setConsoleOutput(string value)

Tipo Función
Acceso Lectura/Escritura
Tipo de Dato devuelto Texto


Contiene una cadena con todo lo que se ha escrito en la consola de ejecución mediante writeConsoleString.
Se puede cambiar el valor, lo cual se puede usar para reiniciar el contenido de la consola:

Ejemplo de Uso:

	self.MSG = appData.getConsoleOutput();
	appData.setConsoleOutput("");



Tipo Función
Acceso Lectura
Tipo de Dato devuelto Data Object


Devuelve un objeto de datos representando la empresa que está actualmente seleccionada (empresa del usuario logueado).

Este objeto se asigna después del proceso de logon, de modo que si se llama antes de que se conecte el usuario, su resultado será Nothing.

Si el logon falla, o el usuario no tiene empresa asignada, el valor de esta propiedad también será Nothing.
Por tanto, no se debe asumir que tiene valor siempre.

Ejemplo de Uso:

		var collGPS =appData.getCollection("ContentConectarGPS");
	collGPS.startBrowse();
	var x =collGPS.getCurrentItem();
	if(typeof x !== "undefined"){
    	if (x!==null) {
    		   if (x.STATUS == 1) {
    			    // si status vale 1 significa que no hay error de conexion con el servicio
    			    if (x.HGPS.length>0) {
    				      if (x.LATITUD!=="") 
    				      		latitud=parseFloat(x.LATITUD);
    				      if (x.LONGITUD.length>0) 
    				      		longitud=parseFloat(x.LONGITUD);
    			    }
    		   } else {
    		   		latitud=appData.getCurrentEnterprise().getVariables("LATITUD");
    				longitud=appData.getCurrentEnterprise().getVariables("LONGITUD");
    		   }
    	} else {
    		latitud=appData.getCurrentEnterprise().getVariables("LATITUD");
    		longitud=appData.getCurrentEnterprise().getVariables("LONGITUD");
    	}
	}
	collGPS = null;
	x = null;
 
    // La guardamos en variable global si es distinta
	if (appData.getCurrentEnterprise().getVariables("LATITUD")!==latitud || 
	    appData.getCurrentEnterprise().getVariables("LONGITUD")!==longitud) {
		appData.getCurrentEnterprise().setVariables("LATITUD",latitud);
	    appData.getCurrentEnterprise().setVariables("LONGITUD",longitud);
		distinta=1;
	}


function autenticadoOk(objself,json) {
    objself.MAP_VERIS = 0;
    objself.MAP_VERLOGIN = "icono-usuario-registrado.png";
    let collLocal=appData.getCollection("UsuariosNoReplica");
    let obj=collLocal.get("EMAIL",objself.MAP_EMAILUSER.trim().toString());
    if (obj === null || obj === undefined) {
        obj=collLocal.createObject();
        collLocal.addItem(obj);
        obj.EMAIL=objself.MAP_EMAILUSER.trim();
    }
    obj.PWD=user.MAP_TLPASSENCRIPTADA;
    obj.IDENTIFICADO=1;
    objself.MAP_TLSESION=obj.EMAIL;
    objself.MAP_EMAILUSER=obj.EMAIL;
    user.MAP_USERPUSH=obj.EMAIL;
    objself.MAP_TLPASS="";
    obj.save();
    user.MAP_SESION=1;
    user.MAP_USER=objself.MAP_TLSESION;
 
    setLastUsernameAndPassword(objself.MAP_EMAILUSER, user.MAP_TLPASSENCRIPTADA);
 
    appData.registerPush(sendPushTokenLoginInternal);
 
    readEstadoCuenta(objself);
 
    ui.getView(objself).refresh("MAP_BT_DISPONIBLE","MAP_BT_LOGUEADO","MAP_USERREGISTRADO","flotantesuperior","MAP_BT_INFO","MAP_BT_OPCION1_DR");        
 
    ui.hideSoftwareKeyboard();
    ui.hideWaitDialog();
    showMensajes('B2');  
 
    if (user.MAP_RESERVAR==1) {
        irColl("Reserva");    
    }  
}



getDatemask() / setDatemask(string value)

Tipo Función
Acceso Lectura/Escritura
Tipo de Dato devuelto Texto


Contiene la máscara de fecha de la conexión principal de la aplicación.

Esta máscara no tiene que ver con el orden de fecha del local del sistema operativo que se esté usando, sino con la de la base de datos de la conexión principal.

Se puede modificar en cualquier momento, aunque lo suyo sería cambiarla antes de hacer nada con la conexión, ya que normalmente al iniciarse una aplicación se hacen accesos a base de datos, y si hay alguno de ellos que lleve campos de fecha, el valor de datemask ya debería ser correcto en ese momento.

Esta propiedad normalmente la inicializa el framework y como mucho lo que se hace con ella es consultarla.


Tipo Método
Parámetros Source: Cadena a descifrar.Flags: Opciones de encriptación. Reservado, debe ser cero.
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)


Descifra una cadena de texto que se pasa como parámetro.

Utiliza como clave la que se haya asignado mediante los ficheros de claves, el almacén de certificados local, o usando valores aleatorios, dependiendo del valor del parámetro Flags.
La cadena se debe suministrar en Base64.
La función convertirá la cadena en un bloque binario que será posteriormente descifrado y devuelto en forma de cadena.

Ejemplo de Uso:

	stDec=appData.decryptString(stEnc,0);



Tipo Método
Parámetros commandstring/sentenciasql
Tipo de Dato devuelto Texto


Ejecuta una sentencia SQL en la conexión principal de la aplicación.

  1. Si la réplica está activa (isReplicating=True) la sentencia se ejecutará dejando las trazas correspondientes en la cola de réplica.
  2. Solo se pueden ejecutar INSERT, UPDATE o DELETE, no se pueden hacer truncates ni ninguna otra instrucción SQL.
  3. No se pueden utilizar macros.


Ejemplo de Uso:

appData.executeSql("UPDATE Gen_Rutas SET VISITADO=0 WHERE IDUSUARIO=" + self.IDUSUARIO.toString() );



Tipo Método
Parámetros Source: Cadena a encriptar. Flags: Opciones de encriptación. Reservado, debe ser cero.
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)


Cifra y codifica una cadena que se pasa como parámetro.
La clave usada dependerá del valor del parámetro Flags.
La cadena se devuelve una vez cifrada en formato Base64 para poder almacenarse en un campo de base de datos o en un fichero de texto.

Ejemplo de Uso:

stEnc=appData.encryptString(st,0);




Tipo Método
Parámetros Code: Numérico. Código del error con el que se quiere fallar. Para que se considere un error por parte de las maquinarias debe ser negativo.Existen códigos reservados para determinadas acciones. Se analizan en la sección correspondiente.Message: Mensaje con el que se quiere fallar
Tipo de Dato devuelto Ninguno


Esta función se emplea para indicarle a la maquinaria que algo ha fallado dentro del script.

El código pasado como parámetro será el que quede en los datos de error de appData.error() después de llamar a esta función.

Es importante tener en cuenta que después de llamar a esta función el script continúa ejecutándose, por lo que para fallar se debe llamar a esta función justo al final del script, o en caso de que se trate de una función que encapsule el trabajo de la acción, debe ir seguida de una instrucción de ruptura de la función.
En otras palabras, sólo debemos fallar una vez y no seguir ejecutando código de script después de sacar el mensaje de error.


Ejemplo de Uso:

if (self.IMPRESO !=2)
{
	var st_msg ="";
	if (self.getValue("TESTIFICADOR") == "" ) 
	{
		st_msg="Debe indicar un Testificador.";
	}
 
	if (st_msg == "" )
	{  
		self.IMPRESO =2;
		self.setValue("LEIDO",0);  //Es lo mismo que poner self.LEIDO=0;
		self.save();
	}
	else
	{
		appData.failWithMessage(-8100,st_msg);
	}
}



Tipo Método
Parámetros Name: Nombre de la colección que se quiere obtener
Tipo de Dato devuelto xonecollection


Devuelve la colección global cuyo nombre se indica.

Si la colección no existe, devuelve Nothing. Las colecciones globales son únicas, por lo que llamar varias veces a esta función con el mismo nombre devolverá siempre la misma colección.

El nombre de la colección distingue entre mayúsculas y minúsculas.
Ejemplo de Uso:

  var dispo=appData.getCollection("Dispositivos").getObject("CODIGO",appData.getCurrentEnterprise().getVariables("APP_device"));
  if (dispo.getCurrentItem())
  {
	self.IDDEVICE=dispo.getValue("ID");
	dispo=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>
 
function autenticadoOk(objself,json) {
    objself.MAP_VERIS = 0;
    objself.MAP_VERLOGIN = "icono-usuario-registrado.png";
    let collLocal=appData.getCollection("UsuariosNoReplica");
    let obj=collLocal.get("EMAIL",objself.MAP_EMAILUSER.trim().toString());
    if (obj === null || obj === undefined) {
        obj=collLocal.createObject();
        collLocal.addItem(obj);
        obj.EMAIL=objself.MAP_EMAILUSER.trim();
    }
    obj.PWD=user.MAP_TLPASSENCRIPTADA;
    obj.IDENTIFICADO=1;
    objself.MAP_TLSESION=obj.EMAIL;
    objself.MAP_EMAILUSER=obj.EMAIL;
    user.MAP_USERPUSH=obj.EMAIL;
    objself.MAP_TLPASS="";
    obj.save();
    // appData.getCurrentEnterprise().setVariables("SESION",1);
    // appData.getCurrentEnterprise().setVariables("USERSESION",objself.MAP_TLSESION);
    user.MAP_SESION=1;
    user.MAP_USER=objself.MAP_TLSESION;
 
    setLastUsernameAndPassword(objself.MAP_EMAILUSER, user.MAP_TLPASSENCRIPTADA);
 
    appData.registerPush(sendPushTokenLoginInternal);
    readEstadoCuenta(objself);
    ui.getView(objself).refresh("MAP_BT_DISPONIBLE","MAP_BT_LOGUEADO","MAP_USERREGISTRADO","flotantesuperior","MAP_BT_INFO","MAP_BT_OPCION1_DR");        
    ui.hideSoftwareKeyboard();
    ui.hideWaitDialog();
    showMensajes('B2');  
 
    if (user.MAP_RESERVAR==1) {
        irColl("Reserva");    
    }  
}
Tipo Método
Tipo de Dato devuelto xonecollection
Plataforma Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Devuelve el número de colecciones que hay definidas en la aplicación.

	self.MSG = appData.getCollectionCount();
	appData.sgetCollectionCount("");


function reloadAnnos(){
	var sYear = (new Date()).getFullYear(),sMaxYear = parseInt(sYear) - 20,index = 1;	
 
	var collAnno = appData.getCollection("Annos");
	var collAnnoSinActual = appData.getCollection("AnnosSinActual");
 
	for( var i=0; i <= 19; i++){
		var ObjAnno = collAnno.createObject();
 
		ObjAnno.ID = index;
		ObjAnno.DESCRIPCION = (parseInt(sYear) - parseInt(i)).toString();
 
		if((parseInt(sYear) - parseInt(i)).toString() != sYear){
			var ObjAnnoSinActual = collAnnoSinActual.createObject();
			ObjAnnoSinActual.ID = index;
			ObjAnnoSinActual.DESCRIPCION = (parseInt(sYear) - parseInt(i)).toString();
			collAnnoSinActual.addItem(ObjAnnoSinActual);
		}	
 
		collAnno.addItem(ObjAnno);
		index = parseInt(index) + 1;
	}
 
	collAnno.lock();
	collAnnoSinActual.lock();
 
}
Tipo Función
Parámetros Cadena: Nombre de la macro que se quiere averiguar el valor
Tipo de Dato devuelto Cadena

Devuelve el valor de la macro que se le pase en el primer parámetro.
Ejemplo de Uso:

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


function verLog(obj) {
 
    //Se revisa si tiene que mostrar la version o no
    let log=appData.getCollection("ComprobarLog").findObject("ID=" + user.IDEMPRESA);
    if (log !== null) {
        if (log.VERSION !== obj.MAP_VERSIONVER) {
            //Se ponen las versiones
            obj.MAP_VERSIONVER="Versión APP: " + appData.getGlobalMacro("##VERSION##");
            obj.MAP_VERSIONFRAME="Versión Framework: " + appData.getGlobalMacro("##FRAME_VERSION##");
            obj.MAP_VERLOG=1;
            //Mostrar el Log con los cambios
            obj.MAP_CHANGELOG=mostrarLog(obj.MAP_VERSIONVER);
            cerrarLog(obj);
            ui.getView(obj).refresh("BTOKLOG","botonesdrawer","MAP_CHANGELOG","changelog","MAP_VERSIONVER","MAP_VERSIONFRAME");    
        }
    }
}


Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto Booleano (Entero)


Esta propiedad tiene como valor True si la aplicación está replicando o False cuando las operaciones SQL no generan datos de réplica.

Cuando la aplicación tiene varias conexiones, esta propiedad de appData solamente se refiere a la conexión principal.

Ejemplo de Uso:

if (appData.isReplicating())
{
  .....
}


Obsoleto. Se recomienda usar Colecciones sin Réplica que permiten escribir en la BD local sin enviar operaciones al servidor


Tipo Método
Acceso Escritura


Este método asigna valor a la propiedad isReplicating. Valor True si queremos que la aplicación replique(Por defecto), False las operaciones SQL no generarán datos de réplica.


Ejemplo de Uso:

appData.setIsReplicating ( false );
 
objInc=appData.getCollection("IncidenciasLeidas").getObject(self.getValue("ID").toString());
objInc.OPCIONES=100;
objInc.save();
objInc=null;
appData.getCollection("IncidenciasLeidas").clear();
 
appData.setIsReplicating ( true );


Tipo Función
Acceso Lectura/Escritura
Tipo de Dato devuelto Texto


Contiene el prefijo que se le adiciona a las tablas de la base de datos para la conexión principal.

Para las demás conexiones que tenga la aplicación habrá que indicar este dato en la definición de cada una de ellas.

Por defecto los frameworks inicializan este valor con “Gen”.

Es importante tener en cuenta que el guión no debe incluirse en el prefijo, ya que lo añade la maquinaria.

	self.MSG = appData.getObjectPrefix();
	appData.getObjectPrefix("");


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


Devuelve un valor sacado del tope del stack de parámetros de la aplicación.

Este mecanismo se usa para intercambiar datos entre scripts ejecutados en diferentes ámbitos, con recursividad incluida.

Si el stack está vacío, la función causará un error de ejecución.

Debido a las mejores realizadas en las diferentes plataformas, este método es utilizado internamente y ya no se utiliza en los scripts.


	self.MSG = appData.popValue();
	appData.popValue("");


Tipo Método
Parámetros object
Tipo de Dato devuelto Ninguno


Abre una nueva ventana con el objeto que se le ha pasado como parámeto.

Ejemplo de Uso:

<nuevo show-wait-dialog="false" refresh="true">
        <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>



Similar a pushValue, pero al lanzar el nuevo objeto en edición, cierra previamente la ventana que lo llama.

Ejemplo de Uso:

appData.pushValueAndExit(objAux);



Tipo Función
Acceso Lectura
Tipo de Dato devuelto Entero


Devuelve el MID con que se ha configurado la conexión principal de la aplicación para replicar.

Cuando la aplicación se inicializa, se leen los valores de réplica del registro o de donde estén configurados dependiendo de la plataforma.

Mediante esta propiedad, el desarrollador puede conocer con qué MID está replicando para poder efectuar la depuración de la aplicación o cualquier otra cosa que necesite.


Ejemplo de Uso:

self.MAP_MID=appData.getReplicationId();



Tipo Función
Parámetros Value: Valor que se quiere redondear. \\Digits: Número de dígitos a los que se quiere redondear el valor.
Tipo de Dato devuelto Double


Redondea el valor que se le pasa como parámetro a la cantidad de dígitos que se indica.

Las reglas que se usan para redondear son válidas para redondear cantidades en euros tal como se ha definido en la regla correspondiente, por lo que esta función puede usarse para sacar cuentas con valores monetarios.

Ejemplo de Uso:

var vPendiente;
self.MAP_PENDIENTE=appData.safeRound(vPendiente,2);



Tipo Propiedad
Acceso Lectura
Tipo de Dato devuelto iruntimeobject (IDISPATCH en entornos COM).


Devuelve el objeto que se utiliza para interactuar con el usuario (UI).

Mediante este objeto se pueden mostrar mensajes, solicitar datos al usuario, etc.



Tipo Método
Parámetros Value: Valor que se quiere convertir \\Flags: Banderas para controlar la conversión, especialmente cuando se trata de fechas.
Tipo de Dato devuelto Texto


Esta función se utiliza para formatear valores siguiendo las reglas de formato de la base de datos empleada en la conexión principal.

Esto es útil sobre todo cuando se emplea para componer filtros en tiempo de ejecución.

Las fechas, las cadenas y los números se pueden formatear para colocar directamente en sentencias SQL.

Ejemplo de Uso:

var fecha=appData.variantToString(Date());


	if( self.MAP_FILTER24.toString().length > 0 ){
    			if( sfilter == "" ){
    				sfilter = "date_from=" + appDate.varianToString(formatDate(self.MAP_FILTER24,self.MAP_FILTER60));
    			}else{
    				sfilter = sfilter + " and date_from=" + appData.variantToString(formatDate(self.MAP_FILTER24,self.MAP_FILTER60));
    			}	
    		}
 
    		//date_to
    		if( self.MAP_FILTER25.toString().length > 0 ){
    			if( sfilter == "" ){
    				sfilter = "date_to=" + appData.variantToString(formatDate(self.MAP_FILTER25,self.MAP_FILTER61));
    			}else{
    				sfilter = sfilter + " and date_to=" + appData.variantToString(formatDate(self.MAP_FILTER25,self.MAP_FILTER61));
    			}	
    		}


Tipo Método
Parámetros Value: Valor que se quiere sacar por la consola.
Tipo de Dato devuelto Ninguno


Saca por la consola de depuración el texto que se pasa como parámetro.

Si la maquinaria está en modo depuración o desarrollo, dependiendo de la plataforma y de la versión, también se saca el texto por la consola de depuración o por la salida estándar del sistema.

Ejemplo de Uso:

appData.writeConsoleString("CODIGO LEIDO: "+ self.MAP_LECTURA);
function ShowMessageDebug(mode,stmsg) {
	//Para poder utilizar esta funcion tenemos que tener una variable global "Debug"
	if (appData.getCurrentEnterprise().getVariables("Debug") === true) {
		if (mode === "msgbox")
			ui.msgBox (stmsg,"¡App_log_xone!",0);
		else if (mode === "showtoast")
			ui.showToast ("App_log_xone->"+stmsg);
		else if (mode === "consola")
			appdata.writeConsoleString("App_log_xone->"+stmsg);
	}
}


 function(objself,jsResult){
                ui.hideWaitDialog();
                if (!isEmptyString(jsResult.message)) {
                    appData.writeConsoleString(jsResult.message);
 
                }
                switch (jsResult.message) {
                    case 'D0': // No está a la distancia adecuada
                        // ui.msgBox("Tiene que estar mas cerca. Distancia: " + jsResult.data.DISTANCIA + " metros.","AVISO",0);
                        showMsgReducido('A1',jsResult.data.DISTANCIA);
                        break;
                    case 'R1': 
                        // Este señor no tiene reserva activa para este coche. No puede hacer las acciones
                        // ui.msgBox("No tiene reservado este coche, no puede realizar acciones sobre el.","AVISO",0);
                        let coll=appData.getCollection("MasterDocument");
                        coll.setFilter("RESERVA='" + user.RESERVABD + "'");
                        coll.loadAll();
                        if (coll.getCount()===0) {
                           showMsgReducido('A2',"");
                            try {
                                actualizarObjetoUser('-','LIMPIA',0,0,0,'-','-');
                                app.loadDatosCoches(appData.getCurrentEnterprise().getVariables('OBJETOMENUAPP'),"DatosMapa","MapaDatos",false);
                                ui.getView(appData.getCurrentEnterprise().getVariables('OBJETOMENUAPP')).refresh('flotanterecargarn','flotantemiposicion');
                                ui.getView(objself).exit();
                            } catch (e) {
                                actualizarObjetoUser('-','LIMPIA',0,0,0,'-','-');
                                ui.getView(objself).exit();
                            } 
                        } else {
                            irGrupo('5');    
                        }
                        break;
                    case 'E0': 
                        // Ocurrio algun error al realizar la acción en el coche
                        // ui.msgBox("No se pudo realizar la accion en el vehiculo","AVISO",0);
                        showMsgReducido('A3',"");
                        break;
                    default: 
                        // callBackError.call(this,objself,jsResult);
                        // ui.msgBox("No se ha podido realizar la acción.","AVISO",0);
                        showMsgReducido('A4',"");
                }
            });
        } catch (e) {
            appData.writeConsoleString(e);
            ui.hideWaitDialog();
        }
    };
 


El manejo de errores se realiza a través del objeto appData.Error que describimos a continuación de forma independiente, debido a su importancia. Los valores que pueda tomar este objeto error pueden ser manejados durante la ejecución de la aplicación. Las funciones disponibles son las siguientes:


Tipo Función
Acceso Lectura
Tipo de Dato devuelto cxoneerror


Devuelve un objeto que contiene los datos de error de la aplicación.

En este objeto se puede encontrar la información del último error ocurrido durante la ejecución de la aplicación.

Ejemplo de código:

var coll=appData.getCollection("ArticulosBuscar");
var filtro=coll.getFilter();
coll.setFilter("CODARTICULO="+vb.cstr(articulo));
coll.startBrowse();
if (appData.error().getNumber()!=0 )
{
	appData.getUserInterface().msgBox("Error " + appData.error().getDescription(),"ERROR",0);
	appData.error().clear();
}
else
{
.....
}	
 
coll.setFilter(filtro);
coll.endBrowse();


function loadCollwithFilter(collFilter,stfilter){
	var mError = "";
 
	try{
 
		appData.error().clear();	
 
		if(stfilter == ""){
			collFilter.unlock();
			collFilter.clear();
			collFilter.loadAll();
			collFilter.lock();
		}else{
			collFilter.unlock();
			collFilter.clear();
			collFilter.setFilter(stfilter);
			collFilter.loadAll();
			collFilter.lock();
		}
 
 
	}catch( ex ){
		if(appData.error().getNumber() != 0){
			//puede que tengamos algun error de conexion.
			collFilter.unlock();
			collFilter.clear();
			collFilter.lock();
			mError = "Error: " + appData.error().getDescription();
			appData.error().clear();
		}	
	}
 
	return mError;
}


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)


Contiene el código del último error ocurrido en la maquinaria. Cero indica que no hay error.

Valores negativos suelen indicar errores, códigos positivos suelen indicar situaciones “anormales” pero que no representan errores fatales.

var coll=appData.getCollection("ArticulosBuscar");
var filtro=coll.getFilter();
coll.setFilter("CODARTICULO="+vb.cstr(articulo));
coll.startBrowse();
if (appData.error().getNumber()!=0 )
{
	appData.getUserInterface().msgBox("Error " + appData.error().getDescription(),"ERROR",0);
	appData.error().clear();
}
else
{
.....
}	
 
coll.setFilter(filtro);
coll.endBrowse();



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)


Descripción del último error ocurrido en la maquinaria.

var coll=appData.getCollection("ArticulosBuscar");
var filtro=coll.getFilter();
coll.setFilter("CODARTICULO="+vb.cstr(articulo));
coll.startBrowse();
if (appData.error().getNumber()!=0 )
{
	appData.getUserInterface().msgBox("Error " + appData.error().getDescription(),"ERROR",0);
	appData.error().clear();
}
else
{
.....
}	
 
coll.setFilter(filtro);
coll.endBrowse();



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)


Si el error de la última operación se debe a un SQL que ha fallado, la sentencia en cuestión está en esta propiedad del objeto de error.

Algunos métodos pueden optar también por dejar información en esta propiedad, pero lo normal es que si no hay SQLs implicados en el error, esta propiedad esté vacía.

var coll=appData.getCollection("ArticulosBuscar");
var filtro=coll.getFilter();
coll.setFilter("CODARTICULO="+vb.cstr(articulo));
coll.startBrowse();
if (appData.error().getNumber()!=0 )
{
	appData.getUserInterface().msgBox("Error " + appData.error().getDescription(),"ERROR",0);
	appData.getUserInterface().msgBox("SQL fallida " + appData.error().getFailedSql(),"SQL",0);
	appData.error().clear();
}
else
{
.....
}	
 
coll.setFilter(filtro);
coll.endBrowse();



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 las variables del objeto de error, dejándolo listo para la siguiente operación.

var coll=appData.getCollection("ArticulosBuscar");
var filtro=coll.getFilter();
coll.setFilter("CODARTICULO="+vb.cstr(articulo));
coll.startBrowse();
if (appData.error().getNumber()!=0 )
{
	appData.getUserInterface().msgBox("Error " + appData.error().getDescription(),"ERROR",0);
	appData.getUserInterface().msgBox("SQL fallida " + appData.error().getFailedSql(),"SQL",0);
	appData.error().clear();
}
else
{
.....
}	
 
coll.setFilter(filtro);
coll.endBrowse();