Este elemento, userInterface, forma parte del objeto appData, disponiendo de cARTaracterísticas propias que hacen que sea descrito a continuación.

Dentro de este ámbito, podemos encontrar funciones que nos permiten interactuar con el usuario o con el dispositivo físico, permitiendo activación/desactivación de periféricos, impresión, notificaciones sonoras, o funcionalidades más básicas como un msgbox.

Es posible llamar a los métodos con ui.nombremetodo, en vez de usar el antiguo appdata.userInterface.

Método Descripción
captureImage capturar imagen.
clearDrawing eliminar cajón.
executeActionAfterDelay ejecutar acción tras retraso.
getView obtener vista.
hideGroup ocultar grupo.
hideNavigationDrawer ocultar grupo de navegación.
hideSoftwareKeyboard ocultar teclado.
hideWaitDialog ocultar diálogo de espera
openEditView abrir vista edición.
relayout Rediseñar página
returnToMainMenu volver al menú principal.
returnToForeground volver al primer plano.
saveDrawing guardar dibujo.
showNotification mostrar notificación.
setSelection ajustar selección.
showNavigationDrawer mostrar cajón de navegación.
showKeyboard mostrar teclado de software.
showDatePicker mostrar selector de fecha
ShowGroup mostrar selector de hora.
showTimePicker mostrar reloj
sleep actualizar diálogo de espera.
toggleGroup cambiar el estado de la visibilidad del grupo.
startKioskMode/stopKioskMode bloquea o desbloquea la pantalla para que el usuario no salga de ella


Método Descripción
dismissNotification rechazar notificación.
msgbox bandeja de mensajes.
msgBoxWithSound bandeja de mensajes con sonido.
setMaxWaitDialog Ajusta al máximo la barra de progreso.
setNotificationLed ajustar Led de notificación.
showNotification mostrar notificación.
showSnackbar mostrar snackbar.
showToast mostrar toast.
showWaitDialog mostrar diálogo de espera.
setWaitDialogText cambia díalogo de espera definido antes en el showWaitDialog
updateWaitDialog actualizar diálogo de espera.


Método Descripción
refresh refrescar.
refreshContentRow refrescar línea de content.
refreshContentSelectedRow refrescar el content en la fila seleccionada.
refreshValue refrescar valor.



Método Descripción
showConsoleReplica mostrar consola de réplica.
startReplica comenzar la réplica.
stopReplica detener réplica.
writeConsoleString Escribe a pantalla de depuración.



Método Descripción
isWifiConnected la wifi está conectada.
isWifiEnabled la wifi está activa.
startWifi iniciar la wifi.
stopWifi Para detener la wifi



Método Descripción
addCalendarItem Añadir item al calendario.
canMakePhoneCall Puede hacer llamada de teléfono.
chronoStop Detiene el contador de tiempo.
chronoValue Retorna tiempo transcurrido desde llamada starChrono.
createShorcut Crear acceso directo.
getMaxSoundVolumen Obtener máximo volumen de sonido.
getSoundVolumen Obtener volumen de sonido.
makePhoneCall Hacer una llamada desde el dispositivo.
playSoundAndVibrate Reproducir sonido y vibración.
sendMail enviar un email.
sendSMS enviar SMS.
shareData compartir datos.
startAudioRecord comenzar grabación de audio.
startCamera abrir la cámara.
stopAudioRecord detener grabación de audio.
stopPlaySoundAndVibrate detener reprodución de sonido y vibración.
takePhoto tomar foto.



Método Descripción
isApplicationInstalled La aplicación está instalada.
quitApp salir de la aplicación.
uninstallApplication desinstalar la aplicación.



Método Descripción
openFile para abrir un archivo.
openMenu abrir menu.
openUrl abrir URL.
pickFile Seleccionar archivo.



Método Descripción
askUserForGPSPermission solicitar al usuario permiso para GPS.
checkGPSStatus comprobar status de GPS.
drawMapRoute dibujar mapa de ruta.
getLastKnownLocation obtener la última localización conocida.
getLastKnownLocationAccuracy obtener de forma precisa la última localización conocida.
getLastKnownLocationAltitude obtener la altitud de la última localización conocida.
getLastKnownLocationBearing obtener la marcación de la última localización conocida.
getLastKnownLocationDateTime obtener la fecha y hora de la última localización conocida.
getLastKnownLocationLatitude obtener la latitud de la última localización conocida.
getLastKnownLocationLongitude obtener la longitud de la última localización conocida.
getLastKnownLocationProvider obtener proveedor de la última localización conocida.
getLastKnownLocationSpeed obtener la velocidad de la última localización conocida.
startGps iniciar GPS.



Método Descripción
endPrint finalizar impresión.
lineFeed salto de línea.
print imprimir.
printBarcode imprimir código de barras.
printBIDI imprimir BIDI.
printCommand imprimir comando
printLine línea de impresión
printPDF imprimir PDF.
startPrint comenzar la impresión.
startScanner iniciar scanner.




Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.addCalendarItem(Titulo, Descripción, Lugar del evento, Fecha Inicio], Fecha Fin)
Plataforma Android


Añade un evento al calendario integrado en Android.

Ejemplo:


var fechainicio = Date.parse(formatDateTime(self.FECHA,2) + " " + self.HORAINI + ":00");
var fechafin = Date.parse(formatDateTime(self.FECHA,2) + " " + self.HORAFIN + ":00");
ui.addCalendarItem("Titulo Tarea byXOne:" + self.TIPO.toString(),"Descripción: " + self.DESCRIPCION.toString(),"Lugar del Evento",fechainicio,fechafin);


Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.askUserForGPSPermission();
Plataforma Android


Solicita que se active el servicio de GPS

Ejemplo:

	let sDeviceOs = appData.getGlobalMacro("##DEVICE_OS##");
	if (sDeviceOs == "android") {
		let nStatus = ui.checkGpsStatus();
		if (nStatus === 0) {
			ui.showToast("No hay GPS, no se puede activar.");
		}
		if (nStatus == 1) {
			ui.showToast("Está activada la localización por GPS.");
		}
		if (nStatus == 2) {
			ui.showToast("Está activada la localización por redes wifi y de telefonía.");
		}
		if (nStatus == 3) {
			ui.showToast("No está activado el GPS ni la ubicación por redes wifi y telefonía, a ver si nos lo activan.");
			ui.askUserForGpsPermission();
		}
		if (nStatus == 4) {
			ui.showToast("Está activada la localización por GPS y redes wifi y de telefonía.");
		}
		if (nStatus == -1) {
			ui.showToast("Error inesperado, compruebe la consola de mensajes.");
		}
	}
}



Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.canMakePhoneCall( )
Plataforma Android


Verifica que se puede usar red móvil en el dispositivo, o sea que el dispositivo está registrado en la red, que tiene tarjeta SIM y que esté el servicio disponible.


Ejemplo:

<after-edit show-wait-dialog="false">
        <action name="runscript">
          <script language="javascript">
				if(ui.canMakePhoneCall())
				{
				    ui.makePhoneCall("123456789");
				}
				else
				{
				    ui.showToast("No es posible hacer llamadas");
				}
		  </script>
        </action>
      </after-edit>
 


Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.captureImage (imagen1,grupoimagen)
Plataforma Android


Permite Capturar Imagen. Según sintaxis en imagen1 guarda la posicion de la imagen capturada y en grupoimagen al frame que pertenece

Ejemplo:

<accion show-wait-dialog="false" refresh="false">
        <action name="runscript">
          <param name="param" />
          <include file="funciones_perifericos.js" language="javascript" />
          <script language="javascript">
      		switch (param) {
      			case "mail":
      				EnviarMail("NO");
      				break;
      			case "mailsi":
      				EnviarMail("SI");
      				break;
      			case "mailsicancel":
      				self.MAP_VISIBLE=0;
      				break;
      			case "pdf":
      				if (len(self.MAP_PDFSERIE)===0 || self.MAP_PDFNUMERO===0 || len(self.MAP_PDFFECHA)===0 || len(self.MAP_PDFTEXT)===0)
      					appData.failWithMessage (-8100,"Todos los campos son obligatorios");
      				else
      					GeneratePDFDocument();
      				break;
      			case "cbarras":
      				CodigoBarras();
      				break;
      			case "compartir":
					ui.captureImage ("captureimg","group4Frame");
					ui.shareData ("Compartir byXOne:" + cstr(self.MAP_COMPARTIR),"",self.captureimg);
					break;
				default:
					ui.msgBox ("No pulso ninguna opción valida","AVISO",0);
					break;
      		}
		</script>
        </action>
    </accion>


Tipo Función
Tipo de Dato devuelto Numérico
Sintáxis ui.checkGpsStatus();
Plataforma Android


Indica el estado actual del GPS en el dispositivo, los posibles valores que devuelve son:

valor 0 No hay GPS, no se puede activar.
valor 1 Está activada la localización por GPS.
valor 2 Está activada la localización por redes wifi y de telefonía.
valor 3 No está activado el GPS ni la ubicación por redes wifi y telefonía.
valor 4 Está activada la localización por GPS y la localización por redes wifi y de telefonía.
valor -1 Error inesperado.

Ejemplo:

function comprobarEstadoGps() {
	let sDeviceOs = appData.getGlobalMacro("##DEVICE_OS##");
	if (sDeviceOs == "android") {
		let nStatus = ui.checkGpsStatus();
		if (nStatus === 0) {
			ui.showToast("No hay GPS, no se puede activar.");
		}
		if (nStatus == 1) {
			ui.showToast("Está activada la localización por GPS.");
		}
		if (nStatus == 2) {
			ui.showToast("Está activada la localización por redes wifi y de telefonía.");
		}
		if (nStatus == 3) {
			ui.showToast("No está activado el GPS ni la ubicación por redes wifi y telefonía, a ver si nos lo activan.");
			ui.askUserForGpsPermission();
		}
		if (nStatus == 4) {
			ui.showToast("Está activada la localización por GPS y redes wifi y de telefonía.");
		}
		if (nStatus == -1) {
			ui.showToast("Error inesperado, compruebe la consola de mensajes.");
		}
	}
}


Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.clearDrawing(string)
Plataforma Android


Borra cajón


Ejemplo:

<borrar show-wait-dialog="false" refresh-prop="DIBUJO">
        <action name="runscript">
          <script language="javascript">
				ui.clearDrawing("DIBUJO");
			</script>
        </action>
      </borrar>


Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.createshortcut “nombreaplicacion”, “true”
Plataforma Android


Cuando se llama a este método, crea un acceso directo a la aplicación que se le pase en el primer parámetro, que puede ser otra distinta a la que se esté ejecutando. El segundo parámetro indica si queremos evitar que se creen duplicados al llamar de nuevo a esta función.

En cualquier caso, esta función es totalmente dependiente de la aplicación de escritorio que tenga instalado el usuario, en algunos casos muestra una notificación “toast” siempre, en otros no, y en otros ni crea el acceso directo. Con la aplicación de escritorio por defecto que viene en Android debería funcionar bien.
Se usará icon.png como icono del acceso directo.

Ejemplo:

	  <btnaddShortcut show-wait-dialog="false" refresh="false">
        <action name="runscript">
          <script language="javascript">
          		ui.createShortcut("DemoPruebas",0,"Title1","");
          </script>
        </action>
      </btnaddShortcut>


Tipo Método
Parámetros dismissNotification(string)
Tipo de Dato devuelto Ninguno

Elimina la Notificación de la barra superior de notificaciones realizado con el “ShowNotification”, hemos de especificar el ID (1) de la notificación para especificar el mensaje que queremos quitar.

