Etiqueta

29 abril 2015

Ventanas adaptables (Sync Screens Tool)

¿Cómo funciona la nueva herramienta "Sync Screens"?


La idea es que, tras crear un "remote form", podamos formatear todos sus campos y controles para que aparezcan con el tamaño y posición correctos, según cada una de las posibles orientaciones y tamaños de pantalla, ya sean de tipo escritorio, tabletas o móviles. (según las diferentes configuraciones soportadas para la propiedad $screensize).

Sin duda se trata de una tarea que nos consume mucho tiempo a los desarrolladores, debido al gran número de diferentes dispositivos y diseños soportados por los "remote form".


Afortunadamente ésta herramienta nos permitirá realizar ésta labor de forma automática, lo que sin duda nos ahorrará mucho tiempo, además de hacer que nuestras aplicaciones sean más consistentes y fáciles de usar para los usuarios finales, puesto que se adaptarán al dispositivo en uso.


Podrá localizar la nueva herramienta "Sync screens" situada bajo el menú "Tools≥≥Add Ons".


Para utilizarla deberá seleccionar una biblioteca desde el desplegable "Library" y seleccionar el "remote form" JavaScript que desee sincronizar. Mediante el desplegable 'Source Screensize' podrá indicar cual es el punto de partida sobre el cual se construirán el resto de los tamaños seleccionados. (por defecto aparecerá seleccionado "desktop") Después, deberá elegir qué tamaños deberán sincronizarse mediante las casillas de verificación. Los elementos situados bajo "Options" le permitirán escalar o no los objetos, según su posición horizontal y/o vertical y/o según su anchura y altura. Si no desea que un objeto en particular sea alterado por la herramienta, puede optar por bloquearlo. Para ello y desde el modo-diseño, pulse botón derecho sobre el objeto y escoja la opción "Lock", la opción "Ignore Locked Components" (por defecto activada) le permitirá decidir si tal comportamiento deberá ser tenido en cuenta o no. Una vez realizados los ajustes pertinentes, haga clic sobre el botón "Sync".

Ahora podrá cambiar la propiedad $screensize de su "remote form", para comprobar el funcionamiento de los diferentes diseños seleccionados. Recomendamos que también realice pruebas en un navegador y en diferentes dispositivos para comprobar que los diferentes objetos del "remote form" se dimensionen y posicionen correctamente.

22 abril 2015

Como eliminar líneas duplicadas de una lista

El ejemplo siguiente une dos listas (listaUno y listaDos) sobre una nueva denominada listaUnida, para después eliminar de ella las líneas duplicadas, según el valor de la columna aValor.

Calculate listaUnida as listaUno
Do listaUnida.$merge(listaDos)
Do listaUnida.$sort($ref.aValor,kFalse)
Do listaUnida.$sendall($ref.$selected.$assign(kTrue),($ref.aValor=listaUnida.[$ref.$line+1].aValor)|(($ref.$line>1)&($ref.aValor=listaUnida.[$ref.$line-1].aValor)))
Do listaUnida.$remove(kListDeleteSelected)

El ejemplo siguiente está considerado como el más rápido de todos, para una "myList"  con 1578 filas de las cuales 250 están duplicadas, el tiempo fue de dos segundos.

Set current list (myList)
Set sort field (myCol)
Sort list
Set search as calculation {myList(1,#L)=myList(1,#L-1)}
Search list (Select matches (OR),Deselect non-matches (AND))
Delete selected lines

Aunque seguramente la mejor opción sea la apuntada por Xavier Blanco, que consiste en el uso del método predefinido "listaUnida.$cols.aValor.$removeduplicates(ktrue)" (Ver la página 101 del manual de programación en castellano).


15 abril 2015

Códigos de error y constantes FileOps

En ésta entrada os dejo el listado de las constantes disponibles para FileOps, los códigos de error a que corresponden y una breve explicación.


kFileOpsOK 0
Ejecutado con éxito
kFileOpsParamError 1 Faltan parámetros
kFileOpsOutOfMemory 12
Memoria insuficiente
kFileOpsDirFull -33 Fichero o directorio lleno
kFileOpsDiskFull -34
Disco lleno
kFileOpsVolumeNotFound -35 El volumen especificado no existe
kFileOpsDiskIOError -36
Error de disco E/S
kFileOpsBadName -37 Nombre de archivo o volumen incorrecto (tal vez sin nombre)
kFileOpsFileNotOpen -38
Archivo no abierto
kFileOpsEndOfFile -39 Se llegó al final del archivo durante una operación de lectura
kFileOpsPositionBeforeStart -40
Intento de posicionarse en un lugar anterior al inicial del archivo
kFileOpsTooManyFilesOpen -42 Se han abierto demasiados archivos
kFileOpsFileNotFound -43
Archivo no encontrado
kFileOpsHardwareVolumeLock -44 El volumen está bloqueado por hardware
kFileOpsFileLocked -45
Archivo bloqueado
kFileOpsSoftwareVolumeLock -46 El volumen está bloqueado por software
kFileOpsMoreFilesOpen -47
Uno o más archivos ya estan abiertos
kFileOpsAlreadyExists -48 Ya existe un archivo con el nombre especificado 
kFileOpsAlreadyWriteOpen -49
Sólo se permite un único camino de acceso al archivo durante su escritura              
kFileOpsNoDefaultVolume -50 El volumen predefinido no existe 
kFileOpsBadFileRef -51 - 
kFileOpsVolumeNotOnline -53
El volumen no esta disponible o montado
kFileOpsPermissionDenied -54 Permiso denegado o archivo de sólo lectura 
kFileOpsVolumeAlreadyMounted -55
El volumen especificado ya está disponible o montado
kFileOpsBadDrive -56 El número de unidad expecificado no existe
kFileOpsInvalidFormat -57
El volumen no contiene uno de los formatos sportados
kFileOpsExternalSystemError -58 Error externo detectado por el sistema de archivos
kFileOpsProblemDuringRename -59
Se ha producido un problema durante el cambio de nombre
kFileOpsBadMasterBlock -60 Se ha detectado un bloque índice defectuoso; deberá reiniciar el volumen
kFileOpsCantOpenLockedFile -61
No ha sido posible abrir el archivo por estar bloqueado
kFileOpsDirectoryNotFound -120 Directorio no localizado
kFileOpsTooManyDirOpen -121
Se han abierto demasiados directorios
kFileOpsCantMoveToOffspring -122 Intento de posicionarse fuera del ambito del archivo
kFileOpsNonHFSOperation -123
Intento de relizar una operación HFS sobre un volumen con otro formato
kFileOpsDifferentVolume -124
Intento de relizar la operación sobre volúmenes o nombres de archivo diferentes
kFileOpsInternalSystemError -127 Error interno detectado por el sistema de archivos
kFileOpsCrossDeviceLink 100 -
kFileOpsDeadlock 101 -
kFileOpsTooManyArguments 102 -
kFileOpsMathArgument 103 -
kFileOpsExecFormatError 104 -
kFileOpsResultTooBig 105 -
kFileOpsUnknownError 998
Error desconocido
kFileOpsNoOperation 999 Operación no compatible para la plataforma en uso
kFileOpsInvalidEncoding 1000 -