Ejemplo:

 <notificar show-wait-dialog="false">
        <action name="runscript">
          <script language="javascript">
				ui.showNotification(1, "Título", "Esto es una notificación", "Aviso de recepción de datos");
			</script>
        </action>
      </notificar>
      <eliminar show-wait-dialog="false">
        <action name="runscript">
          <script language="javascript">
				ui.dismissNotification("1");
			</script>
        </action>



Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.drawMapRoute(“MAP_MAPA”, self.LATITUD, self.LONGITUD, 43.0069, -7.5699, “driving”, “#FF0000”)
Plataforma Android
Parámetros
  1. Nombre del content que contiene los datos. (Name del prop)
  2. Latitud destino
  3. Longitud destino
  4. Latitud origen
  5. Longitud origen
  6. Modo de desplazamiento. Valores posibles: “walking” (caminando) y “driving” (en coche).
  7. Color del trazo que dibuja la ruta.


Este método permite dibujar una ruta entre 2 puntos en un mapa incrustado en la aplicación.

Ejemplo:

ui.drawMapRoute("MAP_MAPA", self.LATITUD, self.LONGITUD, 43.0069, -7.5699, "driving", "#FF0000");


if(objGPS.STATUS != 1) {
	//ui.showToast("El campo STATUS vale " + objGPS.STATUS);
        	} else {
                		if ( appData.getGlobalMacro("##DEVICE_OS##") == "IOS"){
                  			self.getOwnerCollection().getOwnerObject().MAP_VERDATOS2 = 1;
                  			self.getOwnerCollection().getOwnerObject().MAP_TL = "Pinche para ver ruta en el navegador";
                  			if( appData.getCurrentEnterprise().getVariables("MIUBICACION") == 1){
        						ui.drawMapRoute("@mapa",self.LATITUD,self.LONGITUD,"","","","");
                  			}
        				}else{
        					//ui.drawMapRoute("@mapa",self.LATITUD,self.LONGITUD,"","");
        					ui.drawMapRoute("@mapa", self.LATITUD, self.LONGITUD, objGPS.LATITUD, objGPS.LONGITUD, "driving", "#FF0000");
        				}    		
				}
          	}
          	


Obsoleto. Se recomienda usar el objeto XonePrinter para las acciones de impresión.

Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)

Finaliza la conexión a la impresora.


Ejemplo:

Function ImprimirPrinterServer
	ui.StartPrint "datecs"
	ui.PrintLine "test"
	ui.Print "Sin hacer salto de linea"
	ui.PrintLine "Pues es verdad"
	ui.PrintLine "Prueba de texto lo suficientemente largo más o menos, supongo, no sé, sólo para ver qué pasa si lo hago."
	ui.PrintLine "-------------------------------------------------------------------------------------------------------------------"
	ui.PrintImage "test.png", 300, 300, "center", 0
	ui.EndPrint
End Function


Tipo Función
Tipo de Dato devuelto Entero
Sintáxis ui.executeActionAfterDelay“Nodo_A_Ejecutar”, Segundos
Plataforma Android - Iphone


Este método sirve para ejecutar un nodo tras esperar un cierto tiempo. El tiempo se especifíca en segundos y el nodo debe estar en la colección donde se encuentre el script con la llamada a este método. Se pueden poner decimales, por ejemplo 0.3 que vienen a ser 300 milisegundos. No poner 0.

<before-edit> <!-- O en cualquier otra parte -->
	<action name="runscript">
		<script language="javascript">
			ui.executeActionAfterDelay("Nodo_A_Ejecutar", 20);
			<!-- Ponemos que se ejecute cuando pasen 20 segundos -->
		</script>
	</action>
</before-edit>
<Nodo_A_Ejecutar>
	<action name="runscript">
		<script language="javascript">
 
			...... Hacemos lo que sea .......
			<!-- ui.executeActionAfterDelay("Nodo_A_Ejecutar", 20 );--> Si queremos que sea repetitivo
		</script>
	</action>
</Nodo_A_Ejecutar>

Si queremos que este nodo sea repetitivo, en el nodo al que se llama tendríamos que hacer una llamada para que se ejecute a sí mismo.


Ejemplo:

<btn_replica show-wait-dialog="false" refresh="false">
		<action name="runscript">
			<script language="javascript">
				ui.showToast("Iniciando ciclo de réplica");
				replica.start();
				ui.executeActionAfterDelay("btn_RefreshPend",5);
			</script>
		</action>
	</btn_replica>


Tipo Función
Tipo de Dato devuelto Ninguno
Plataforma Android - Iphone


Ejemplo:

<after-edit show-wait-dialog="false">
        <action name="runscript">
          <script language="javascript">
				self.MAP_VOLUMEN=ui.getSoundVolumen();
				self.MAP_MAXVOLUMEN=ui.getMaxSoundVolume();
		  </script>
        </action>
      </after-edit>



Tipo Función
Tipo de Dato devuelto Ninguno
Plataforma Android - Iphone


Ejemplo:

<after-edit show-wait-dialog="false">
        <action name="runscript">
          <script language="javascript">
				self.MAP_VOLUMEN=ui.getSoundVolumen();
				self.MAP_MAXVOLUMEN=ui.getMaxSoundVolume();
		  </script>
        </action>
      </after-edit>



Tipo Función
Tipo de Dato devuelto XoneWindow
Sintáxis ui.GetView()
Plataforma Android - Iphone

Devuelve el objeto ventana asociada al objeto que se le pasa como parámetro. Si el objeto no tiene ventana aún, devuelve NULL.
Las posibles acciones sobre dicha ventana son: Refresh, Bind, SetFocus, PickFile .

Ejemplos:

function startUpdateGpsLoop() {
    let myPromise = new Promise(function(bien, mal) {
        bBreakUpdateGpsLoop = false;
		let ventana = ui.getView(self);
        while(!bBreakUpdateGpsLoop) {
            if (!ventana) {
                break;
            }
            try {
                actualizarGps();
            } catch(error) {
                ui.showToast("Hubo un error");
            }
            ventana.refreshValue("MAP_LONGITUD", "MAP_LATITUD", "MAP_FGPS");
function frameScroll(e) {
	if (e.dy<=10 && self.MAP_SHOWOVERSCROLL===1) {
		self.MAP_SHOWOVERSCROLL=0;
		ui.getView(self).refresh("froverscroll");
	} else {
		if (e.dy>10 && self.MAP_SHOWOVERSCROLL===0) {
			self.MAP_SHOWOVERSCROLL=1;
			ui.getView(self).refresh ("froverscroll");
		}
	}
}



Tipo Método
Tipo de Dato devuelto Ninguno
Sintáxis ui.hideGroup(idGroup)
Plataforma Android - Iphone


Es un Método Drawer que permite ocultar el grupo que se le pasa como parámetro.

Ejemplo:

function changeOpction(index,bHideGroup){
	clearRefresh("mREFRESH");
	var stHeight = 0;
 
	stHeight = calculateHeight(index);	
 
	if(self.MAP_OPTION != index){
  		self.MAP_OPTION = index;
 
		if ( index == 1){
			self.MAP_DATA_HEIGHT = stHeight.toString() + "p";
			self.MAP_BTN_OPT1 = "opt1-sel.png";
			self.MAP_BTN_OPT1_COLOR = "#51a80a";
		}else{
			self.MAP_BTN_OPT1 = "opt1.png";
			self.MAP_BTN_OPT1_COLOR = "#666666";
		}
 
		if ( index == 2){
			self.MAP_DATA_HEIGHT = stHeight.toString() + "p";
			self.MAP_BTN_OPT2 = "opt2-sel.png";
			self.MAP_BTN_OPT2_COLOR = "#51a80a";
		}else{            
			self.MAP_BTN_OPT2 = "opt2.png";
			self.MAP_BTN_OPT2_COLOR = "#666666";
		}
 
		if( index == 3){
			self.MAP_DATA_HEIGHT = stHeight.toString() + "p";
			self.MAP_BTN_OPT3 = "opt3-sel.png";
			self.MAP_BTN_OPT3_COLOR = "#51a80a";
		}else{            
			self.MAP_BTN_OPT3 = "opt3.png";
			self.MAP_BTN_OPT3_COLOR = "#666666";
		}
 
		if( index == 4){
			self.MAP_DATA_HEIGHT = stHeight.toString() + "p";
			self.MAP_BTN_OPT4 = "opt4-sel.png";
			self.MAP_BTN_OPT4_COLOR = "#51a80a";
		}else{           
			self.MAP_BTN_OPT4 = "opt4.png";
			self.MAP_BTN_OPT4_COLOR = "#666666";
		}
 
		if ( index == 5){
			self.MAP_DATA_HEIGHT = stHeight.toString() + "p";
			self.MAP_BTN_OPT5 = "opt5-sel.png";
			self.MAP_BTN_OPT5_COLOR = "#51a80a";
		}else{             
			self.MAP_BTN_OPT5 = "opt5.png";
			self.MAP_BTN_OPT5_COLOR = "#666666";
		}
 
		if ( index == 6){
			self.MAP_DATA_HEIGHT = stHeight.toString() + "p";
			self.MAP_BTN_OPT6 = "opt3-sel.png";
			self.MAP_BTN_OPT6_COLOR = "#51a80a";
		}else{             
			self.MAP_BTN_OPT6 = "opt3.png";
			self.MAP_BTN_OPT6_COLOR = "#666666";
		}
 
		if( index == 7){
			self.MAP_DATA_HEIGHT = stHeight.toString() + "p";
			self.MAP_BTN_OPT7 = "opt6-sel.png";
			self.MAP_BTN_OPT7_COLOR = "#51a80a";
		}else{             
			self.MAP_BTN_OPT7 = "opt6.png";
			self.MAP_BTN_OPT7_COLOR = "#666666";
		}
 
		if ( self.MAP_OPTION == 6){
			if ( self.MAP_ISFISTOPEN_OPT5_SUB1 == 1){
				//realizamos el filtro.
				doFilter(isIpad(),1);
			}
		}
 
		if ( self.MAP_OPTION == 3){
			self.getContents("@Historico").unlock();
			if ( self.getContents("@Historico").count() == 0){
				if ( self.MAP_FILTER == 0){
					activeOrDesactiveFilter();
				}
			}else{
				if ( self.MAP_FILTER == 1){		
					activeOrDesactiveFilter();
				}		
			}
			self.getContents("@Historico").lock();
		}else{
			if ( self.MAP_FILTER == 1){		
				activeOrDesactiveFilter();
			}
		}			
 
		ui.executeActionAfterDelay("reevaluateLoad",0.2);
 
		if ( bHideGroup == 1){		
			ui.hideGroup("99");	
		}
	}else{
		if ( bHideGroup == 1){		
			ui.hideGroup("99");
		}
	}
 
	if(canApplyFilter() == 1){
		self.MAP_FILTER_BACKGROUND = "FilterOrange.png";
	}else{
		self.MAP_FILTER_BACKGROUND = "FilterGreen.png";
	}
 
	setRefresh("mREFRESH","frameOpcion5");
	setRefresh("mREFRESH","frameOpcion4");
	setRefresh("mREFRESH","frameOpcion3");
	setRefresh("mREFRESH","frameOpcion2");
	setRefresh("mREFRESH","frameOpcion1");
	setRefresh("mREFRESH","framePrincipal");
	setRefresh("mREFRESH","SubMenus");
	setRefresh("mREFRESH","SubMenu_OPT2");
	setRefresh("mREFRESH","SubMenu_OPT4");
	setRefresh("mREFRESH","SubMenu_OPT5");
	setRefresh("mREFRESH","MAP_BT_FILTRO");
	setRefresh("mREFRESH","frm_filtro");
	setRefresh("mREFRESH","frmCheckListType");
	setRefresh("mREFRESH","frmNextGrafotp1");
	setRefresh("mREFRESH","frmbackGrafotp1");
	setRefresh("mREFRESH","frameBtnFlotante");
	setRefresh("mREFRESH","frameBtnFlotante_option4_next");
	setRefresh("mREFRESH","frameBtnFlotante_option4_back");
	setRefresh("mREFRESH","frameBtnFlotante_option4_next2");
	setRefresh("mREFRESH","frameBtnFlotante_option4_back2");	
	setRefresh("mREFRESH","MAP_BTN_OPT_1");
	setRefresh("mREFRESH","MAP_BTN_OPT_2");
	setRefresh("mREFRESH","MAP_BTN_OPT_7");
	setRefresh("mREFRESH","MAP_BTN_OPT_3");
	setRefresh("mREFRESH","MAP_BTN_OPT_4");
	setRefresh("mREFRESH","MAP_BTN_OPT_5");
	setRefresh("mREFRESH","MAP_BTN_OPT_6");
 
	if(getRefresh("mREFRESH").length > 0){
    	ui.refresh(getRefresh("mREFRESH"));
	}
	ui.refresh();
}
 
 


Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.hidenavigationDrawer (idGroup)
Plataforma Android - Iphone


Si está visible, permite ocultar el Drawer.

Ejemplo:

ui.hideNavigationDrawer();


Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.hideSoftwareKeyboard ()
Plataforma Android


Si está visible, oculta el teclado en pantalla de android.

Ejemplo:

 <action name="runscript">
          <script language="javascript">
 
                ui.hideSoftwareKeyboard();
                var filtoBuscar="1=1";
 
                if (self.MAP_FINALIZADOS==1)
                    filtoBuscar="i.FINALIZADA=1 ";
 
                if (self.MAP_FAVORABLES==1)
                    filtoBuscar=filtoBuscar + " AND i.FAVORABLE=1 ";
 
                 if (self.MAP_BUSCAR.length!=0 || self.MAP_INSPECCIONADOS==1)
          		     filtoBuscar=filtoBuscar + " AND (a.SERIAL LIKE '%" + self.MAP_BUSCAR + "%' OR t.DESCRIPCION LIKE '%" + self.MAP_BUSCAR + "%' OR m.DESCRIPCION LIKE '%" + self.MAP_BUSCAR + "%' OR s.DESCRIPCION LIKE '%" + self.MAP_BUSCAR + "%')";
          		self.getContents("M_Inspecciones").setFilter(filtoBuscar);
                self.getContents("M_Inspecciones").loadAll();
                ui.refresh("M_Inspecciones"); 
                xself.executeNode("countInspecciones");
          </script>


Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.hideWaitDialog()
Plataforma Android


Ejemplo:

 <pdf1>
		<action name="runscript">
		    <script language="javascript">
    		    try{
		        var variable1 = "Generando PDF";
		        ui.showWaitDialog(variable1);
		        if(self.MAP_DOPDF == 0){
		            self.MAP_DOPDF = 1;
    				var pdf01 = createObject("XOnePDF");
    				GenerarPDF1("basico.pdf",pdf01,0);
    				pdf01 = null;
		            self.MAP_DOPDF = 0;
		        }
    		    }finally{
    		        ui.hideWaitDialog();
    		    }
			</script>


Tipo Función
Tipo de Dato devuelto Boolean
Sintáxis ui.isApplicationInstalled(string)
Plataforma Android


Verifica que esté una aplicación instalada,

Ejemplo:

//  ¿Está instalada la aplicación del Facebook?
 
if (ui.isApplicationInstalled("com.facebook.katana") == 0) {
        /* 
         * Sí lo está. Usamos los intents de Android para lanzar una página
         * con la aplicación nativa.
         */


Tipo Método
Tipo de Dato devuelto Boolean
Sintáxis ui.isWifiConnected ()
Plataforma Android


Método que se utiliza para saber si el dispositivo está conectado a alguna red wifi. Devuelve true o false.

Ejemplo:

if(ui.isWifiConnected())
	{
		replica.start();
	}



Tipo Método/Función
Parámetros Message:Mensaje que se quiere mostrar.
Caption: Título de la venta de mensaje.
Options:Parametro que especifica el tipo de msgbox a mostrar. Son las siguientes:
0 - Muestra un mensaje informativo con botón “Ok”. No retorna ningún valor.
1 - Mensaje para petición de confirmación “Aceptar”/“Cancelar”.
4 - Mensaje para petición de confirmación “Si”/“No”.
Tipo de Dato devuelto Para Options=0 - No hay retorno
Para Options=1 - Retorna 1 si el usuario pulsa “Aceptar” y 2 si pulsa “Cancelar”
Para Options=4 - Retorna 6 si el usuario pulsa “Si” y 7 si pulsa “No”
Sintáxis ui.msgbox (string,string,boolean)
Plataforma Android


Mostrar un mensaje en pantalla.

Ejemplo:

    <borrar>
        <action name="runscript">
          <script language="javascript">
          <![CDATA[
	          	var a = ui.msgBox("¿Esta seguro que desea borrar todos las lineas de las cuales no existen los ficheros en su dispositivo?","¡¡¡ATENCION!!!",1);
	          	if( a === 1){
	            	var coll = self.getContents("ReplicaFiles");
	            	var fso = createObject("filemanager");
	            	var borrados = 0;
	            	var cantidad = coll.getCount();
	            	if( cantidad <= 0){
	            		coll.loadAll();
	            		cantidad = coll.count - 1;
	            	}
                    for (var i = 0; i < cantidad; i++) {
                        var fichero = coll[i].FILENAME.toString();
	            		var fic = fso.fileExists(fichero);		
						if( fic == -1){
							coll[i].deleteObject();
							cantidad--;
							borrados++;
						}
	            	}
					fso=null;
					fic=null;
					ui.msgBox("Se han borrado " + cstr(borrados) + " lineas por no existir los ficheros asociados.","Información",0);
	          	}
	          ]]>
            </script>
        </action>
      </borrar>
      <borrar2>
        <action name="runscript">
          <script language="javascript">
          <![CDATA[
		          	var a=ui.msgBox ("¿Esta seguro que desea borrar todos las fotos del terminal que ya han sido enviadas a la central?","¡¡¡ATENCION!!!",1);
		          	if (a===1) {
		            	var coll=self.getContents("ReplicaFilesenviados");
		            	var fso = createObject("filemanager");
		            	var fic;
		            	var borrados=0;
		            	var borrados2=0;
		            	var cantidad=coll.getCount();
		            	if (cantidad<=0) {
		            		coll.loadAll();
		            		cantidad=coll.getCount();
		            	}
		            	for (var i=0;i<cantidad;i++) {
		            		fichero=cstr(coll.get(i).FILENAME);
		            		fic = fso.fileExists(fichero);		
							if (fic===0) {
								fso.delete(fichero);
								coll.get(i).deleteObject();
								cantidad--;
								borrados++;
							} else {
								coll.get(i).deleteObject();
								cantidad--;
								borrados2++;
							}
		            	}
						fso=null;
						fic=null;
						ui.msgBox ("Se han borrado " + cstr(borrados) + " fotos del terminal y sus registros.  Se han borrado " + cstr(borrados2) + " registros de fotos que no existen en el terminal.","Información",0);
		          	}
					]]>
            </script>
        </action>
      </borrar2>
      <replicar>
        <action name="runscript">
          <script language="javascript">
            		replica.start();
            		ui.msgBox ("Proceso de réplica iniciado. Se necesita buena cobertura o wifi para garantizar el envío de las fotos.","Información",0);
            	</script>
        </action>
      </replicar>
      <salir>
        <action name="runscript">
          <script language="javascript">
            		appData.failWithMessage (-11888,"##EXIT##");
            	</script>
        </action>
      </salir>


Tipo Método
Tipo de Dato devuelto Ninguno
Sintáxis ui.msgboxWithSound (string,string,boolean)
Plataforma Android


Mostrar mensaje con sonido.

Ejemplo:

  <before-edit refresh="true">
        <action name="runscript">
          <script language="javascript">	
          		appData.getCurrentEnterprise().setVariables("MIUBICACION",0);
				var ok = ui.msgBox("¿Desea acceder al Geoposicionamiento de su dispositivo?","Aviso",4);
        		if ( ok == 6 ){
					appData.getCurrentEnterprise().setVariables("MIUBICACION",1);
        		}
				self.MAP_VERDATOS = 0;
				if ( appData.getCurrentEnterprise().getVariables("MIUBICACION") == 1){
					ui.startGps();
					PosicionamientoGPS();
					if ( appData.getCurrentEnterprise().getVariables("MIUBICACION") == 10 ){
						ui.msgBox("No se ha podido posicionar el dispositivo.","",0);
					}
				}
		</script>
        </action>
      </before-edit>


Tipo Método
Tipo de Dato devuelto Ninguno
Sintáxis ui.OpenEditView (string)
Plataforma Android


Permite abrir una colección en modo edición.

Ejemplo:

 set obj1=coll.createobject
                coll.additem obj1
                obj1("MAP_ID_ENT")=obj("ID_ENT")
		        obj1("MAP_ID_PS")=obj("ID_PS")
		        obj1("MAP_PUNTODESERVICIO")=obj("MAP_PS")
		        obj1("MAP_PUNTODESERVICIONOMBRE")=obj("MAP_NOMBRE")
		        if appData.globalmacro("##DEVICE_OS##")="android" then
                    ui.openEditView obj1
                else
                    PushValue obj1
                end if
			else
			    '##XONE_TRANSLATE_NEXT_LINE##
                msg="El punto de servicio  "
                '##XONE_TRANSLATE_NEXT_LINE##
                msg1=" no tiene servicios pendientes en esta ruta"
                '##XONE_TRANSLATE_NEXT_LINE##
<pulsar show-wait-dialog="false">
        <action name="runscript">
          <param name="coll" />
          <param name="tipo" />
          <param name="subtipo" />
          <script language="javascript">
              if (tipo) {
              		if (tipo===0)
              			self.executeNode("cambiarMenu('BASICO','1SELECT.png',##FLD_MAP_COLOR1##)");
 
    				if (tipo===1)
              			self.executeNode ("cambiarMenu('CONTENTS','2SELECT.png',##FLD_MAP_COLOR2##)");
 
              		if (tipo===2)
              			self.executeNode ("cambiarMenu('PERIFERICOS','3SELECT.png',##FLD_MAP_COLOR3##)");
 
    				if (tipo===3)
              			self.executeNode ("cambiarMenu('REGLAS DE NEGOCIO','4SELECT.png',##FLD_MAP_COLOR4##)");
 
              }
 
              var param = {TIPO:"",MAP_COLORACTIVO:""};
              if ( coll === "EspecialPerifericos" || coll === "EspecialDatosOnline"){
                  param.TIPO = subtipo||"";
              }
              if (coll==="ContentConsolaReplica" || tipo == 5){
	          		param.MAP_COLORACTIVO = self.MAP_COLOR5;
			  }else{
	          		param.MAP_COLORACTIVO = self.MAP_COLORACTIVO;
			  }
 
              var obj = appData.getCollection(coll).createObject(param,true);
 
              ui.openEditView(obj);
 
           </script>
        </action>
      </pulsar>



Tipo Método
Parámetros collname:Nombre de la colección a mostrar. Mask:Mask del appwizard. Mode:Mode del appwizard
Tipo de Dato devuelto Ninguno
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), Android, iPhone, Linux, MC+, Symbian (3ed, 5ed)


Muestra una colección en pantalla.

En función de la forma en que esté definido el UI de la colección en el mappings, se puede usar un control especial o en caso de no tener nada definido, se muestra en modo grid.

Esta función solamente está definida en determinados frameworks, independientemente de la plataforma, pero la idea es que se vaya generalizando.

De todas maneras el uso de las nuevas reglas de UI harán que este tipo de funcionalidad se vaya sustituyendo.

Ejemplo:

ui.openMenu("ColeccionQueSea",31,1);  
 <action name="runscript">
          <param name="coll" />
          <script language="javascript">
          		ui.openMenu(coll,26,1);
		</script>
        </action>



Tipo Función
Parámetros nombrefichero: Será o bien el nombre de un fichero (en ese caso se busca dentro de la carpeta Files de la aplicación), o una ruta, que se tomará como absoluta. Se puede usar la macro ##APP## que se sustituye por la ruta donde está instalada la aplicación. Caché: Indica al framework si al descargar ficheros con este método no debe buscarlo antes en la caché y bajarlo de nuevo. Valores posibles: “donotcachethefile”, “cache”
Tipo de valor devuelto Ninguno.
Sintáxis appdata.userinterface.openfile string nombrefichero
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed), Android


Abre el fichero que se pasa por parámetro.

Ejemplo 1:

ui.openFile("##APP##\Files"+self.FICHATECNICA);
ui.openFile("http://www.xone.es/XOneAndroidFramework.apk");

Ejemplo 2:

    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
Parámetros Texto con la URL
Tipo de Dato devuelto Ninguno
Plataforma iPhone, Android


Abre una URL pasada como parámetro.

Ejemplo:

ui.openUrl(strURLAdrress);
 <prop name="MAP_TL5" class="tlRegistro " height="8%" type="B" visible="1" title="PULSE PARA VER LAS CONDICIONES DE LA CUENTA" locked="false" onclick="javascript:ui.openUrl('https://ladireccionURL');"/>
            <prop name="MAP_TL52" class="tlRegistro" type="B" visible="1" title="POLITICA DE PRIVACIDAD" locked="false" onclick="javascript:ui.openUrl('https://ladireccionURL');"/>



Tipo Método
Tipo de Dato devuelto Ninguno
Plataforma iPhone, Android


Seleccionar archivo.

Ejemplo:

ui.pickFile("MAP_ADJUNTORESPUESTA","*.jpg;*.png",false,"##FILESPATH##",1); 
ui.pickFile("MAP_ADJUNTORESPUESTA","*.jpg;*.png",false,"/sdcard/DCIM/Camera",1);
ui.pickFile('MAP_IMG','', true);    

Sólo los dos primeros parámetros son obligatorios.

1º Prop donde almacena, 2º Extensiones permitidas, 3º Solo fotos, 4º Ruta inicial, 5º No permite rutas superiores a la inicial

<camera show-wait-dialog="false">
        <action name="runscript">
          <param name="TIPO" />
          <script language="javascript">
			   self.MAP_ADDIMG=0;       
			   switch (TIPO) {
                   case 'adjuntar':
                        self.MAP_TYPEFILE="ADJUNTO"; 
                        var jsParams = {
        				    targetProperty : "MAP_FOTO",
        				    fileTypes      : "jpg,png"
        				};
        				ui.pickFile(jsParams);
                        break;
                    case 'foto':
						.....
                    case 'video':
                        .....
                } 
		  </script>
        </action>
      </camera>
 


Tipo Función
Tipo de Dato devuelto Ninguno
Plataforma iPhone, Android



Función que permite redibujar la pantalla.

Ejemplo:

if iaccion = 0 then
      				this("MAP_CIERRE") = 0
      				this("MAP_HEIGHT") = "1174px"
      				'ui.relayout 
	    			ui.Refresh "frmOpcion2","frmOpcion1","frmOpcion3","frm_btControl","frmMenu","frmGeneral","MAP_HEIGHT","MAP_NUMEROOT_R","MAP_BT_CERRAR"
      			end if
      


Tipo Método
Tipo de Dato devuelto Ninguno
Plataforma iPhone, Android


Se utiliza para que un script que se ejecute en el fondo pueda poner visible la última ventana. para notificaciones traer la App a foreground.

Ejemplo:

<after-edit show-wait-dialog="false">
        <action name="runscript">
          <script language="javascript">
				......
				ui.showNotification(1, "Título", "Notificación 1", "Mensaje nuevo", self, "btnToForeground");
		  </script>
        </action>
      </after-edit>	  
	  <btnToForeground show-wait-dialog="false" refresh="false">
        <action name="runscript">
          <param name="index" />
          <script language="javascript">
          		ui.returnToForeground();
          </script>
        </action>
      </btnToForeground>


Tipo Método
Tipo de Dato devuelto Ninguno
Plataforma iPhone, Android


Se utiliza para retornar al Menú Principal.

Ejemplo:

	if (filtro!="")
		{
	              ui.toggleGroup("99");
		      ui.returnToMainMenu();
		      var coll=appData.getCollection(COLL);
		      coll.clear();
		      var objabrir=coll.findObject(filtro);
<script language="javascript">
          	if (self.MAP_LEVEL==0)
          	{
				ui.returnToMainMenu();
			}
			else
			{	
				var vResult=showMsgBox("¿Está seguro de que quiere salir de la denuncia sin guardar?", "CONFIRMACIÓN!!",1,0);
				if (vResult==6 )
				{
					appData.failWithMessage (-11888,"##EXIT##");
				}
			}
	  	</script>
        </action>
      </onback>	  


Tipo Método
Tipo de Dato devuelto Ninguno
Plataforma iPhone, Android



Permite salvar una pantalla con dibujo, muy utilizado por ejemplo, cuando el cliente dibuja la firma con el dedo.

Ejemplo:

ui.saveDrawing("FIRMACLIENTE") 'Con este método guardamos el fichero con la firma del cliente.
 <guardar show-wait-dialog="false" refresh-prop="DIBUJO">
        <action name="runscript">
          <script language="javascript">
				//Opcional: Acepta un segundo parámetro, nombre de fichero
				ui.saveDrawing("DIBUJO");
				//Comprobación extra, ver si se ha guardado correctamente
				var FileManager = createObject("FileManager");
				var path = appData.filesPath + self.DIBUJO.toString();
				var result = FileManager.fileExists(path);
				if ( result == 0){
					ui.showToast("Fichero " + path + " guardado correctamente");
				}else{
					ui.showToast("Error al guardar fichero " + path);
				}
				FileManager = null;
			</script>
        </action>
      </guardar>


Tipo Método
Tipo de Dato devuelto Ninguno
Plataforma iPhone, Android


Este método permite ejecutar un sonido con o sin vibración, y puede repetirse n veces. El sonido a ejecutarse será un fichero del proyecto.Se podrá configurar el tono de las notificaciones en el dispositivo,así como habilitar o no la vibración con la ##DEFAULT## macro.

Ejemplo:

PENDIENTE


Tipo Método
Parámetros sendMail(string address, string ccaddress, string subject, string body opcional)
Tipo de Dato devuelto Ninguno

Este método permite enviar un email rellenando los campos en el gestor de correo que tenga instalado el cliente. El usuario es responsable de pulsar el boton de enviar. Se puede adjuntar un fichero que esté en la carpeta files o en cualquier otra ruta si se le especifica completa.

Ejemplo:

function EnviarMail(adjunto) {
	var men="";	
	if (self.MAP_CORREO.length===0)
		men="Es obligatorio indicar el correo de destino";
 
	if (self.MAP_ASUNTO.length===0 && men.length===0)
		men="Es obligatorio indicar el asunto del correo";
 
	if (self.MAP_CUERPO.length===0 && men.length===0)
		men="Es obligatorio indicar el cuerpo del correo";
 
	if (men.length===0) {
		if (adjunto==="NO") {
			var ok=ui.msgBox ("¿Desea adjuntar un fichero?","Aviso",4);
	        if (ok===6){
	        	self.MAP_VISIBLE=1;
	        	ui.refresh("MAP_TEXTAT,boton0,boton1");
	        }else{
				ui.sendMail(self.MAP_CORREO, "direccion_con_copia@xone.es", self.MAP_ASUNTO, self.MAP_CUERPO, "");
	        }
 
		} else {
			if (self.MAP_TEXTAT.length===0)
				ui.msgBox("Error: Es Obligatorio indicar el fichero adjunto","AVISO",0);				
			else
				ui.sendMail (self.MAP_CORREO, "direccion_con_copia@xone.es", self.MAP_ASUNTO, self.MAP_CUERPO, self.MAP_TEXTAT);
		}
	} else {
		ui.msgBox ("Error: " + men ,"AVISO",0);				
	}
}



Tipo Método
Parámetros sendSMS (string address, string ccaddress, string subject, string body opcional)
Tipo de Dato devuelto Ninguno

Este método permite enviar un SMS.


Obsoleto. Se recomienda usar el objeto XonePrinter para las acciones de impresión.

Tipo Función
Parámetros indexprinter:Es el índice de las entradas del fichero printer.bin que se va a usar. Usa índice cero, es decir, la primera opción, de las disponibles en printer.bin, sería 0.
Tipo de Dato devuelto Ninguna, si la conexión es correcta, en caso contrario un código de Error
Sintáxis WM string appdata.userinterface.startprint ( int indexprinter )
Sintáxis Android string appdata.userinterface.startprint “zebra”


Inicializa y conecta con la impresora que se indica por parámetro.

Ejemplo:

Function ImprimirPrinterServer
	ui.StartPrint "datecs"
	ui.PrintLine "test"
	ui.Print "Sin hacer salto de linea"
	ui.PrintLine "Pues es verdad"
	ui.PrintLine "Prueba de texto lo suficientemente largo más o menos, supongo, no sé, sólo para ver qué pasa si lo hago."
	ui.PrintLine "-------------------------------------------------------------------------------------------------------------------"
	ui.PrintImage "test.png", 300, 300, "center", 0
	ui.EndPrint
End Function



Tipo Método
Parámetros startReplica()
Tipo de Dato devuelto Ninguno

Inicia la réplica desde un script.


Ejemplo:

	self.MAP_T_USUARIO = self.getOwnerCollection().getVariables("##LOGIN_LASTUSER##");
				ui.startReplica();
            </script>


function sendMessage(colMUser,obj,title,isFromUser){
	if(obj[title].length != 0 ){
	  	var CollCV=appData.getCollection("MensajesReader");
		var ObjCV=CollCV.createObject();
		if(isFromUser){
			ObjCV.USUARIOTO = self.MAP_CCUSUARIO;
			ObjCV.USUARIOFROM = user.LOGIN;
		}else{
			ObjCV.USUARIOTO = user.LOGIN;
			ObjCV.USUARIOFROM = self.MAP_CCUSUARIO;
		}
		ObjCV.FECHA = new Date();
		ObjCV.MENSAJE = self[title];
		ObjCV.TIPO = self.MAP_TIPO;
		ObjCV.IDCHAT = self.MAP_IDCHATSEL;
		ObjCV.save();
 
		ui.startReplica();
 
		colMUser.unlock();
		addUserMessage(colMUser,ObjCV,-1,ObjCV.ROWID);
		colMUser.lock();
 
		//limpiamos
		self[title] = "";
		ObjCV = null;
		CollCV.clear();
		CollCV = null;
 
		ui.refresh("MensajesUsuarios",title);


Tipo Método
Sintáxis ui.stopreplica()
Plataforma Android


Detiene la réplica.(Usar el objeto Réplica), pero el STOP no se usa, en su lugar, si no se quiere replicar alguna operación, usar colecciones sin réplica
Ejemplo:

appdata.Error.Clear
ObjRP("MAP_RUTAC")=This("MAP_RUTAC")
ui.StopReplica
replica.stop(); 
	ui.stopReplica();


Tipo Función
Parámetros “PROPDESTINO”, nTotalAncho, nTotalAlto, sImagenFondoRuta
Tipo de Dato devuelto Ninguno


Inicia módulo para la captura de firma. ui.StartSignature (“PROPDESTINO”, nTotalAncho, nTotalAlto, sImagenFondoRuta). El último parámetro es opcional e indica una imagen de fondo que se plasmará también en la firma resultante.

Ejemplo:

imageDrawing.save("temporal_ImagenFondoFirma.png");
	ui.startSignature("MAP_FIRMA", 640, 480, "temporal_ImagenFondoFirma.png");
}
 
 
 



Método:

Parámetros Identificador de la notificaciones, si se hacen varias llamadas con el mismo id, modificará el valor la última llamada, si se hace con ID diferentes generará una nueva notificación en pantalla por cada ID diferente.
-Título de la notificación.
-Descripción de la notificación.
-(Opcional) Texto ticker, Texto que sale antes de mostrar la notificación, solo funciona en Android inferiores al 5 (a partir de esta versión Android puso obsoleta esta particularidad).
-(Opcional, funciona junto con el parámetro 6) Dataobject, para saber dónde tiene que buscar el nodo a ejecutar, cuando se pulse sobre la notificación.
-(Opcional, funciona junto con el parámetro 5) nodo que ejecutará una vez se pulse sobre la notificación.


Muestra una notificación en la barra de notificaciones de los dispositivos.

Ejemplos:

    Ej1:
  ui.showNotification(1, "Título", "Notificación #1");
 
    Ej2: 
   ui.showNotification(1, "Título", "Notificación #1", “Mensaje nuevo”);
 
    Ej3:
   ui.showNotification(3, "Título", "Notificación #3", "Mensaje nuevo", self, "mensajeria");
 




PARÁMETROS
Un objeto JSON en el que podemos definir las siguientes propiedades:
-(Obligatorio si no se definió onDateSet) targetProperty: Indicamos el nombre del prop donde queremos que se guarde el valor una vez se seleccione la hora que queremos.
-(Opcional) initialHour: (Siempre se le pasa en formato 24h) Hora en que comenzará seleccionado en el reloj.
-(Opcional) initialMinute: Minuto en que comenzará seleccionado en el reloj.
-(Opcional) is24HoursMode: Si se quiere en formato 24 horas o no.
-(Opcional) Title: título superior que queramos que muestre la ventana del reloj.
-(Obligatorio si no se definió targetProperty) onTimeSet: (Es incompatible con la propiedad targetProperty, es decir, si se pone el onTimeSet no hará caso al targetProperty) donde se definirá una función que se llamará una vez seleccionemos la hora que queremos.


Método que mostrará por pantalla un reloj.

Ejemplos:

   Ej2:
   var params = {
          		initialHour: 20,
          		initialMinute: 22,
          		is24HoursMode: true,
          		title: "Seleccione fecha",
          		onTimeSet: function(nHours, nMinutes) {
          			/*Aquí ponemos el script que queramos ejecutar*/
          		}
          	};
   ui.showTimePicker(params);
 
    Ej3:
   var params = {
   targetProperty: "MAP_TEXTO_FLOAT_TOOLTIP_USUARIO",
          		initialHour: 20,
          		initialMinute: 22,
          		is24HoursMode: true,
          		title: "Seleccione fecha"
          	};
   ui.showTimePicker(params);



Tipo Función
Parámetros (*)
Tipo de valor devuelto Ninguno
Sintáxis ui.showNavigationDrawer


Muestra el drawer, si está oculto.


Ejemplo:

 ui.showNavigationDrawer();



PARÁMETROS
Un objeto JSON en el que podemos definir las siguientes propiedades:
-(Obligatorio si no se definió onDateSet) targetProperty: Indicamos el nombre del prop donde queremos que se guarde el valor una vez se seleccione la fecha que queremos.
-(Opcional) initialYear: Año en que comenzará seleccionado en el calendario.
-(Opcional) initialMonth: Mes en que comenzará seleccionado en el calendario.
-(Opcional) initialDay: Día en que comenzará seleccionado en el calendario.
-(Opcional) Title: título superior que queramos que muestre la ventana del calendario.
-(Obligatorio si no se definió targetProperty) onDateSet: (Es incompatible con la propiedad targetProperty, es decir si se pone el onDateSet no hará caso al targetProperty) donde se definirá una función que se llamará una vez seleccionemos la fecha que queremos.


Método que mostrará por pantalla un calendario.

Ejemplos:

    Ej2:
    var params = {
          		initialYear: 2038,
          		initialMonth: 2,
          		initialDay: 15,
          		title: "Seleccione fecha",
          		onDateSet: function(nYear, nMonth, nDay) {
          			/*Aquí ponemos el script que queramos ejecutar*/
          		}
          	};
     ui.showDatePicker(params);
 
    Ej3:
   var params = {
  targetProperty: "MAP_TEXTO_FLOAT_TOOLTIP_USUARIO",
          		initialYear: 2038,
          		initialMonth: 2,
          		initialDay: 15,
          		title: "Seleccione fecha"
          	};
    ui.showDatePicker(params);
 



PARÁMETROS
Una cadena de texto, donde le indicamos el mensaje a mostrar.
Un objeto JSON en el que podemos definir las siguientes propiedades:
-(Obligatorio) text: Define el texto que se mostrará en el Snackbar.
-(Opcional) color: Define el color del fondo del SnackBar.
-(Opcional) duration: Define la duración en pantalla del SnackBar, tiene 3 posibles valores:
-short: de corta duración.
-long: de larga duración.
-indefinite: de duración indefinida, no se oculta nunca.
-(Opcional) width: define el ancho del SnackBar.
-(Opcional) height: define el alto del SnackBar.
-(Opcional) textColor: Define el color del texto del SnackBar.
-(Opcional) actionText: Define el texto del botón que aparece en la parte derecha del SnackBar.
-(Opcional) actionTextColor: Define el color del texto del botón que aparece en la parte derecha del SnackBar.
-(Opcional) actionMethod: Define la función que ejecutara si se hace click en el botón que aparece en la parte derecha del SnackBar.


Muestra un mensaje en la parte inferior de la pantalla con duración definida por el usuario.

Ejemplos:

    Ej1:
    ui.showSnackbar("Soy un snackbar");
 
    Ej2:
   var params = {
            	color: "#ff0000",
            	duration: "short”,
            	width: "100%",
            	height: "10%",
            	text: "Soy un snackbar",
            	textColor: "#FFFF00",
            	actionText: "Hola",
            	actionTextColor: "#00FF00",
            	actionMethod: function() {
            		/*Aquí ponemos el script que queramos ejecutar*/
            	}
            };
    ui.showSnackbar(params);


<after-edit show-wait-dialog="false">
        <action name="runscript">
          <script language="javascript">
				ui.showSnackbar("Tiene " + self.getContents("IncidenciasList").count().toString() + " incidencias asignadas");
		  </script>
        </action>
      </after-edit>


Tipo Función
Parámetros (*)
Tipo de valor devuelto Ninguno
Sintáxis ui.showKeyboard();


Mostrar teclado de software

Ejemplos:

     <script language="VBScript">
                if appData.globalmacro("##DEVICE_OS##")&lt;&gt;"android" then
          		    ui.showkeyboard true
          		end if



Lanza un mensaje en la parte inferior central de la pantalla que desaparece después de unos segundos.

Ejemplo:

    ui.showToast(“Mensaje que queremos mostrar");
 
 
    'ui.showtoast "MAP_INDICE: "+cstr(this.ownercollection.ownerobject("MAP_INDICE"))
                'ui.showtoast "VALOR: "+cstr(this("VALOR"))


Atributo behavior-target


Si se muestra un mensaje de un SnackBar , los props que sean floating=”true” y tengan definido el atributo behavior-target=”snackbar”, estos props se desplazarán junto con el SnackBar y cuando éste se oculte, volverán a su posición inicial.


Tipo Función
Parámetros Mensaje que se quiere mostrar
Tipo de valor devuelto Ninguno
Sintáxis ui.showWaitDialog


Permite mostrar mensaje mientras se está produciendo un proceso que requiere tiempo de espera a que se realice totalmente.


Ejemplos:


    <action name="runscript">
		    <script language="javascript">
    		    try{
		        var variable1 = "Generando PDF";
		        ui.showWaitDialog(variable1);
		        if(self.MAP_DOPDF == 0){
		            self.MAP_DOPDF = 1;
    				var pdf01 = createObject("XOnePDF");
    				GenerarPDF1("basico.pdf",pdf01,0);
    				pdf01 = null;
		            self.MAP_DOPDF = 0;
		        }
    		    }finally{
    		        ui.hideWaitDialog();
    		    }
			</script>
		</action>


var viewEdit= ui.getView(self);
    viewEdit.showWaitDialog("Comprobando matrícula...");



Tipo Función
Parámetros Mensaje que se quiere mostrar
Tipo de valor devuelto Ninguno
Sintáxis ui.setWaitDialog


Permite cambiar y establecer nuevo mensaje definido en un previo showWaitDialog mientras se está produciendo un proceso que requiere tiempo de espera.

Ejemplo de modificación de diálogo predefinido en con ui.showWaitDialog:

ui.showWaitDialog("Abriendo solicitud...");
ui.setWaitDialogText("Descargando Ficheros...");
ui.hideWaitDialog();

En este caso se visualiza primero “Abriendo solicitud….”, en el mismo dialog sale “Descargando Ficheros….” y finalmente se cierra el dialog.


Tipo Método
Tipo de Dato devuelto Ninguno
Sintáxis ui.sleep ()
Plataforma Android


Ejecuta un tiempo de espera, antes de continuar otra acción.

Ejemplo:

	if (self.MAP_BANDERA==0)
     {
			self.MAP_BANDERA=1;
   			if (self.MAP_AUTO==1)     
           				//ui.showToast("lo pongo auto");
     				systemSettings.setBrightnessMode("automatic");
    				//ui.sleep(2);
	     				self.MAP_BRILLO = systemSettings.getBrightness();
 


var vTimer=0;
	while (checkResult == null) {
		ui.sleep(0.3);
 
		if (vTimer++>15)
			break;
	}	  


Tipo Método
Tipo de Dato devuelto Ninguno
Sintáxis ui.speak()
Plataforma Android


Ejemplo:

<script language="javascript">
				//ui.speak("es", "hola");
				ui.speak("en", self[prop2]);
				ui.refresh(prop2);
			</script>
        </action>
      </leerTexto>
 
      <escucharTexto show-wait-dialog="false" refresh="true">
        <action name="runscript">
          <param name="prop1" />
            <script language="javascript">
 
 
            ui.speak("Diga número de servicio");
 
            let jsParams = {
 
 



Tipo Método
Sintáxis ui.startAudioRecord (“grabacionok”, “MAP_PROPDESTINO”, duración)
Plataforma Android


Permite iniciar una grabación. ui.StartAudioRecord (“grabacionok”, “MAP_PROPDESTINO”, duración). El primer parámetro indica el nodo a ejecutar cuando termine de grabar, el segundo es la propiedad donde guardará el fichero resultante. Si la duración es cero, seguirá grabando sin bloquear hasta invocar StopAudioRecord. En versiones de Android inferiores a la versión 4.1 Jelly Bean, generará un fichero .3gp. En versiones superiores generará un fichero .mp4 encodeado en formato AAC de mejor calidad.


Ejemplo:

ui.startAudioRecord("onrecordfinished","MAP_RECORD_FILE", 0);


Tipo Método
Sintáxis ui.stopAudioRecord()
Plataforma Android


Detiene la grabación iniciada anteriormente con StartAudioRecord

<script language="javascript">
		if ( accion == "REC" ){
		//Si pulsamos el boton de grabacion 
		// 1.- Preguntamos si ya estabamos grabando para parar la grabacion.
		// 2.- Ponemos como imagen la de grabar por si quiere hacer otra grabacion
	  	if ( self.MAP_RECORD_ON == 99){
		  ui.stopAudioRecord();  
		  self.MAP_RECORD_ON = 0;
		  self.MAP_IMGBOTONAUDIO = "record.png";
		  ui.refresh("MAP_BOTONGRABAR");



Tipo Método
Sintáxis ui.stopPlaySoundandVibrate()
Plataforma Android


Detiene la reproducción iniciada anteriormente con PlaySoundandVibrate



Tipo Método
Sintáxis ui.startCamera(“parámetro 1 ”, “parámetro 2”)
Plataforma Android


Lanza la cámara para leer el código de barras.


Ejemplo:

 <camera show-wait-dialog="false" refresh="false">
    <action name="runscript">
      <script language="javascript">
  		ui.startCamera("MAP_ADJUNTORESPUESTA","photo");
  		ui.refresh("MAP_ADJUNTORESPUESTA");
 
  		// ui.getView(self).refreshAll("MAP_ADJUNTORESPUESTA","frmFloatingFoto","frmTitleOrdenes2","ContentAdjuntos");
  		</script>
    </action>
  </camera>
 



Obsoleto. Se recomienda usar el objeto XonePrinter para las acciones de impresión.

Tipo Función
Parámetros Texto [in]:El texto que se mandará imprimir.
Tipo de valor devuelto Ninguno, si la impresión es correcta, en caso contrario devuelve Error.
Sintáxis int appdata.userinterface.print (string Texto )
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Imprime la cadena que recibe por parámetro.

Ejemplo:

printer01.print(sText);


Obsoleto. Se recomienda usar el objeto XonePrinter para las acciones de impresión.

Tipo Función
Parámetros Texto [in]:El texto que se mandará imprimir.
Tipo de valor devuelto Ninguno, si la impresión es correcta, en caso contrario devuelve Error.
Sintáxis int appdata.userinterface.printLine (string Texto )
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Imprime la cadena que recibe por parámetro y provoca un salto de línea.


Obsoleto. Se recomienda usar el objeto XonePrinter para las acciones de impresión.

Tipo Función
Parámetros Texto [in]:El texto que se mandará imprimir.
Tipo de valor devuelto Ninguno, si la impresión es correcta, en caso contrario devuelve Error.
Sintáxis int appdata.userinterface.printPDF (string Texto )
Plataforma Android, IOs


Imprime archivo tipo PDF


Tipo Función
Sintáxis ui.quitApp();
Plataforma Android, IOs


Salir de la aplicación

Ejemplo:

<onback show-wait-dialog="false" refresh="false">
        <action name="runscript">
          <script language="javascript">
			    var vResult=showMsgBox("¿Está seguro de que quiere salir de la aplicación?", "CONFIRMACIÓN!!",1,0);
			    if (vResult==6 )
				{
					ui.quitApp();
				}
	  	</script>
        </action>
      </onback>


Tipo Función
Tipo de valor devuelto Ninguno
Sintáxis ui.refresh();
Plataforma Android, IOs


Para refrescar las propiedades que queremos sean refrescadas en un momento determinado de la aplicación, la cual se pasa como parámetro

Ejemplo:

function doChangeMapPois(sMapControl) {
    let mapContent = self.getContents("ClientesCoord");
    if (mapContent.getFilter() == "t1.NOMBRE = 'Madrid'") {
        mapContent.setFilter("");
    } else {
        mapContent.setFilter("t1.NOMBRE = 'Madrid'");
    }
    mapContent.unlock();
    mapContent.clear();
    mapContent.loadAll();
    mapContent.lock();
    ui.refresh(sMapControl);
 



Tipo Función
Parámetros
Tipo de valor devuelto Ninguno
Sintáxis ui.refreshContentRow();
Plataforma Android, IOs


Cuando queremos refrescar uno o solo algunos registros de un content, sin tener que refrescar el content en su totalidad, podemos utilizar dos métodos de appData.userInterface, los cuáles son: ui.refreshContentRow y ui.refreshContentSelectedRow

El ui.refreshContentRow en el nodo que vamos a ejecutar, tenemos que poner el refresh=“false” in para no refrescar todo, solo lo que especifiquemos.

Ejemplo:

<contentRow refresh="false" >
	<action name="runscript">
		<script language="javascript">
			var mContentUsuarios = self.getContents("ContentUsuarios");
			mContentUsuarios.loadAll();
 
			<-- Con el getItem(1) cogemos el segundo registro del contents, el primero sería el 0. -->
			var mObjItem = mContentUsuarios.getItem(1);
 
			mObjItem.LOGIN = "paquito";
			mObjItem.MAP_COLORVIEW = "#0000FF";
 
			<!-- Los parámetros son el name del prop del contents y el índice en el array de objetos del contents. -->
			ui.refreshContentRow('@MAP_CONTENT', 1); 
 
		</script>
	</action>
 
 


var obj = self.getContents("TipoFotoShow").getItem(self.MAP_IDXTIPOFOTO);
	if (obj)
	{
		obj.MAP_FORECOLOR = appData.getCurrentEnterprise().getVariables("FORECOLOR_SEL");
		obj.MAP_FOTO=newName;
		obj.MAP_ADD=1;
		obj=null;
		ui.refreshContentRow("@TipoFotoShow", self.MAP_IDXTIPOFOTO); 
	}


Tipo Función
Parámetros
Tipo de valor devuelto Ninguno
Sintáxis ui.refreshContentSelectedRow();
Plataforma Android, IOs


En el nodo que queremos que se ejecute, tenemos que poner el refresh=“false” para no refresh todo, sino solamente lo que se specifica.

En este caso ,se ejecuta el selecteditem del contents y tenemos que dar como parámetro el nombre del prop del contents que queremos refrescar, no es necesario pasar el ID del array con la posición del record que queremos refrescar como es el caso del ui.refreshContentRow,ya que el selectitem se ejecuta sobre los records que el usuario seleccionó.

Ejemplo:

<selecteditem refresh="false" show-wait-dialog="false" >
	<action name="runscript">
		<script language="javascript">
			<!-- Cambiamos algunos valores del registro -->
			self.MAP_COLORVIEW = "#00FF00";
			//ui.showToast(self.LOGIN);
			self.LOGIN = "john";
 
			<!-- Le decimos que refresque únicamente la fila actual del contents -->
			ui.refreshContentSelectedRow('@MAP_CONTENT');
		</script>
	</action>
</selecteditem>
 
 


<selecteditem show-wait-dialog="false" refresh="false">
        <action name="runscript">
          <script language="javascript">
				if (self.MAP_SELECTED)
				{
					//si el check MAP_SELECTED estaba marcado, desmarcarlo y refrescar ese registro


Tipo Función
Tipo de valor devuelto Ninguno
Sintáxis ui.refreshvalue(“PROP1,PROP2”);
Plataforma Android, IOs


Si queremos cambiar solo alguna propiedad y el aspecto visual sin variar (fuente, visibilidad, frente y colores de fondo, etc) podemos usar “refreshValue” método de la userInterface que es mucho más rápida y eficiente.

Ejemplo:

ui.refreshValue("PROP1,PROP2"); //If we do it with JAVASCRIPT
 



Obsoleto. Se recomienda usar el objeto XonePrinter para las acciones de impresión.

Tipo Función
Parámetros Saltos [in]:Números de saltos de línea.
Tipo de valor devuelto Ninguno
Sintáxis appdata.userinterface.lineFeed int Saltos
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5), iPhone, Linux, MC+)


Realiza tantos saltos de línea como se indiquen por parámetro.

Ejemplo:

printer01.lineFeed(3);


Obsoleto. Se recomienda usar el objeto XonePrinter para las acciones de impresión.

Tipo Función
Parámetros Texto [in]:El texto que será enviado a la impresora como comandos ascii a no ser que se especifique la macro ##TEXT##. (*)
Tipo de valor devuelto Ninguno, si la impresión es correcta, en caso contrario devuelve Error.
Sintáxis Int appdata.userinterface.PrintCommand (int String )
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Imprime comandos específicos de la impresora, mediante la cadena que recibe por parámetro.

La sintáxis puede ser:

  1) Para escribir texto normal y que el control los interprete como ASCII, sería:\\
  appdata.userinterface.printCommand "##TEXT##hola 130 15 ##END_TEXT##"
  appdata.userinterface.printCommand "##TEXT##! 0 200 200 210 1##END_TEXT##"
  2) Cualquier valor que vaya entre comas sin las macros anteriores, será interpretado como un valor ASCII:
  appdata.userinterface.printCommand "32,35,104,111,108,97,10" sería igual a: appdata.userinterface.printCommand "32,35,##TEXT##hola##END_TEXT##,10"



Obsoleto. Se recomienda usar el objeto XonePrinter para las acciones de impresión.

Tipo Función
Parámetros Tipo [in]:El tipo de código de barras que se mandará imprimir. Tipos disponibles: “EAN13”,“EAN8”,“CODE39”,”CODE128“,”PDF417”,“UPCA”,“UPCE”. \\Valor [in]: El valor que formará el código de barras.
Tipo de valor devuelto Ninguno, si la impresión es correcta, en caso contrario devuelve Error.
Sintáxis int appdata.userinterface.printBarCode (string Tipos, tring Valor )
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Imprime un código de barras del tipo especificado por parámetro.

Ejemplo:

 printer01.printBarcode("code128", self.CODSYSANULA, 400, 200);


Obsoleto. Se recomienda usar el objeto XonePrinter para las acciones de impresión.

Tipo Función
Parámetros Tipo [in]:El tipo de código de barras que se mandará imprimir. Tipos disponibles: “EAN13”,“EAN8”,“CODE39”,”CODE128“,”PDF417”,“UPCA”,“UPCE”. \\Valor [in]: El valor que formará el código de barras.
Tipo de valor devuelto Ninguno si la impresión es correcta, en caso contrario devuelve Error.
Sintáxis int appdata.userinterface.printBIDI (string Tipos, tring Valor )
Plataforma Android, IOS


Imprime un código BIDI del tipo especificado por parámetro.



Tipo Función WMobile
Sintáxis objeto.chronoStart
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Arranca un contador de tiempo.


Tipo Función WMobile
Sintáxis Objeto.chronoStop
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Para el contador de tiempo.


Tipo Función WMobile
Sintáxis long objeto.chronoValue
Tipo de valor devuelto Los milisegundos transcurridos desde la última llamada a chronoValue. La primera vez que es llamada retorna el total de tiempo transcurrido.
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Retorna el tiempo transcurrido, en milisegundos, desde que se arrancó el temporizador o desde la última llamada a chronoValue.


Tipo Función
Parámetros Cadena (in)El mensaje que se va a mostrar en pantalla.
Sintáxis objeto.chronovalue (string Cadena)
Tipo de valor devuelto No retorna valor.
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Escribe la cadena de texto, que se pasa por parámetro, a la pantalla de depuración.

Ejemplo:

appData.writeConsoleString("Aqui probando mandar algo a la consola de replica y ver que se muestra");
TipoFunción
ParámetrosParámetro 1: aplicación de scanner a usar.
  • quickmark1d: Usar QuickMarkpara códigos unidimensionales.
  • quickmark: Usar QuickMark con escáner genérico.
  • zxing: Usar Zxing. Esta es la preferida.

Parámetro 2 (opcional): tipos de código.

  • Si este parámetro no esta presente o su valor es vacío, se intentará identificar todos los códigos soportados.
  • Los valores irán separados por comas. P.Ej: “QRCODE,EAN,ISBN”.
  • EAN: “European article number” incluye (EAN2,EAN5,EAN8,EAN13).
  • UPC: “Uniform product code” incluye (UPC-A, UPC-E).
  • ISBN: “International Standart Book Number” incluye (ISBN-10, ISBN-13).
  • COMPOSITE: EAN/UPC composite. 125: Interleaved 2 of 5.
  • DATABAR: GS1 DataBar (RSS).
  • CODE 39: Code 39.
  • PDF417: PDF417.
  • QRCODE: QR Code.
  • CODE93: Code 93.
  • CODE128: Code 128.

Parámetro 3 (opcional): Propiedad destino de la lectura.

Tipo de valor devueltoNinguno, si la impresión es correcta, en caso contrario devuelve Error.
PlataformasWin32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Lanza o conecta el scanner para la lectura de códigos 2d, al realizarse la lectura se asignara el valor a la propiedad con atributo barcode =”true”. Se ha implementado posteriormente un tercer parámetro que nos permite especificar la propiedad destino de la lectura del código de barras, tenga ésta o no el atributo barcode=“true”. Este comando, para su correcto funcionamiento buscará una aplicación llamada “Barcode Scanner” by ZXing. Si no está instalada, nos abrirá el market para que la instalemos.

No se pueden poner 2 propiedades con barcode=“true” en una misma colección.

Ejemplo de uso:

<button name="ScannerCamera" group="1" caption="Lanzar scanner" visible="1"  labelwidth="10" lmargin="6"  method="ExecuteNode (StartScanner)” />
 
<StartScanner>
	<action name="runscript">
		<script language="javascript">
 
			<!-- Este comando lee TODOS los tipos de códigos soportados  -->
			ui.startScanner("zxing", "", "MAP_CODIGOBARRAS");
 
			<!-- Sólo para leer códigos QR y ponemos la lectura en el campo "MAP_CODIGO -->	
			ui.startScanner("zxing", "QRCODE", "MAP_CODIGO");
 
			<!-- Sólo para leer códigos ISBN -->
			ui.startScanner("zxing", "ISBN");
 
			<!-- Sólo para leer códigos QR, EAN e ISBN -->
			ui.startScanner("zxing", "QRCODE,EAN,ISBN");
 
		</script>
	</action>
</StartScanner>



Tipo Función
Tipo de valor devuelto Valor Numérico: 0: Bluetooth OFF/ 1: Bluetooth ON/ 2: Bluetooth Visible
Sintáxis Int appdata.userinterface.bthGetMode ( )
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Retorna el estado del bluetooth.


Tipo Función
Parámetros NuevoEstado [in]Indica el nuevo estado al que se cambiará el bluetooth. Los valores posibles son:0: Bluetooth OFF/ 1: Bluetooth ON/ 2: Bluetooth Visible
Tipo de valor devuelto Ninguno
Sintáxis appdata.userinterface.bthSetMode int NuevoEstado
Plataforma Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)


Asigna el nuevo estado del bluetooth.


Tipo Función
Parámetros (*)
Tipo de valor devuelto Ninguno
Sintáxis ui.showGroup( “#group”,“animación de entrada”,duración entrada,“animación de salida”,duración salida )


Esta función muestra un grupo de la colección con una transición mediante script.

(*)Los TIPOS DE ANIMACIONES que pueden ponerse en los parametros de “animación de entrada” y “animación de salida”:

  • “##ALPHA_IN##“ - Degradado de menos a más para efecto de entrada
  • ”##ALPHA_OUT##“ - Degradado de más a menos para efecto de salida
  • ”##LEFT##“ Entrada por la izquierda
  • ”##LEFT_OUT##“ Salida por la izquierda
  • ”##PUSH_IN##“ Entrada por la parte inferior
  • ”##PUSH_OUT##“ Salida por la parte superior
  • ”##RIGHT##“ Entrada por la derecha
  • ”##RIGHT_OUT##“ Salida por la derecha
  • ”##ROTATE_IN##“ Rotación 2D para entrada
  • ”##ROTATE_OUT##“ Rotación 2D para salida
  • ”##ROTATE3D_IN##“ Rotación 3D para entrada
  • ”##ROTATE3D_OUT##“ Rotación 3D para salida
  • ”##ZOOM_IN##“ Entrada de menor a mayor
  • ”##ZOOM_OUT##“ Salida de mayor a menor


Ejemplos de Uso:

<action name="runscript">
	<script language="javascript">
		// Entrada del group id="3" con rotación 3D y tiempo de espera de 1000 ms 
		ui.showGroup("3","##ROTATE3D_IN##",1000,"##ROTATE3D_OUT##",1000);
 
		//Entrada del group id="1" con difuminado con duración de 600 milisegundos 
		ui.showGroup( "1","##ALPHA_IN##",600,"##ALPHA_OUT##",600);
 
		// Entrada del group id="2" con Zoom de entrada y salida y duración de 1000 ms 
		ui.showGroup( "2","##ZOOM_IN##",1000,"##ZOOM_OUT##",1000);
	</script>
</action>

También se puede definir en la cabecera de los grupos o en los frames el efecto de entrada que se quiere por defecto para el grupo,

  <group name="General" id="1" height="100%" animation-out="animación de salida" animation-in="animación de entrada" >
  <frame name="frmFlotante" floating="true" top="300px" left="200px" width="600px" height="300px" class="FrameAnimateFromRight" >

.FrameAnimateFromTop
{
	animation-in-delay:500;
	animation-out-delay:500;
 
	/* Entra y sale por arriba. */
	animation-in:##PUSH_DOWN_IN##;		/* Aparece por arriba */
	animation-out:##PUSH_OUT##;		/* Se va por arriba */
}
 
.FrameAnimateFromBottom
{
	animation-in-delay:500;
	animation-out-delay:500;
 
	/* Entra y sale por abajo. */
	animation-in:##PUSH_IN##;		/* Aparece por abajo */
	animation-out:##PUSH_DOWN_OUT##; 	/* Se va por abajo */
}
 
.FrameAnimateFromRight
{
	animation-in-delay:500;
	animation-out-delay:500;
 
	/* Entra y sale por la derecha. */
	animation-in:##RIGHT_IN##;
	animation-out:##LEFT_OUT##;
}
 
.FrameAnimateFromLeft
{
	animation-in-delay:500;
	animation-out-delay:500;
 
	/* Entra y sale por la izquierda. */
	animation-in:##LEFT_IN##;
	animation-out:##RIGHT_OUT##;
}
 
.FrameAnimateRotate3D
{
	animation-in-delay:500;
	animation-out-delay:500;
 
	/* Entra y sale rotando en 3D. */
	animation-in:##ROTATE3D_IN##;
	animation-out:##ROTATE3D_OUT##;
}
 
.FrameAnimateAlpha
{
	animation-in-delay:500;
	animation-out-delay:500;
 
	/* Aparece y desaparece;. */
	animation-in:##ALPHA_IN##;
	animation-out:##ALPHA_OUT##;
 
	/* ZOOM. */
	animation-in:##ZOOM_IN##;
	animation-out:##ZOOM_OUT##;
}
 
.FrameAnimateZoom
{
	animation-in-delay:500;
	animation-out-delay:500;
 
	/* ZOOM. */
	animation-in:##ZOOM_IN##;
	animation-out:##ZOOM_OUT##;	
}

Cumple las mismas macros que el script.

También puedes ocultar la ventana de espera que sea por defecto en la ejecución de los script para que el efecto sea más limpio.

En la cabecera del nodo de script pones los atributos:

show-wait-dialog="false" refresh="false"


Eso permite que no se muestre el diálogo de espera y que tampoco se refresque la pantalla. Ya lo hará la animación de forma automática.
Ejemplo de Uso:

<button1_Click show-wait-dialog="false" refresh="false">
	<action name="runscript">
		<script language="javascript">
			ui.showGroup ("3","##ROTATE3D_IN##",1000,"##ROTATE3D_OUT##",1000);
		</script>
	</action>
</button1_Click>


Tipo Función
Tipo de Dato devuelto Entero
Plataforma Android


Esta función comprueba si está habilitado el adaptador inalámbrico. Esto no significa que se haya conectado a una red. Devuelve 1 si es cierto, 0 en caso contrario.

Ejemplos de Uso:

Function wifionoff()
 
If ui.isWifiEnabled>0 Then
  ' apagamos
  This("MAP_NOMBREBOTON")="Encender Wifi"
  This("MAP_COLORBOTON")="#FFFFFF"
  appdata.CurrentEnterprise.Variables("WifiOn")=0
  ui.stopWifi
Else
  ' encendemos
  This("MAP_NOMBREBOTON")="Apagar Wifi"
  This("MAP_COLORBOTON")="#58ACFA"
  appdata.CurrentEnterprise.Variables("WifiOn")=1
  ui.startWifi
  ui.ShowToast "ENCENDIENDO LA WIFI, ESPERE..."
End If


Tipo Función
Tipo de Dato devuelto Ninguno
Plataforma Android


Esta función activa el wifi. Debe usarse con muchísimo cuidado el usuario puede considerar esta función bastante intrusiva.

Ejemplos de Uso:

   This("MAP_COLORBOTON")="#58ACFA"
  appdata.CurrentEnterprise.Variables("WifiOn")=1
  ui.startWifi
  ui.ShowToast "ENCENDIENDO LA WIFI, ESPERE..."
 


Tipo Función
Tipo de Dato devuelto Ninguno
Plataforma Android


Esta función desactiva el wifi. Lo mismo que la anterior, pero esta incluso podría cortar alguna descarga en curso.

Ejemplo:

This("MAP_NOMBREBOTON")="Encender Wifi"
This("MAP_COLORBOTON")="#FFFFFF"
appdata.CurrentEnterprise.Variables("WifiOn")=0
ui.stopWifi
'appdata.FailWithMessage -11888,"##WIFIOFF####ENABLECONNECTION2##"
End Function


Tipo Función
Tipo de Dato devuelto Ninguno
Plataforma Android


Permite hacer captura de una imagen, hacer foto.

Ejemplo:

 


Tipo Función
Tipo de Dato devuelto Ninguno
Plataforma Android

Cambia el estado de visibilidad del grupo.

Ejemplo:

<prop name="MAP_ICON_DRAWER" type="B" onclick="javascript:ui.toggleGroup(999);" newline="false" labelwidth="0" class="DrawerIcon"/>


Tipo Método
Sintáxis ui.startKioskMode(),ui.stopKioskMode
Plataforma Android


Con estos métodos uno puede bloquear la pantalla actual para que el usuario no salga de ella. Sin ejecutarse dentro de nuestro kiosko puede salir de todas formas con una combinacion de teclas (tecla back y recientes), pero sigue siendo útil.

Ejemplo:

function doStartKioskMode() {
    ui.startKioskMode();
}
 
function doStopKioskMode() {
    ui.stopKioskMode();
}


Tipo Función
Tipo de Dato devuelto Ninguno
Plataforma Android

Desinstalar aplicación.

Ejemplo:

 


Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.makePhoneCall(valortelefono)
Plataforma iPhone, Android


Realiza la llamada desde un Script al numero insertado como parametro en la función.

Ejemplos:

ui.makePhoneCall("123456789");
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;



Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.hideSoftwareKeyboard();
Plataforma Android


Si está visible, oculta el teclado en pantalla de android.


Tipo Función
Tipo de Dato devuelto Ninguno
Sintáxis ui.updateWaitDialog “Título”, aumento
Plataforma Android

Si se define este método en un nodo de botón tal y como se muestra en el ejemplo, se sustituirá la ventana de cargando al ejecutar el script por otra con una barra de progreso y título. Útil cuando se carga un script demasiado pesado.

<AbrirFiltro show-progress-dialog="true">
  <action name="runscript">
    <script language="javascript">
      ui.updateWaitDialog("Ciclo 1",20);
      [script aqui]
      ui.updateWaitDialog("Ciclo 2",30);
      [script aqui]
      ui.updateWaitDialog("Ciclo 2.1",50);
      [script aqui]
      ui.updateWaitDialog("Ciclo 3",70);
      [script aqui]
      ui.updateWaitDialog("Ciclo 4",90);
      [script aqui]
      ui.updateWaitDialog("Ciclo 5",100);
    </script>
  </action>
</AbrirFiltro>



Tipo Función
Tipo de Dato devuelto Ninguno
Sintaxis ui.SetMax.Dialog()
Plataforma Android


Combinado con la función anterior, este método ajusta el máximo de la barra de progreso.
Es útil para no tener que calcular el aumento en cada updateWaitDialog.
Si, por ejemplo, quisiéramos recorrer una colección y cada vez que se procese un registro o varios aumentar sólo uno, guardamos primero el número de pasadas que daremos, lo ajustamos como el máximo y después en cada vuelta aumentamos el progreso.

<AbrirFiltro show-progress-dialog="true">
  <action name="runscript">
    <script language="javascript">
      var aumento=0;
      ui.setMaxWaitDialog(50);
      [bucle aquí]
        ui.updateWaitDialog("Generando PDF...", aumento);
        aumento = aumento + 1;
      [fin bucle]
    </script>
  </action>
</AbrirFiltro>
 
<barraprogreso show-progress-dialog="true">
	<action name="runscript">
	  <script language="javascript">
			//Para poner una barra de progreso en pantallla
			var cont=0;
			ui.setMaxWaitDialog(15000);
			for (i==1;i=15000;i++) {
			  ui.updateWaitDialog("Generando lo que sea",cont);
			  cont=cont+1;
			}
		</script>
	</action>
</barraprogreso>



Tipo Método
Tipo de Dato devuelto Ninguno
Sintáxis ui.setNotificationLed
Plataforma Android


Modifica el led del dispositvo, este led solamente será mostrado si tiene una notificación en la barra de notificación y el dispositivo está bloqueado.

Parámetro 1 Define el color del led
Parámetro 2 Define que tiempo estará el led en ON.
Parámetro 3 Define que tiempo estará el led en OFF.


Ejemplo:

    ui.setNotificationLed("#00FF00", 1000, 1000);




Tipo Método
Tipo de Dato devuelto Ninguno
Sintáxis ui.setSelection()
Plataforma Android



Configura una selección.


Tipo Método
Tipo de Dato devuelto Ninguno
Sintáxis ui.shareData()
Plataforma Android



Compartir Datos

Ejemplo:

case "compartir":
    ui.captureImage ("captureimg","group4Frame");
    ui.shareData ("Compartir byXOne:" + (self.MAP_COMPARTIR),"",self.captureimg);
					break;


Tipo Método
Tipo de Dato devuelto Ninguno
Sintáxis ui.showConsoleReplica;
Plataforma Android


Para mostrar la consola de réplica

Ejemplo:

<btnreplica show-wait-dialog="false">
        <action name="runscript">
          <script language="javascript">
				replica.start();
				ui.showConsoleReplica();
		  </script>
        </action>
      </btnreplica>
 
 


Tipo Función
Tipo de Dato devuelto Boolean
Sintáxis ui.playSoundAndVibrate(“Sound.mp3”,Vibrate,numRepeat);
Plataforma Android, IOS


Este método permite lanzar un sonido con o sin vibración, y hacer que se repita n veces. El sonido puede ser cualquiera que pueda reproducir el dispositivo, mp3, wav, etc. Por defecto, el sonido se busca en la carpeta files del proyecto. También se puede reproducir el tono de notificación que se tenga configurado en el dispositivo así como si está activa la vibración o no con la macro ##DEFAULT##.

//El archivo de sonido tiene que estar en la carpeta files del proyecto
ui.playSoundAndVibrate("bultonoencontrado.wav", "###DEFAULT##",1);
 
'Ejecuta el tono que tenga configurado el dispositivo 5 veces.
ui.playSoundAndVibrate( "##DEFAULT##", "##DEFAULT##", 5);
 
'Lo mismo que el anterior pero sin vibración
ui.PlaySoundAndVibrate( "##DEFAULT##", "", 5);
<detenersonido>
	<action name="runscript">
		<script language="javascript">
			//Detiene la reproducción. No pasa nada si no hay nada reproduciéndose.
			ui.stopPlaySoundAndVibrate();
		</script>
	</action>
</detenersonido>

Código necesario para el mapa embebido


Con este código mostramos únicamente un mapa embebido con los POI que tengamos en la tabla correspondiente.

	<prop name="MAP_MAPA" zoom-to-my-location="false" visible="1" type="Z" contents="ClientesCoord" onchange="Refresh" mask="2" viewmode="mapview" mapview-embedded="true" width="80%" height="80%" zoom="true" />
	<contents name="ClientesCoord" src="ClientesCoord" />


El siguiente código lo ponemos dentro de la colección del contents que contiene los datos con las direcciones de los POI, si bien podríamos ponerlo también en un botón o en cualquier otra parte.

Código javascript:

<selecteditem refresh="false">
	<action name="runscript">
		<script language="javascript">
			/* ui.showToast("Soy el selecteditem del mapview: " + self.DIRECCION) */
			/* Esto pinta una ruta desde la ciudad de Lugo (43.0069, -7.5699) hacia la posición del POI que se ha pulsado */
			ui.drawMapRoute("MAP_MAPA", self.LATITUD, self.LONGITUD, 43.0069, -7.5699, "driving", "#FF0000");
		</script>
	</action>
</selecteditem>


Parámetro 1 Define el color del led
Parámetro 2 Define el tiempo que está encendido el led
Parámetro 3 Define el tiempo que está apagado el led


Modifica el color del led de los dispositivos que lo tengan, este led solo se verá si tiene una notificación en la barra de notificaciones y si está el dispositivo bloqueado.


Ejemplo:

    ui.setNotificationLed("#00FF00", 1000, 1000);


<notificar show-wait-dialog="false">
        <action name="runscript">
          <script language="javascript">
				ui.showNotification(1, "Título", "Esto es una notificación", "Aviso de recepción de datos");
			</script>
        </action>
      </notificar>
 





Tipo Función
Tipo de Dato devuelto Boolean
Sintáxis ui.startGPS()


Inicializa y conecta el GPS del dispositivo para capturar las coordenadas GPS para su posterior tratamiento en un script.

Ejemplos de uso:

<!-- El onlogon es un nodo "especial" de la colección Empresas, y se ejecuta cuando nos logueamos en la aplicación. -->
<onlogon>
	<action name="runscript">
		<script language="javascript">
			ui.startGps();
		</script>
	</action>
</onlogon>


function GetPosGPS(tipo,auxcollobj) {
	var latitud=0;
	var longitud=0;
	var distinta=0;
	//Activamos el GPS
	ui.startGps();	
	// Capturamos las coordenadas GPS	
	var collGPS =appData.getCollection("ContentConectarGPS");
	collGPS.startBrowse();



Tipo Función
Tipo de Dato devuelto Boolean
Sintáxis ui.stopGps()


Finaliza y cierra el GPS del dispositivo.

<!-- El onlogoff es un nodo "especial" de la colección Empresas, y se ejecuta cuando finaliza la ejecución del programa. -->
<onlogoff>
	<action name="runscript">
		<script language="javascript">
			ui.stopGPS();
		</script>
	</action>
</onlogoff>



getLastKnownLocation obtiene la última localización (Latitud, Longitud).
getLastKnownLocationLatitude obtiene la última latitud.
getLastKnownLocationLongitude obtiene la última Longitud.
getLastKnownLocationAltitude obtiene la última Altitud.
getLastKnownLocationSpeed obtiene la última Velocidad.
getLastKnownLocationAccuracy obtiene la última precisión.
getLastKnownLocationBearing obtiene el último rumbo.
getLastKnownLocationProvider obtiene el último proveedor.
getLastKnownLocationDateTime obtiene la última fecha y hora.


Tipo Función
Parámetros getLastKnownLocation
Tipo de Dato devuelto Numérico

Función asociada al control del GPS. Obtiene la última precisión.

Ejemplo:

</action>
      </activargps>
      <getlastknownlocation refresh="false">
        <action name="runscript">
          <script language="vbscript">
                ui.ShowToast "GetLastKnownLocation: " + ui.GetLastKnownLocation
            </script>
        </action>
      </getlastknownlocation>



Tipo Función
Parámetros getLastKnownLocationAccuracy
Tipo de Dato devuelto Numérico

Función asociada al control del GPS. Obtiene la última localización (Latitud, Longitud)

Ejemplo:

<getlastknownlocationaccuracy refresh="false">
        <action name="runscript">
          <script language="vbscript">
                ui.ShowToast "GetLastKnownLocationAccuracy: " + ui.GetLastKnownLocationAccuracy
            </script>
        </action>
      </getlastknownlocationaccuracy>



Tipo Función
Parámetros getLastKnownLocationAltitude
Tipo de Dato devuelto Numérico

Función asociada al control del GPS. Obtiene la última altitud.

Ejemplo:

<getlastknownlocationaltitude refresh="false">
        <action name="runscript">
          <script language="vbscript">
                ui.ShowToast "GetLastKnownLocationAltitude: " + ui.GetLastKnownLocationAltitude
            </script>
        </action>
      </getlastknownlocationaltitude>



Tipo Función
Parámetros getLastKnownLocationBearing
Tipo de Dato devuelto Numérico

Función asociada al control del GPS. Obtiene el último rumbo.

Ejemplo:

 <getlastknownlocationbearing refresh="false">
        <action name="runscript">
          <script language="vbscript">
                ui.ShowToast "GetLastKnownLocationBearing: " + ui.GetLastKnownLocationBearing
            </script>
        </action>
      </getlastknownlocationbearing>



Tipo Función
Parámetros getLastKnownLocationDateTime
Tipo de Dato devuelto Numérico

Función asociada al control del GPS. Obtiene la última fecha y hora.

Ejemplo:

 <getlastknownlocationdatetime refresh="false">
        <action name="runscript">
          <script language="vbscript">
                ui.ShowToast "GetLastKnownLocationDateTime: " + ui.GetLastKnownLocationDateTime
            </script>
        </action>
      </getlastknownlocationdatetime>



Tipo Función
Parámetros getLastKnownLocationLatitude
Tipo de Dato devuelto Numérico

Función asociada al control del GPS. Obtiene la última latitud.

Ejemplo:

 <getlastknownlocationlatitude refresh="false">
        <action name="runscript">
          <script language="vbscript">
                ui.ShowToast "GetLastKnownLocationLatitude: " + ui.GetLastKnownLocationLatitude
            </script>
        </action>
      </getlastknownlocationlatitude>



Tipo Función
Parámetros getLastKnownLocationLongitude
Tipo de Dato devuelto Numérico

Función asociada al control del GPS. Obtiene la última longitud conocida.

Ejemplo:

  </getlastknownlocationlatitude>
      <getlastknownlocationlongitude refresh="false">
        <action name="runscript">
          <script language="vbscript">
                ui.ShowToast "GetLastKnownLocationLongitude: " + ui.GetLastKnownLocationLongitude
            </script>
        </action>
      </getlastknownlocationlongitude>



Tipo Función
Parámetros getLastKnownLocationProvider
Tipo de Dato devuelto Numérico

Obtiene el último proveedor.

Ejemplo:

  <getlastknownlocationprovider refresh="false">
        <action name="runscript">
          <script language="vbscript">
                ui.ShowToast "GetLastKnownLocationProvider: " + ui.GetLastKnownLocationProvider
            </script>
        </action>
      </getlastknownlocationprovider>



Tipo Función
Parámetros getLastKnownLocationSpeed
Tipo de Dato devuelto Numérico

Obtiene la velocidad de la última localización conocida.

Ejemplo:

   <getlastknownlocationspeed refresh="false">
        <action name="runscript">
          <script language="vbscript">
                ui.ShowToast "GetLastKnownLocationSpeed: " + ui.GetLastKnownLocationSpeed
            </script>
        </action>