====== AppData====== \\ VBScript no es case sensitive, de modo que los nombres de objetos y métodos, deberían emplearse como se indican a continuación, pero no suponen un error de sintaxis si se emplean con una notación diferente.\\ ==== ÁMBITO APLICACIÓN ==== \\ El objeto **AppData** contiene la referencia a la aplicación XOne dentro de la cual se está ejecutando cualquier script.\\ \\ Sea cual sea el nivel de anidamiento, el ámbito activo o cualquier otra condición, este objeto es siempre el mismo y siempre está disponible. Sus Métodos son los siguientes:\\ \\ ===AllowedEnterprises=== ^ Tipo |Propiedad | ^ Acceso |Lectura/Escritura| ^ Tipo de Dato devuelto |Texto | ^ Plataforma |Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Devuelve el valor de la macro **##ENTIDCOLL##** tal como quedaría en los filtros de los SQLs o en cualquier otro lugar que se sustituya la macro.\\ \\ Se puede asignar valor a esta macro para que al sustituir **##ENTIDCOLL##** se haga con el valor asignado a esta propiedad (i.e. Durante el para trabajar con los filtros de todas las colecciones que usen esta macro.)\\ \\ ===AllowedUsers=== ^ Tipo | Propiedad | ^ Acceso | Lectura/Escritura| ^ Tipo de Dato devuelto | Texto | ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Devuelve el valor de la macro ##**USERIDCOLL**##.\\ El comportamiento es similar al de **AllowedEnterprises**, es decir, se puede asignar para que se use el nuevo valor en los filtros y demás.\\ \\ ===AppPath=== \\ ^ Tipo | Propiedad | ^ Acceso | Lectura/Escritura| ^ Tipo de Dato devuelto | Texto | ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Devuelve la ruta en la que se está ejecutando la aplicación.\\ \\ Esta ruta es la que se utiliza como raíz para la búsqueda de todos los ficheros de datos y de configuración (mappings, appwizard, etc.) así como los ficheros de script y la base de datos si su acceso lleva una ruta (i.e. SQLite).\\ \\ **Ejemplo de Uso:** fichero=appdata.AppPath+"files\"+cstr(obj("FOTO_ALBARAN")) ===ConnString=== \\ ^ Tipo | Propiedad | ^ Acceso | Lectura/Escritura| ^ Tipo de Dato devuelto | Texto | ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Contiene la cadena de conexión de la conexión principal de la aplicación.\\ \\ Normalmente, las aplicaciones tienen una conexión principal y de forma opcional pueden tener un número adicional de conexiones.\\ Esta propiedad se refiere a la conexión principal de la aplicación. \\ Modificar el valor de esta propiedad después que se ha llamado a **IniciarApp** no tiene efecto en el funcionamiento del programa, por lo que se debe asignar antes de iniciar el runtime, o en su defecto, cambiarla, llamará a **TerminateApp** y después volver a iniciar la aplicación (logon incluído).\\ \\ ===ConsoleOutput=== \\ ^ Tipo | Propiedad | ^ Acceso | Lectura/Escritura| ^ Tipo de Dato devuelto | Texto | ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Contiene una cadena con todo lo que se ha escrito en la consola de ejecución mediante WriteConsoleString.\\ \\ Se puede cambiar el valor, lo cual se puede usar para reiniciar el contenido de la consola: (i.e. Mediante un botón “Limpiar” en una ventana o algo por el estilo) \\ **Ejemplo de Uso:** This("MSG") = Cstr(appData.ConsoleOutput) appData.ConsoleOutput = "" ===CurrentEnterprise=== \\ ^ Tipo | Propiedad | ^ Acceso | Lectura| ^ Tipo de Dato devuelto | Data Object| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Devuelve un objeto de datos representando la empresa que está actualmente seleccionada (empresa del usuario logueado).\\ \\ Este objeto se asigna después del proceso de logon, de modo que si se llama antes de que se conecte el usuario, su resultado será **Nothing**.\\ \\ Si el logon falla, o el usuario no tiene empresa asignada, el valor de esta propiedad también será **Nothing**.\\ Por tanto, no se debe asumir que tiene valor siempre.\\ \\ ===DateMask=== \\ ^ Tipo | Propiedad | ^ Acceso | Lectura/Escritura| ^ Tipo de Dato devuelto | Texto| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Contiene la máscara de fecha de la conexión principal de la aplicación.\\ \\ Esta máscara no tiene que ver con el orden de fecha del local del sistema operativo que se esté usando, sino con la de la base de datos de la conexión principal.\\ \\ Se puede modificar en cualquier momento, aunque lo suyo sería cambiarla antes de hacer nada con la conexión, ya que normalmente al iniciarse una aplicación se hacen accesos a base de datos, y si hay alguno de ellos que lleve campos de fecha, el valor de **DateMask** ya debería ser correcto en ese momento.\\ \\ Esta propiedad normalmente la inicializa el framework y como mucho lo que se hace con ella es consultarla.\\ \\ ===DecryptString=== \\ ^ Tipo | Método| ^ Parámetros | **Source**: Cadena a descifrar/**Flags**: Opciones de encriptación. Reservado, debe ser cero.| ^ Tipo de Dato devuelto | Texto| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Descifra una cadena de texto que se pasa como parámetro.\\ \\ Utiliza como clave la que se haya asignado mediante los ficheros de claves, el almacén de certificados local, o usando valores aleatorios, dependiendo del valor del parámetro Flags.\\ La cadena se debe suministrar en **Base64**. \\ La función convertirá la cadena en un bloque binario que será posteriormente descifrado y devuelto en forma de cadena.\\ \\ **Ejemplo de Uso:** stDec=appData.DecryptString(stEnc,0) ===encryptString=== \\ ^ Tipo | Método| ^ Parámetros | Source: Cadena a encriptar /Flags: Opciones de encriptación. Reservado, debe ser cero.| ^ Tipo de Dato devuelto | Texto| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Cifra y codifica una cadena que se pasa como parámetro.\\ La clave usada dependerá del valor del parámetro Flags.\\ La cadena se devuelve una vez cifrada en formato **Base64** para poder almacenarse en un campo de base de datos o en un fichero de texto.\\ \\ **Ejemplo de Uso:** stEnc=appData.encryptString(st,0) ===ExecuteSQL=== \\ ^ Tipo | Método| ^ Parámetros | CommandString/SentenciaSQL| ^ Tipo de Dato devuelto | Texto| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Ejecuta una sentencia SQL en la conexión principal de la aplicación. \\ \\ - Si la réplica está activa (IsReplicating=True) la sentencia se ejecutará dejando las trazas correspondientes en la cola de réplica. - Solo se pueden ejecutar INSERT, UPDATE o DELETE, no se pueden hacer truncates ni ninguna otra instrucción SQL. - No se pueden utilizar macros. \\ Ejemplo de Uso: appdata.executeSQL "UPDATE Gen_Rutas SET VISITADO=0 WHERE IDUSUARIO=" + CStr(This("IDUSUARIO")) ===Error=== \\ ^ Tipo | Propiedad| ^ Acceso | Lectura| ^ Tipo de Dato devuelto | [[wiki:2.-desarrollo-app:2.5.-scripting_y_modelo-objetos:b14.01.-vbscript:XOneERROR]]| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Devuelve un objeto que contiene los datos de error de la aplicación.\\ \\ En este objeto se puede encontrar la información del último error ocurrido durante la ejecución de la aplicación. \\ \\ Ejemplo de código: on error resume next set coll=appdata.getcollection("ArticulosBuscar") filtro=coll.filter coll.filter="CODARTICULO="+cstr(articulo) coll.startbrowse if appdata.error.Number<>0 then appdata.userinterface.msgbox "Error " + CStr(appdata.error.Description),"ERROR",0 'appdata.userinterface.msgbox "Error " + CStr(appdata.error.failedsql),"ERROR",0 appdata.error.Clear else 'hacerloquesea end if coll.filter=filtro [[wiki:2.-desarrollo-app:2.4.-scripting-modelo-objetos:b.-javascript:11.-manejo-de-errores:start|Sus propiedades se describen en la sección Manejo Errores.]]\\ \\ ===FailWithMessage=== \\ ^ Tipo | Método| ^ Parámetros | **Code**: Numérico. Código del error con el que se quiere fallar. Para que se considere un error por parte de las maquinarias debe ser negativo.Existen códigos reservados para determinadas acciones. Se analizan en la sección correspondiente.**Message**: Mensaje con el que se quiere fallar| ^ Tipo de Dato devuelto | Ninguno| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Esta función se emplea para indicarle a la maquinaria que algo ha fallado dentro del script.\\ \\ El código pasado como parámetro será el que quede en los datos de error de **AppData.Error** después de llamar a esta función.\\ \\ Es importante tener en cuenta que después de llamar a esta función el script continúa ejecutándose, por lo que para fallar se debe llamar a esta función justo al final del script, o en caso de que se trate de una función que encapsule el trabajo de la acción, debe ir seguida de una instrucción de ruptura de la función.\\ En otras palabras, sólo debemos fallar una vez y no seguir ejecutando código de script después de sacar el mensaje de error. \\ **Ejemplo de Uso:** if This("IMPRESO")<>2 then st_msg ="" if This("TESTIFICADOR")="" then st_msg="Debe indicar un Testificador." if This("MATRICULA2")="" then st_msg="Debe introducir una Matricula." if st_msg = "" then This("IMPRESO") =2 This("LEIDO") =0 This.save else AppData.FailWithMessage -8100,st_msg end if end if ===GetCollection=== \\ ^ Tipo | Método| ^ Parámetros | Name: Nombre de la colección que se quiere obtener| ^ Tipo de Dato devuelto | XOneCollection| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Devuelve la colección global cuyo nombre se indica.\\ \\ Si la colección no existe, devuelve **Nothing**. Las colecciones globales son únicas, por lo que llamar varias veces a esta función con el mismo nombre devolverá siempre la misma colección.\\ \\ El nombre de la colección distingue entre mayúsculas y minúsculas. \\ **Ejemplo de Uso:** Set dispo =appdata.GetCollection("Dispositivos")("CODIGO",Cstr(appdata.CurrentEnterprise.Variables("APP_device"))) if not dispo is nothing then This("IDDEVICE")=dispo("ID") set dispo =nothing end if ===GetCollectionCount=== \\ ^ Tipo | Método| ^ Tipo de Dato devuelto | XOneCollection| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Devuelve el número de colecciones que hay definidas en la aplicación.\\ \\ ===GlobalMacro=== \\ ^ Tipo | Método| ^ Parámetros | **Cadena**: Nombre de la macro que se quiere averiguar el valor| ^ Tipo de Dato devuelto | Cadena| ^ Plataforma | Todas| \\ Devuelve el valor de la macro que se le pase en el primer parámetro. ===IsReplicating=== \\ ^ Tipo | Propiedad| ^ Acceso | Lectura| ^ Tipo de Dato devuelto | Booleano (Entero)| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Esta propiedad tiene como valor **True** si la aplicación está replicando o **False** cuando las operaciones SQL no generan datos de réplica.\\ \\ Cuando la aplicación tiene varias conexiones, esta propiedad de AppData solamente se refiere a la conexión principal.\\ \\ **Ejemplo de Uso:** AppData.IsReplicating = true ===ObjectPrefix=== \\ ^ Tipo | Propiedad| ^ Acceso | Lectura/Escritura| ^ Tipo de Dato devuelto | Texto| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Contiene el prefijo que se le adiciona a las tablas de la base de datos para la conexión principal.\\ \\ Para las demás conexiones que tenga la aplicación habrá que indicar este dato en la definición de cada una de ellas.\\ \\ Por defecto los frameworks inicializan este valor con “**Gen**”. \\ \\ **Es importante tener en cuenta que el guión no debe incluirse en el prefijo, ya que lo añade la maquinaria.**\\ \\ ===PopValue=== \\ ^ Tipo | Método| ^ Tipo de Dato devuelto | Variant| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Devuelve un valor sacado del tope del stack de parámetros de la aplicación.\\ \\ Este mecanismo se usa para intercambiar datos entre scripts ejecutados en diferentes ámbitos, con recursividad incluida.\\ \\ Si el stack está vacío, la función causará un error de ejecución.\\ \\ Debido a las mejores realizadas en las diferentes plataformas, este método es utilizado internamente y ya no se utiliza en los scripts. ===PushValue=== \\ ^ Tipo | Método| ^ Parámetros | **Value-Variant**: puede ser cualquier tipo de dato| ^ Tipo de Dato devuelto | Ninguno| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Coloca el valor que se pasa como parámetro en el stack de la aplicación.\\ \\ De aquí se puede sacar con **PopValue**.\\ \\ Normalmente esta función no debería dar errores a menos que hubiera problemas de memoria, y en casos como ese, el error debería haber ocurrido antes.\\ \\ **Ejemplo de Uso:** ' Tendremos un boton que llame a una funcion que lanza el objeto en edición Function TestigosCYC() tareaid=Cstr(This("TAREAID")) Set CollT=appdata.GetCollection("TestigosCYCIn") 'Buscamos si el registro ya existe Set ObjT=CollT("TAREAID",tareaid) if not ObjT is nothing then 'Si existe lo lanzamos en edición AppData.PushValue ObjT End If End Function ' En la colección llamada por el AppData.PushValue, tendremos otro botón que hará las validaciones pertinentes ' y saldrá de la edición para volver a la pantalla original. Function VolverTestigosCYCIn() st_msg="" if This("MAP_OP11")=1 and This("TESTIGOSV")="" then st_msg="Debe introducir un comentario." end if if This("MAP_OP10")=0 and This("MAP_OP11")=0 then st_msg="Debe Indicar si los testigos son Ok o No Ok." end if if st_msg="" then 'Si no hay error, guardamos y salimos This.save appdata.failwithmessage -11888,"##EXIT##" else 'Si hay error, le decimos el problema pero no salimos. appdata.userinterface.msgbox st_msg,"ATENCION!",0 end if End Function ===PushValueAndExit=== \\ Similar a PushValue, pero al lanzar el nuevo objeto en edición, cierra previamente la ventana que lo llama.\\ ===ReplicationID=== \\ ^ Tipo | Propiedad| ^ Acceso | Lectura| ^ Tipo de Dato devuelto | Entero| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Devuelve el MID con que se ha configurado la conexión principal de la aplicación para replicar. \\ \\ Cuando la aplicación se inicializa, se leen los valores de réplica del registro o de donde estén configurados dependiendo de la plataforma.\\ \\ Mediante esta propiedad, el desarrollador puede conocer con qué MID está replicando para poder efectuar la depuración de la aplicación o cualquier otra cosa que necesite.\\ \\ ===SafeRound=== \\ ^ Tipo | Método| ^ Parámetros | **Value**: Valor que se quiere redondear. **Digits**: Número de dígitos a los que se quiere redondear el valor.| ^ Tipo de Dato devuelto | Double| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Redondea el valor que se le pasa como parámetro a la cantidad de dígitos que se indica.\\ \\ Las reglas que se usan para redondear son válidas para redondear cantidades en euros tal como se ha definido en la regla correspondiente, por lo que esta función puede usarse para sacar cuentas con valores monetarios.\\ \\ ===UserInterface=== \\ ^ Tipo | Propiedad| ^ Acceso | Lectura| ^ Tipo de Dato devuelto | IruntimeObject (IDISPATCH en entornos COM).| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | Devuelve el objeto que se utiliza para interactuar con el usuario (UI).\\ \\ Mediante este objeto se pueden mostrar mensajes, solicitar datos al usuario, etc.\\ \\ Se explica en profundidad todas las posibilidades que tiene dicha función [[wiki:2.-desarrollo-app:2.4.-scripting-modelo-objetos:start#userinterface1|aquí]]. \\ ===VariantToString=== \\ ^ Tipo | Método| ^ Parámetros | **Value**: Valor que se quiere convertir **Flags**: Banderas para controlar la conversión, especialmente cuando se trata de fechas.| ^ Tipo de Dato devuelto | Texto| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Esta función se utiliza para formatear valores siguiendo las reglas de formato de la base de datos empleada en la conexión principal.\\ \\ Esto es útil sobre todo cuando se emplea para componer filtros en tiempo de ejecución.\\ \\ Las fechas, las cadenas y los números se pueden formatear para colocar directamente en sentencias SQL.\\ \\ **Ejemplo de Uso:** fecha=AppData.VariantToString(Now()) ===WriteConsoleString=== \\ ^ Tipo | Método| ^ Parámetros | **Value**: Valor que se quiere sacar por la consola. | ^ Tipo de Dato devuelto | Ninguno| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ \\ Saca por la consola de depuración el texto que se pasa como parámetro.\\ \\ Si la maquinaria está en modo depuración o desarrollo, dependiendo de la plataforma y de la versión, también se saca el texto por la consola de depuración o por la salida estándar del sistema.\\ \\ **Ejemplo de Uso:** appdata.writeconsolestring " / CODIGO LEIDO: "+cstr(this("MAP_LECTURA")) /* ==== ÁMBITO DATAOBJECT ==== \\ Se trata de diferentes funcionalidades disponibles para su uso cuando estamos operando con un objeto de colección. El nombre de los objetos vendrá determinado por el que el programador quiera asignar durante su manejo. Al contrario que **appdata**, este ámbito, en general, no tiene un nombre determinado, salvo un objeto especial que indicamos a continuación.\\ \\ Destacar la existencia del objeto **This**. Esta referencia apunta al objeto dentro del cual se está ejecutando el script actual. Los scripts que se ejecuten dentro de un ámbito de colección tendrán esta referencia a **Nothing**.\\ \\ Para hacernos una idea, si dentro del proceso de uso de una app de ventas, por ejemplo, comenzamos a realizar un pedido a un cliente, el objeto **This** en ese momento será el propio pedido, un objeto de la colección "Pedidos", independientemente de que se haya o no guardado. Una vez finalizamos el pedido, queremos comprobar algún dato en la ficha del cliente al que hemos realizado el pedido. Accedemos a su ficha y la cargamos; en ese momento, el objeto **This** es el cliente, un objeto del tipo "Clientes". \\ ===ClearAllVariables=== \\ ^ Tipo |Método | ^ Tipo de Dato devuelto |Ninguno | ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Limpia todas las variables del objeto. Si alguna de ellas contiene un objeto, este será liberado a menos que pertenezca a una colección.\\ \\ ===Clone=== \\ ^ Tipo |Método | ^ Parámetros | **CopyID**: **True** si se copia también el ID del objeto. **False** para copiar todo menos el ID (crear un objeto nuevo con los mismos valores del objeto original) | ^ Tipo de Dato devuelto |XOneDataObject| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Este método copia el objeto actual y devuelve la copia.\\ \\ Todas las propiedades, las variables y los contents del objeto se copian hacia el nuevo objeto.\\ \\ Opcionalmente se puede copiar también el ID por lo que se tendría una copia exactamente igual del objeto original, que al grabarse en base de datos ocuparía el mismo registro en la tabla.\\ \\ Si no se copia el ID, cuando el objeto se grabe, generará un nuevo registro en la base de datos.\\ \\ **Ejemplo de Uso:** ' ............ objcab.save newID=objcab("ID") ' Recorremos el content de LinDocumentos y vamos clonando los registros actualizando el IDCABDOCUMENTO. obj.contents("LinDocumentos").loadall nl = obj.contents("LinDocumentos").count for j=0 to nl-1 set objl=obj.contents("LinDocumentos")(j) set objlnew=objl.clone(false) objlnew("IDCABDOCUMENTO")=newID objlnew.save set objlnew=nothing set objl=nothing next ===Contents=== \\ ^ Tipo |Propiedad| ^ Acceso | Lectura | ^ Parámetros | **Name**: nombre del content| ^ Tipo de Dato devuelto |XOneDataCollection| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Devuelve el contents cuyo nombre se pide. Si el contents no existe, devuelve **NULL**.\\ \\ **Ejemplo de Uso:** Set colldet=this.contents("Detalles") ===ContentsCount=== \\ ^ Tipo |Propiedad| ^ Acceso | Lectura | ^ Tipo de Dato devuelto |Entero| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ \\ Devuelve la cantidad de contents que tiene el objeto.\\ No corresponde a las propiedades @, sino a las secciones <**contents**> dentro de la declaración del objeto.\\ \\ ===Create=== \\ ^ Tipo |Método| ^ Parámetros | **Params**: Arreglo con parejas campo, valor para asignar a las propiedades del objeto. | ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ \\ Asigna valores a un grupo de propiedades del objeto en una sola llamada.\\ \\ Se utiliza sobre todo para copiar grupos de propiedades o para crear un objeto nuevo por primera vez.\\ \\ ===DeleteObject=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Elimina el objeto de la base de datos. Si el objeto no tiene ID (no se ha grabado nunca) el método no hace nada.\\ \\ **Ejemplo de Uso:** colldet(j).deleteobject ===Dirty=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Booleano (Entero)| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Devuelve **True** (No cero) si el objeto está modificado (alguna de sus propiedades se ha modificado o alguno de los objetos de alguno de sus contents ha sido modificado) o **False** (cero) si está recién cargado o recién grabado, o no se ha modificado desde que se ha creado o cargado.\\ \\ Ejemplo de Uso: is_dirty=This.Dirty if is_dirty<>0 then st_msg="¿Desea guardar los cambios?" ok=appdata.UserInterface.MsgBox (st_msg,"ATENCION!",4) if ok=6 Then This.save end if end if ===ExecuteNode=== \\ ^ Tipo |Método| ^ Parámetros |**NodeName**: Nombre del nodo que se desea ejecutar. Así si el nodo a ejecutar es ... habrá que pasar en este parámetro “**accnode**”| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ \\ Si el nodo nombrado no existe, esta función no hace nada.\\ \\ EL nodo puede contener tantos nodos como se quiera, y serán ejecutados en el mismo orden que están declarados en el XML.\\ \\ **Ejemplo de Uso:** ===FieldPropertyValue=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Parámetros |**FieldName**: Nombre del campo del objeto del que se quiere conocer el valor de un atributo. **AttrName**: Nombre del atributo cuyo valor se quiere conocer| ^ Tipo de Dato devuelto |Texto | ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Devuelve el valor de un atributo de un campo del objeto. Normalmente los atributos pueden tener como valor macros, por lo que al llamar esta propiedad, dichas macros serán sustituidas.\\ \\ Es importante no confundir esta función con la de igual nombre en la colección, ya que aunque para sacar el valor inicial del atributo, esta función llama a la de la colección propietaria, después se desarrollan las macros, mientras que la función de la colección no puede sustituir macros, porque no tiene valores.\\ \\ **Ejemplo de Uso:** col.FieldPropertyValue("DESCRIPCION", "type") ===IdFieldName=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Texto| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el nombre del campo clave de la colección a la que pertenece este objeto.\\ \\ El valor de esta función está definido en el atributo “**idfieldname**” de la cabecera de la colección, pero puede haber implementaciones del objeto de datos que definan este valor dinámicamente.\\ \\ ===MethodName=== \\ ^ Tipo |Método| ^ Parámetros |MethodName: Nombre del método que se quiere ejecutar.| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ \\ Ejecuta el método cuyo nombre se pasa como parámetro. Esta función realmente no es necesaria para ejecutar métodos visibles desde los scripts, sino que se programó para usar en los frameworks que quieran ejecutar métodos desde acciones XML.\\ \\ La forma más normal de ejecutar un método desde un script no es usando esta función, sino llamando el método directamente.\\ \\ ===Item=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura-Escritura| ^ Parámetros |**Key**: Nombre del campo del objeto cuyo valor se quiere leer o modificar.| ^ Tipo de Dato devuelto |Texto| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve o asigna valor a un campo del objeto cuyo nombre se pasa como parámetro.\\ \\ Esta propiedad es la propiedad por defecto de la clase **XoneDataObject** (y equivalentes o derivadas) así que se puede omitir su nombre en la ejecución.\\ \\ **Ejemplo de Uso:** This.Item(“NOMBRECAMPO”) = 1 'Es equivalente a: This(“NOMBRECAMPO”) = 1 ===LoadAll=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Este método llama a **LoadAll** en todas las colecciones contents del objeto, excepto aquellas que tengan en su declaración el atributo **“obj-loadall=false”**. \\ \\ Debido al tipo de acción que ejecuta este método, debe emplearse con cuidado, especialmente en entornos en los que la memoria sea un problema.\\ \\ **Ejemplo de Uso:** This.Contents("Partes").LoadAll ===ObjectItem=== \\ ^ Tipo |Método| ^ Acceso |Lectura| ^ Parámetros |**FieldName**: Nombre del campo usado para leer el valor de enlace.**SearchCollName**:Nombre de la colección de búsqueda. Puede ser una cadena vacía para usar el valor del atributo “mapcoll” del campo FieldName.| ^ Tipo de Dato devuelto |XOneDataObject| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ \\ Ésta es una de las funciones menos comprendidas y por tanto menos usadas del modelo de objetos. \\ \\ En realidad, su principio es banstante simple, pero como no se conoce o no se comprende, se tiende a hacer lo mismo que hace esta llamada **“a pelo”**. \\ \\ Esta llamada lee el valor del campo indicado por **FieldName**. Si el parámetro **SearchCollName** trae valor, se busca la colección con ese nombre, si viene vacío, se busca el valor del atributo “**mapcol**” del campo indicado por **FieldName** y con este nombre se busca la colección correspondiente.\\ \\ Una vez que se tiene la colección, se busca en ella el objeto cuya clave corresponda con el valor leído del campo **FieldName** y se devuelve dicho objeto.\\ En el siguiente ejemplo se muestra mejor:\\ \\ Suponiendo que “**This**” corresponde a un usuario, cuyo campo **IDEMPRESA** tiene el ID de la empresa correspondiente a este usuario, la llamada:\\ Set emp = This.ObjectItem (“IDEMPRESA”, “Empresas”) es equivalente a: idemp = This(“IDEMPRESA”) Set coll = AppData.GetCollection(“Empresas”) Set emp = coll(CStr(idemp)) \\ ===OldItem=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura-Escritura| ^ Parámetros |**Key**: Nombre del campo del objeto cuyo valor anterior se quiere leer o modificar.| ^ Tipo de Dato devuelto |Variant| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ \\ Esta propiedad permite leer el valor que tenía un campo del objeto antes de asignarle el último valor.\\ \\ Mediante esta estructura se puede implantar un mecanismo simple de “**undo**” en los valores de las propiedades, siempre teniendo en cuenta que al asignar valor a un campo del objeto pueden saltar eventos que efectúen más actualizaciones y que por tanto provoquen que este valor no sea exactamente el que tenía antes de la primera actualización, sino después de ejecutados todos los eventos.\\ \\ Aunque este no es el caso más normal, es bueno que se tenga en cuenta.\\ \\ **Ejemplo de Uso:** det("PESO")=this.olditem("MAP_PESO2") ===OwnerApp=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |XOneApplication| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve una referencia a la aplicación que ha creado este objeto.\\ \\ Como no hay más de una aplicación ejecutándose en un mismo entorno, el valor devuelto por esta propiedad es el mismo que tiene la variable global **AppData**.\\ \\ El uso de esta propiedad está pensado más bien para uso interno de la maquinaria, pero como es visible para el modelo de objetos, pues ahí está para quien quiera usarlo.\\ \\ ===OwnerCollection=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |:XOneCollection| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ \\ Devuelve la colección propietaria del objeto. Es importante tener en cuenta que la colección propietaria de un objeto no es aquella a la que se haya adicionado con **AddItem** sino la que lo ha creado mediante **CreateObject**.\\ \\ Si un objeto se va a hacer pertenecer a otra colección se debe llamar **SetOwnerColl** antes de llamar a **AddItem**. La colección propietaria es la que se usa para llamar a los métodos que necesitan acceder al XML base del objeto.\\ \\ **Ejemplo de Uso:** this("CLIENTEC")=This.OwnerCollection.OwnerObject("CODCLIENTE") ===PropertyGroup=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Parámetros |**FieldName**: Nombre del campo cuyo grupo se quiere conocer.| ^ Tipo de Dato devuelto |Texto| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ \\ Devuelve el nombre del grupo a que pertenece el campo cuyo nombre se indica.\\ \\ Si el grupo no existe, la propiedad no tiene definido ningún grupo o el número es incorrecto, esta propiedad devuelve una cadena vacía. \\ \\ Si hay una plataforma activa y el grupo tiene definición de nodo <**platform**> para la misma, el valor devuelto será el que esté definido por el correspondiente nodo <**platform**>.\\ \\ **Ejemplo de Uso:** coll.PropertyGroup("CODIGO") ===PropertyTitle=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Parámetros |**FieldName**: Nombre del campo cuyo título se quiere conocer.| ^ Tipo de Dato devuelto |Texto| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el título visible de la propiedad (campo de datos) del objeto. \\ \\ El título se encuentra en el atributo “**title**” de la definición. Si no hay “**title**” se devuelve el texto del nodo de la propiedad.\\ \\ En caso de que haya nodo <**platform**> para la propiedad con el nombre de la plataforma activa y en dicho nodo está definido el atributo “**title**”, este será el valor que se devuelva, con prioridad sobre los casos anteriores.\\ \\ **Ejemplo de Uso:** coll.PropertyTitle("MAP_CODIGO") ===refresh=== \\ ^ Tipo |Método| ^ Parámetros |**Sentence**: Opcional: Sentencia SQL usada para refrescar el objeto.| ^ Tipo de Dato devuelto |Ninguno| \\ Este método refresca los datos del objeto volviendo a leerlos de la base de datos. \\ \\ Los cambios hechos en las propiedades serán sustituidos por los que se lean de la base de datos.\\ \\ Una vez terminada la lectura de los datos el objeto queda marcado como “**limpio**” (no modificado).\\ \\ Los contents no se tocan, así que si se quiere refrescar de forma completa un objeto habrá que hacer un recorrido por sus contents y refrescar cada objeto. \\ Si la colección propietaria de este objeto es especial, el método no hace nada.\\ \\ **Ejemplo de Uso:** this.refresh "PROP1,PROP2" ===refreshValue=== \\ ^ Tipo |Método| ^ Parámetros |**Propiedades del objeto a las que queremos actualizar el valor separadas por comas**| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma | Android, iOS, Windows 10 | \\ Este método refresca **ÚNICAMENTE EL VALOR** de las propiedades del objeto que especifiquemos como parámetro. **NO** se repintan márgenes, colores, o cualquier tipo de formato que haya podido cambiar, para eso tendríamos que utilizar el ui.refresh, este ui.refreshValue es exclusivo para actualizar el "**VALOR**" de la propiedad, y por lo tanto, es más rápido que el ui.refresh. \\ \\ **Ejemplo de Uso:** This(“PROP1”)=”valor1” This(“PROP2”)=”valor2” ui.refreshValue “PROP1,PROP2” ===Save=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ \\ Graba los datos del objeto en el soporte de datos que corresponda. \\ En general se trata de la base de datos descrita por la conexión principal, pero también puede ser una conexión externa, una conexión remota o cualquier otro tipo de soporte permitido.\\ \\ Si el objeto está marcado como **read-only** en la declaración de la colección, este método no hace nada.\\ \\ Si la conexión en que trabaja la colección propietaria del objeto está marcada para replicar, se generarán todos los datos para que se replique la grabación. \\ \\ Una vez terminada la grabación se ejecutarán las acciones del nodo <**insert**> que sean del tipo <**action**> lo que permitirá que se enlacen los objetos que tengan los contents. \\ \\ La llamada a este método graba también los contents una vez que se hayan ejecutado las acciones de inserción.\\ \\ Si no se cumple alguna regla de grabación, la llamada al método falla con el código correspondiente. Si falla la grabación del objeto o de alguno de los que contiene, el método también fallará. \\ \\ **Ejemplo de Uso:** obj.save ===SetOwnerColl=== \\ ^ Tipo |Método| ^ Parámetros |**NewColl**: Colección que se quiere asignar como propietaria. No puede ser **Nothing**.| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| Asigna como propietaria la colección que se pasa como parámetro.\\ \\ Normalmente esta llamada se usa para cambiar el propietario cuando se crea una copia de un objeto y se va a adicionar a otra colección diferente de la que corresponde al objeto original.\\ \\ ===Variables=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura-Escritura| ^ Parámetros |**Key**: Nombre de la variable que se quiere leer o asignar.| ^ Tipo de Dato devuelto |Variant| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Lee el valor de una variable, o le asigna un nuevo valor. \\ \\ Las variables pueden considerarse de forma más o menos similar a las propiedades del objeto, teniendo en cuenta que:\\ \\ * Las variables no se graban en soporte persistente (base de datos, etc.) * Las variables no se replican ni se buscan de forma remota. * Las variables no pueden tener indicadores de tipos, fórmulas, llamadas a métodos o eventos, etc. * Las variables pueden contener referencias a objetos, colecciones, etc. \\ **Ejemplo de Uso:** AppData.CurrentEnterprise.Variables("NUEVO")=1 */ /* ==== ÁMBITO DATACOLL ==== \\ Al igual que sucede con el tratamiento de los dataobjects, cuando hablamos del ambito **datacoll**, no nos referimos a un objeto con un nombre fijo que permanece activo durante toda la ejecución de la aplicación. Al contrario que **appdata**, este ámbito no tiene un nombre determinado, sino que será el usuario, mediante el proceso de trabajo con colecciones el que decida asignar dicho nombre. \\ \\ En el ejemplo siguiente, vemos como los objetos de tipo coll serían tanto ":CollTestigos" como "a". Para facilitar la comprensión y mantenimiento del código, es preferible emplear una notación similar a "CollTestigos". \\ Set CollTestigos=appdata.GetCollection("TestigosCYCIn") Set a=appdata.GetCollection("TAREAID") \\ Por tanto, en este bloque vamos a describir funciones cuya utilidad hace referencia a colecciones, que a su vez se compondrán de objetos que también podremos trabajar. ===AccesString=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve la cadena de acceso a datos de la colección, con las macros sustituidas, sin los filtros y sin subqueries ni nada.\\ \\ Se usa básicamente para depurar y cosas por el estilo.\\ \\ ===AddItem=== \\ ^ Tipo |Método| ^ Parámetros |**Item**: Objeto que se va a adicionar a la colección .**Index**: Opcional. Índice en el que se quiere insertar el objeto.| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ \\ Adiciona el objeto que se pasa como parámetro a la colección.\\ \\ Opcionalmente permite insertarlo en la posición que se quiera dentro del conjunto de objetos que haya dentro de la colección.\\ \\ Si el parámetro **Index** no se pasa (lleva valor **Empty**), se insertará el objeto al final de la colección.\\ \\ Este es el comportamiento más usado.\\ \\ **Ejemplo de Uso:** Set Obj=Coll.CreateObject Obj("LOGIN")=This("MAP_USUARIO") Obj("FECHAATT")=Now Obj("UPWD")=This("MAP_PWD") Coll.AddItem Empty,ObjG Obj.save Set Obj=nothing ===BrowseDeleteAll=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ \\ Elimina de la base de datos todos los objetos que cumplen las condiciones de la cadena de acceso y los filtros de la colección.\\ \\ Es el equivalente a recorrer una colección con **StartBrowse, MoveNext** y borrar cada uno de ellos. \\ \\ Es el método más recomendable para borrar conjuntos de objetos grandes, ya que cargar todos los objetos con **LoadAll** y después borrarlos con **DeleteAll** es un desperdicio.\\ \\ **Ejemplo de Uso:** this.contents("Presupuesto").BrowseDeleteAll ----- Set Coll=AppData.GetCollection("TerminadasBorradoFinalizadas") filtro=Coll.LinkFilter Coll.LinkFilter="ACEPTADA=2 OR (ESTADO=1 AND FECHA<"+CStr(ahora)+")" Coll.BrowseDeleteAll Coll.LinkFilter=filtro Set Coll=Nothing ===BrowseDeleteWithNoRules=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Similar a **BrowseDeleteAll]** pero no se comprueban las reglas de eliminación de los objetos.\\ \\ Este sistema es usado para borrar de forma rápida y sin interrupción una cantidad grande de objetos.\\ \\ Como no se comprueban las reglas de eliminación, las acciones se ejecutan con mayor velocidad y no hay posibilidad de que se interrumpa el ciclo al fallar alguna regla de borrado.\\ \\ **Ejemplo de Uso:** this.contents("Presupuesto").BrowseDeleteWithNoRules ===BrowseLength=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Entero| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ \\ Devuelve la cantidad de objetos que serán recorridos en el ciclo **StartBrowse** activo.\\ Si no hay activo ningún ciclo, o si el que hay se ha activado pasando **False** (o no pasando nada) a la llamada a **StartBrowse**, esta propiedad devuelve -1. En las plataformas Win32 (PC, Web, Windows Mobile) esta propiedad devuelve siempre -1 a menos que la base de datos soporte conteo de registros, o en caso negativo, que la colección tenga el atributo **alternate-counter=true**. \\ \\ En casos como MySQL esto es siempre así. \\ \\ Las plataformas móviles diferentes de WM siempre usan el método alternativo, por lo que no dependen del tipo de base de datos usado.\\ \\ **Ejemplo de Uso:** ..... coll.StartBrowse true nLenData=coll.BrowseLength ..... ===Clear=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Limpia la colección (descarga los objetos que contiene).\\ \\ La llamada a este método no afecta los recorridos **StartBrowse** activos, por lo que **CurrentItem** no se verá afectado por la llamada a este método. \\ \\ Es importante que si se tienen referencias a objetos que están cargados en la colección, dichas referencias se anulen antes de llamara a **Clear**, ya que en plataformas que trabajan con COM pueden ocurrir errores al tratar de anular las referencias posteriormente, o al salir del script, ya que cuando las referencias salen de ámbito intentarán liberarse y al estar destruidos los objetos, se producirán errores.\\ \\ Estos mismos scripts, al ejecutarse en entornos que no usen COM, no darían error mientras no se traten de usar las referencias posteriormente, lo cual no implicaría que estuvieran bien programados, sino que simplemente están desarrollados usando una tecnología diferente.\\ \\ El orden a la hora de liberar memoria:\\ - Anular referencias a objetos. - Limpiar colecciones. - Anular referencias a colecciones. **Ejemplo de Uso:** .... obj.save set obj=Nothing coll.Clear set coll=Nothing ===CollPropertyValue=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Parámetros |**AttrName**: Nombre del atributo de la colección cuyo valor se quiere obtener.| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el valor de un atributo de la cabecera de la colección.\\ \\ coll.CollPropertyValue("title") Si hay una plataforma activa y existe el nodo <**platfom**> para la misma dentro de la colección, el valor se buscará primero dentro de dicho nodo.\\ \\ Si el atributo no existe o no tiene valor, la propiedad devolverá una cadena vacía.\\ \\ ===Count=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura | ^ Tipo de Dato devuelto |Entero| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)|\\ \\ Devuelve la cantidad de objetos cargados en memoria por esta colección.\\ \\ Los objetos se pueden cargar llamando a **LoadAll**, llamando a **AddItem**, o efectuando búsquedas que carguen objetos en memoria (Item o FindObject).\\ .... Set Coll=appdata.GetCollection("UserAttempts") Coll.filter="t1.LOGIN="+appdata.varianttostring(This("MAP_USUARIO")) Coll.LoadAll cantidad=Coll.Count if cantidad<5 then .... ===CreateClone=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |XOneDataCollection| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Crea una copia de la colección y la devuelve.\\ \\ El contenido de la colección no se copia, en caso de que se quieran copiar también los datos hay que hacerlo a mano.\\ Set Usuarios=AppData.GetCollection("Usuarios").CreateClone Usuarios.Filter="t1.LOGIN='" + Cstr(This("MAP_USUARIO")) + "'" Usuarios.StartBrowse Set Usuario=Usuarios.CurrentItem Set UCorrecto=false If Not Usuario Is Null Then If This("MAP_PWD") = Usuario("PWD") Then UCorrecto = True End if End If Usuarios.EndBrowse Set Usuario=nothing Set Usuarios=Nothing ===CreateObject=== \\ ^ Tipo |Método| ^ Parámetros |**NewObj**: Opcional. **True** para crear un objeto nuevo (Valor por defecto) o **False** para crear un objeto que se usará para cargar de base de datos, etc. | ^ Tipo de Dato devuelto |XOneDataObject| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Crea un nuevo objeto usando las plantillas de la colección. \\ \\ La clase usada para construir el objeto se sacará del atributo “progid” de la colección. \\ \\ Cada plataforma utiliza un mapa para pasar los nombres de los progids a los nombres de clase reconocidos por dicha plataforma. \\ \\ En aquellas en las que hay posibilidad de usar reflexion, se puede usar el atributo “**classname**” para indicar directamente el nombre de clase, aunque lo más recomendable es utilizar el progid de toda la vida y dejar que la plataforma efectúe la conversión.\\ \\ Cualquiera que haya sido la clase utilizada, será descendiente de la clase base **XoneDataObject** o como se llame en cada plataforma.\\ \\ Ahora al método createObject se le puede pasar parámetros.\\ \\ ^PARÁMETROS^ |Inicializa los props indicados en el objeto.| |Agrega el objeto a la colección “addItem”, posibles valores true/false.| \\ **Ejemplos:**\\ \\ var param = { USUARIO:”usuario 1”, DESCRIPCION:”Descripción de usuario 1” } var obj = appData.getCollection(“Usuarios”).createObject(param); \\ var param = { USUARIO:”usuario 1”, DESCRIPCION:”Descripción de usuario 1” } var obj = appData.getCollection(“Usuarios”).createObject(param,true); Set coll=appdata.getcollection("Previstas") Set det=coll.CreateObject coll.AddItem Empty, det det("IDENCARGO")=this("IDENCARGO") det("IDEMPRESA")=this("IDEMPRESA") det("IDUSUARIO")=this("IDUSUARIO") det("MODELOPLATAFORMA")=this("MODELOPLATAFORMA") det("NUMCOMPLETO")=this("NUMCOMPLETO") det("FECHA")=this("FPREVISTA") det("HORA")=this("HPREVISTA") det.Save set det=nothing set coll=nothing \\ ===CurrentItem=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |XOneDataObject| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el objeto actual del recorrido **StartBrowse** activo.\\ \\ Si no hay ningún recorrido activo, esta propiedad vale **Nothing**. Esto es lo que se utiliza para saber que un recorrido se ha acabado, pero claro, eso ya lo saben, así que para qué profundizar.\\ \\ Excepto las plataformas de PC y web, todas las demás utilizan por defecto el mismo objeto y solamente sustituyen las propiedades al moverse por el recorrido, así que no se deben comparar las referencias sino los valores (preferiblemente de las claves) para saber qué objeto es el que está activo en cada momento o si ha cambiado el objeto actual.\\ Set Coll=appdata.GetCollection("ClasificarBlanco") Coll.StartBrowse Set Obj=Coll.CurrentItem If not Obj is nothing then .... ===DeleteAll=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Borra todos los objetos que están cargados en la colección.\\ \\ Los objetos se borran de la base de datos (si se cumplen las condiciones de borrado) y después se eliminan de la colección.\\ \\ Si falla alguna de las reglas de eliminación de alguno de los objetos, la ejecución se interrumpe en ese momento.\\ \\ Es más recomendable utilizar el método BrowseDeleteAll, pero si ya hemos hecho unLoadAll podemos utilizar éste. ===DeleteItem=== \\ ^ Tipo |Método| ^ Parámetros |**ObjectKey**: Clave del objeto que se va a borrar. Puede ser una cadena que identifique la clave o un entero que identifique el índice dentro de la colección.| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Borra el objeto cuya clave o índice se indica, tanto de la colección como de la base de datos.\\ \\ Si las reglas de borrado no se cumplen el método falla y lanza un error. \\ \\ Si falla la ejecución de alguna de las acciones de borrado, el objeto tampoco se elimina y se lanza un error.\\ \\ El siguiente ejemplo, recorre una colección de detalles de venta, comprueba si el campo IDARTICULO=0, entonces elimina la línea.\\ \\ Set cDetVenta=This.Contents("DetVenta") i =0 While i ===DevelopedAccessString=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve la cadena de acceso a datos de la colección con todas las macros sustituidas, los filtros aplicados y en caso de que se trate de una colección que soporte subqueries, ya preparada para usarse en la base de datos o en la conexión remota en que se vaya a ejecutar.\\ \\ ===DevelopedFilter=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el filtro principal de la colección (Filter) ya desarrollado con las macros sustituidas y listo para usarse dentro de la cadena de acceso a datos.\\ \\ ===DevelopedLinkFilter=== \\ ^ Tipo | Propiedad| ^ Acceso |Lectura | ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el filtro de enlace de la colección (**LinkFilter**) ya desarrollado y con las macros sustituidas listo para usarse en la cadena de acceso a datos.\\ AppData.CurrentEnterprise.Variables("COLLFILTER")=this.contents("ImpDocumento").DevelopedLinkFilter+" AND t1.id="+cstr(IDDoc) ===EndBrowse=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno | ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Termina el recorrido activo en la colección. \\ \\ Si no hay ningún recorrido, esta función no hace nada.\\ \\ La llamada a este método siempre anula **CurrentItem**, pero no afecta a los objetos cargados en memoria mediante **LoadAll**, búsquedas o llamadas a **AddItem**.\\ Set Usuarios=AppData.GetCollection("Usuarios").CreateClone Usuarios.Filter="t1.LOGIN='" + Cstr(This("MAP_USUARIO")) + "'" Usuarios.StartBrowse Set Usuario=Usuarios.CurrentItem Set UCorrecto=false If Not Usuario Is Null Then If This("MAP_PWD") = Usuario("PWD") Then UCorrecto = True End if End If Usuarios.EndBrowse Set Usuario=nothing Set Usuarios=Nothing ===ExecuteSqlString=== \\ ^ Tipo | Método| ^ Parámetros | CommandString -SentenciaSQL| ^ Tipo de Dato devuelto | Texto| ^ Plataforma | Win32, Web,.NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed) | \\ Ejecuta una sentencia SQL utilizando una colección. Es útil para los mantenimientos, ya que si se define una colección ForMaintenance sin réplica, las sentencias que se ejecuten a través de ella, no se replicarían. Si se usa como origen una colección "tradicional", el funcionamiento del ExecuteSqlString es equivalente al AppData.ExecuteSQL\\ \\ Ejemplo de Uso: 'Actualizar el campo REPORTADO localmente, no replicar appdata.GetCollection("ForMaintenance").ExecuteSqlString "UPDATE gen_instalaciones SET REPORTADO=0 WHERE ID=" + CStr(This("ID")) 'Actualizar el campo REPORTADO y replicarlo appdata.GetCollection("ForUpdates").ExecuteSqlString "UPDATE gen_instalaciones SET REPORTADO=0 WHERE ID=" + CStr(This("ID")) ===Filter=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura-Escritura| ^ Tipo de Dato devuelto |Texto | ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve o asigna valor al filtro principal de la colección. \\ \\ El filtro que está en el atributo “**filter**” de la colección en el mappings **NO** es este filtro. \\ \\ Este filtro es el que se utiliza en el UI cuando se filtra el contenido mediante los controles visuales. \\ \\ Modificar este filtro tampoco afecta la selección de un contents, ya que no es el que se usa para limitar los objetos que forman parte de dicho contents.\\ Coll.filter="t1.LOGIN="+appdata.varianttostring(This("MAP_USUARIO")) ===FindObject=== \\ ^ Tipo |Método| ^ Parámetros |**SearchCriteria**: Criteros de búsqueda. Esta cadena tiene el mismo formato que la usada para poner filtros a la colección, y de hecho puede incluso contener macros y demás.| ^ Tipo de Dato devuelto |[XOneDataObject| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Busca un objeto siguiendo los criterios de búsqueda que se pasan como parámetro.\\ \\ El formato usado es el mismo que para filtrar la colección. \\ \\ Si el objeto no se encuentra como resultado de la búsqueda, el método devuelve **Nothing**.\\ set Coll=Appdata.GetCollection("ConsultaExistencias") set Obj = Coll.FindObject("SERIE='"+Cstr(this("MAP_SERIE"))+"' AND IDALMACEN="+Cstr(this("IDALMACEN"))) If not Obj is nothing then Obj("EXIST")=Obj("EXIST")+1 Obj.Save End If Set Obj=Nothing Coll.Clear Set Coll=Nothing ===Full=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Booleano (Entero)| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve **True** (no cero) si la colección está llena (se ha llamado **LoadAll** y se han cargado todos los objetos que cumplen con el criterio). Devuelve **False** (cero) si la colección no se ha cargado con **LoadAll**, o después de cargarla se han eliminado objetos o se han efectuado búsquedas que modifican el estado de carga de la colección.\\ \\ ===GenerateRowID=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Texto| ^ Plataforma | Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Genera un ROWID utilizando los datos de réplica de la conexión utilizada en la colección, así como datos de tabla y demás.\\ \\ Este método encapsula al sistema interno de generación de ROWIDs por lo que es bastante seguro usarlo para generar valores únicos. \\ \\ En todos los entornos que lo soporten se usan los métodos de generación de GUIDs. En aquellos en que este mecanismo no está disponible se trata de usar una maquinaria de generación de números aleatorios lo más segura posible.\\ \\ Ejemplo de uso: 'Usar para generar un nombre único y asignárselo a un fichero jpg This("MAP_FILENAME")="FT" + User("LOGIN")+ "_" + AppData.GetCollection("CollParaRowid").GenerateRowId + ".jpg" ===Group=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Parámetros |**Index**: ID del grupo cuyo nombre se quiere obtener| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el nombre visible de un grupo de la colección dado su ID. \\ \\ Si el grupo tiene nodo <**platform**> dentro y hay plataforma activa, se buscará primero en dicho nodo y después en el nombre del grupo.\\ \\ ===GroupCount=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Entero| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve la cantidad de grupos que hay declarados en la colección.\\ \\ ===IDFieldName=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el nombre del campo clave de la colección.\\ \\ Normalmente no se declara campo clave, sino que se usa el valor por defecto (ID). En caso de que el campo clave tenga otro nombre, se define en la cabecera de la colección y ese es el valor que devuelve esta propiedad.\\ \\ ===IDOutCurrency=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura-Escritura| ^ Tipo de Dato devuelto |Entero| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el ID de la moneda que se va a usar para imprimir cantidades monetarias en los listados y en las salidas usadas por esta colección.\\ \\ Esta propiedad solamente funciona en las plataformas mostradas en la tabla, aunque se puede consultar en cualquier plataforma, solo que su valor será siempre cero. \\ \\ Asignarle valor a esta propiedad en otra plataforma que no sea las que se muestran en la tabla tampoco tendrá efecto ninguno.\\ \\ ===IsBrowsing=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Booleano (Entero)| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve True (no cero) si la colección tiene abierto un recorrido **:StartBrowse**. Claro que también se puede comprobar el **CurrentItem**, pero en caso de que el recorrido esté al final, **CurrentItem** será **Nothing** y sin embargo habrá un recorrido abierto, es decir, recursos de la conexión en uso. \\ \\ Devuelve **False** (cero) si no hay ningún recorrido activo.\\ \\ ===IsLocked=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Booleano (Entero)| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve **True** (no cero) si la colección está bloqueada usando **Lock**. Devuelve **False** (cero) si la colección está libre (su estado normal).\\ \\ ===Item=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Parámetros |**Key**:Clave (en formato texto), Indice numérico del objeto, o nombre del campo por el cual se quiere buscar. **Val**: Opcional. Valor por el que se quiere buscar. Omitido si se va a buscar por clave. | ^ Tipo de Dato devuelto |XOneDataObject| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve un objeto de la colección dada su clave llevada a texto, su índice dentro de la colección o el valor de uno de sus campos.\\ \\ La búsqueda por índice numérico siempre se hace en memoria. La búsqueda por clave o por pareja campo, valor se hace primero en memoria y en caso de no encontrarse el objeto con estas características, se efectúa la búsqueda en la conexión de datos.\\ \\ Esto permite que se puedan acelerar las búsquedas en colecciones que tienen pocos elementos cargándolos en memoria y manteniéndolos allí durante la ejecución de la aplicación.\\ \\ ===LinkFilter=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el valor del filtro de enlace de la colección. \\ \\ Este es el filtro que se declara en el atributo “**filter**” de la colección en el mappins, o en la declaración de los contents y como indica su nombre es un filtro auxiliar que no debería modificarse en tiempo de ejecución.\\ \\ Aún así, cada cual puede hacer lo que estime conveniente.\\ \\ ===LoadAll=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Carga en memoria todos los objetos que cumplan con los criterios de filtrado que tiene la colección. \\ \\ Es importante antes de llamar a este método asegurarse que hay filtros puestos, ya que en caso de que haya demasiados objetos que cumplan los criterios, se puede producir un problema de falta de memoria.\\ \\ Ejemplo de uso:\\ \\ Set cDetVenta=This.Contents("DetVenta") cDetVenta.filter="d.IDDOCUMENTO=" + CStr(This("ID")) cDetVenta.LoadAll ===Lock=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Bloquea la colección para evitar que se modifique su contenido. \\ \\ Si la colección está bloqueada los métodos **LoadAll** y **Clear** no tendrán efecto sobre el contenido de la colección.\\ \\ La búsqueda de objetos no se ve afectada por el estado de bloqueo de la colección.\\ \\ El siguiente ejemplo, limpia y filtra una colección de detalles de venta y luego, la bloquea para que no se modifique .\\ \\ Set cDetVenta=This.Contents("DetVenta") cDetVenta.UnLock cDetVenta.Clear cDetVenta.filter="d.IDDOCUMENTO=" + CStr(This("ID")) cDetVenta.LoadAll cDetVenta.Lock ===Macro=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura-Escritura| ^ Parámetros |Name: Nombre de la macro cuyo valor se quiere leer o asignar| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve o asigna valor a la macro cuyo nombre se indica.\\ \\ Las macros se sustituyen cuando se evalúan las cadenas de acceso, los filtros y demás, por lo que esta es una forma de lograr que el cambio de estos datos se efectúe de forma dinámica durante la ejecución del programa.\\ \\ ....... 'Después en un script, asignar valor a la macro ##NUMINCIDENCIA## para modificar el filtro de la colección Set cPiezas=AppData.GetCollection("ContarPiezas") cPiezas.macro("##NUMINCIDENCIA##")=AppData.VariantToString(nInc) cPiezas.StartBrowse ....... ===MacroCount=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Entero| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve la cantidad de macros que hay definidas en la colección, tanto las que han recibido valor de forma dinámica como las que se han declarado en el mappings.\\ \\ ===MoveFirst=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Mueve el recorrido al primer objeto de la colección. \\ \\ El método está definido en todas las plataformas, pero en las que no se muestran no tiene ningún efecto. \\ \\ En las plataformas que se muestran solamente funciona cuando la base de datos asociada a la conexión lo soporta.\\ \\ ===MoveLast=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Mueve el recorrido al último objeto de la colección. \\ \\ Al igual que **MoveFirst**, solamente funciona en aquellas plataformas que trabajan con varias bases de datos y en concreto en aquellas que permiten esta operación. \\ \\ En las plataformas no mostradas el método no tiene efecto ninguno.\\ \\ ===MovePrevious=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Mueve el recorrido al objeto anterior. Aquí se cumplen las mismas observaciones que para **MoveFirst** o para **MoveLast**.\\ \\ ===MoveNext=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Mueve el recorrido hacia el siguiente objeto. \\ \\ Si como resultado del movimiento se llega al final del recorrido, el objeto actual (**CurrentItem**) se pondrá a **Nothing** para indicar que el recorrido ha terminado.\\ \\ Set cRec =AppData.GetCollection("RecPend") cRec.filter="r.IDCLIENTE=" + CStr(This("IDCLIENTE")) cRec.StartBrowse While Not cRec.Currentitem is Nothing Set ObjRec = cRec.Currentitem ....... Set ObjRec = Nothing cRec.MoveNext Wend ..... ===MultipleKey=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Booleano (Entero)| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ \\ Devuelve **True** (no cero) si la clave del objeto es múltiple o **False** (cero) si la clave es un solo campo.\\ \\ Esta propiedad devuelve siempre **False** en las plataformas que no están listadas en la tabla, ya que en esas plataformas no se soporta el uso de claves múltiples. \\ \\ En realidad las claves múltiples están pensadas para utilizar la maquinaria XOne con bases de datos diseñadas para uso de otras aplicaciones, algo que en la movilidad no es el caso, ya que la idea es que la aplicación móvil lleve una base de datos diseñada desde el primer momento.\\ \\ La interfaz de integración con el posible backend deberá encargarse de traducir las claves múltiples a una clave única (normalmente un campo autonumérico).\\ \\ ===Name=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el nombre de la colección, tal como se ha declarado en el mappings.\\ \\ Ejemplo de uso:\\ \\ ' Se comprueba si el nombre de la colección padre es MenuPersonalizado antes de modificar la propiedad MAP_IDSELECCIONADO If This.OwnerCollection.Name="MenuPersonalizado" Then This("MAP_IDSELECCIONADO")=0 End If ===OwnerApp=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |XOneApplication| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve la aplicación propietaria de la colección. \\ \\ Debido a que en un entorno de ejecución no puede haber más de una aplicación, el valor de esta propiedad es el mismo que el de la variable global **AppData**.\\ \\ ===OwnerObject=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |XOneDataObject| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el objeto propietario de la colección. \\ \\ Esta propiedad tiene valor solamente cuando la colección es un contents. \\ \\ Si se trata de una colección global o si es una copia de un contents, el valor de esta propiedad es **Nothing**.\\ \\ ===PropertyCount=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Entero| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve la cantidad de propiedades que tiene la colección.\\ \\ Si la colección hereda de otra, esta propiedad devuelve el número correcto de propiedades (propias más las heredadas del padre). Aunque el mecanismo de herencia no es lo que se dice muy decente, al menos lo que funciona funciona en todas las plataformas.\\ \\ De todas maneras aquello de tratar de no usar el mecanismo de herencia sigue vigente hasta nuevo aviso.\\ \\ ===PropertyName=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Parámetros |**Index**:Indice numérico de la propiedad cuyo nombre se quiere conocer.| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el nombre de una propiedad de la colección dado su índice numérico (en orden de declaración en el mappings).\\ \\ Con este nombre se pueden acceder las propiedades y métodos que llevan como parámetro un nombre de campo.\\ \\ ===PropertyTitle=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Parámetros |**FieldName**:Nombre del campo tal y como está declarado en el mapping.| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el título de la propiedad (campo de datos) de la colección.\\ \\ Si hay una plataforma activa y esta propiedad tiene nodo <**platform**> se buscará primero en dicho nodo el atributo “**title**”. Si no se encuentra, se buscará el atributo “**title**” de la propiedad, y en caso de no aparecer se devuelve el texto del nodo <**prop**>.\\ \\ Si el nodo no tiene texto, se devuelve el nombre del campo. \\ \\ ===PropertyGroup=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Parámetros |**FieldName**:Nombre del campo tal y como está declarado en el mapping.| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ ===PropType=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Parámetros |**FieldName**:Nombre del campo tal y como está declarado en el mapping.| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el tipo de la propiedad de datos tal como está declarado en el mappings.\\ \\ Devuelve el nombre del grupo a que pertenece la propiedad en la colección. \\ \\ Para buscar el nombre se siguen las reglas de plataformas mostradas en las propiedades anteriores.\\ \\ ===PropVisibility=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Parámetros |**FieldName**:Nombre del campo tal y como está declarado en el mapping.| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el valor del campo “visible” de la propiedad. \\ \\ Cumple las reglas de plataformas descritas anterioremente. Si al final de todas las pruebas no hay ningún valor que devolver, se devuelve “1”, ya que el valor por defecto de visibilidad es siempre 1.\\ \\ ===RemoveItem=== \\ ^ Tipo |Método| ^ Parámetros |**Index**:Indice numérico del objeto que se quiere sacar de la colección o clave de texto para buscar el objeto en la colección y sacarlo de ella.| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Elimina de la colección el objeto cuyo índice o clave se pasa como parámetro.\\ \\ El objeto no se elimina de la base de datos, solamente de la colección.\\ \\ ===SaveAll=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Graba todos los objetos que contiene la colección. \\ \\ Si alguna grabación falla el método se detiene y se lanza el error ocurrido.\\ \\ ===Sort=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura-Escritura| ^ Tipo de Dato devuelto |Entero| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve o asigna la cadena de ordenamiento a la colcción. \\ \\ La sintaxis es la misma que debe tener una sentencia ORDER BY en una cadena SQL. \\ El valor que tiene esta propiedad cuando se crea la colección es el valor del atributo “sort” de la cabecera de la colección.\\ \\ .... 'Ordenar la colección Kilometraje por FECHA descendente, antes de comenzar a recorrerla Set cKm = AppData.GetCollection("Kilometraje") cKm.sort="FECHA DESC" cKm.StartBrowse ... === StartBrowse === \\ ^ Tipo |Método| ^ Parámetros |**Count**: Opcional. True para contar los objetos que se recorrerán o False (valor por defecto) para no lanzar el conteo.| ^ Tipo de Dato devuelto |Entero| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Inicia un recorrido siguiendo las reglas de la cadena de acceso, filtros y ordenamiento de la coleccóin. \\ \\ Si hay al menos un objeto, este se carga en el **CurrentItem**. Si se pasa **True** como parámetro, la colección cuenta la cantidad de objetos que se van a recorrer. \\ Set Usuarios=AppData.GetCollection("Usuarios").CreateClone Usuarios.Filter="t1.LOGIN='" + Cstr(This("MAP_USUARIO")) + "'" Usuarios.StartBrowse Set Usuario=Usuarios.CurrentItem Set UCorrecto=false If Not Usuario Is Null Then If This("MAP_PWD") = Usuario("PWD") Then UCorrecto = True End if End If Usuarios.EndBrowse Set Usuario=nothing Set Usuarios=nothing ===StringKey=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Booleano (Entero)| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve **True** (no cero) si la colección utiliza una clave que no es numérica (normalmente se emplea junto con “**idfieldname**” para utilizar juegos de claves diferentes a los que se emplean en las bases de datos XOne).\\ \\ **Devuelve False** (cero) cuando la clave es numérica (valor por defecto).\\ La forma de contar dependerá de la plataforma y de la base de datos.\\ \\ ===Unlock=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Desbloquea la colección para que se puedan usar nuevamente **Clear** y **LoadAll**.\\ \\ El siguiente ejemplo, limpia y filtra una colección de detalles de venta y luego, la bloquea para que no se modifique .\\ \\ Set cDetVenta=This.Contents("DetVenta") cDetVenta.UnLock cDetVenta.Clear cDetVenta.filter="d.IDDOCUMENTO=" + CStr(This("ID")) cDetVenta.LoadAll cDetVenta.Lock ===UpdateIdFieldName=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve el nombre del campo clave que se usa para las actualizaciones.\\ \\ Normalmente este campo es el mismo que **IdFieldName**, aunque pueden darse casos en los que se lea en un objeto y se escribe en otro, por lo que el campo de actualización puede ser diferente. \\ \\ También puede ocurrir que el campo clave esté cualificado y se quiera utilizar este sin cualificar para poder actualizar los datos.\\ \\ ===Variables=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura-Escritura| ^ Parámetros |**Item**:Nombre de la variable que se quiere leer o asignar.| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Devuelve o asigna valor a la variable cuyo nombre se indica. \\ \\ Las colecciones también pueden tener variables, lo que permite que haya un entorno realmente global para almacenar valores que vayan más allá de los ámbitos de script, ya que las colecciones globales siempre lo son.\\ \\ Los valores almacenados en las variables de las colecciones globales pueden mantenerse allí mientras se mantenga la ejecución de la aplicación o mientras no se limpien las variables.\\ \\ \\ */ \\ /* ===WriteString=== \\ Escribe la cadena de texto, que se pasa por parámetro, a la pantalla de depuración. En el caso de Windows Mobile esta pantalla es la ventana de resultados de Visual Studio. \\ \\ ^ Tipo |Función| ^ Parámetros | Cadena (in)El mensaje que se va a mostrar en pantalla.| ^ Sintaxis |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)| \\ Ejemplo\\ \\ set xcrn = CreateObject("System.Debug") xcrn.WriteString "INICIO CALCULOS" xcrn.ChronoStart REALIZAR TRABAJO 1 ... xcrn.WriteString "El tiempo trabajo 1: " + CStr(xcrn.ChronoValue) 'REALIZAR TRABAJO 2 ... xcrn.ChronoStop xcrn.WriteString "El tiempo trabajo 2: " + CStr(xcrn.ChronoValue) xcrn.WriteString "FIN" */ ====MANEJO ERRORES ==== El manejo de errores se realiza a través del objeto **appdata.error** que describimos a continuación de forma independiente, debido a su importancia. Los valores que pueda tomar este objeto error pueden ser manejados durante la ejecución de la aplicación. Las funciones disponibles son las siguientes: \\ ===Number=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Entero| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Contiene el código del último error ocurrido en la maquinaria. \\ \\ Valores negativos suelen indicar errores, códigos positivos suelen indicar situaciones “anormales” pero que no representan errores fatales. \\ \\ Cero indica que no hay error.\\ \\ .... appdata.GetCollection("ForMaintenance").ExecuteSqlString "ALTER TABLE GEN_PRUEBA ADD COLUMN CAMPOTXT varchar(10) NULL" If AppData.Error.Number=0 Then ' Indica que se pudo crear el campo correctamente This("MAP_OK")=1 Else 'Ocurrio un error, como por ejemplo, el campo ya estaba creado This("MAP_OK")=0 ... End If ===Description=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Descripción del último error ocurrido en la maquinaria.\\ \\ ===FailedSQL=== \\ ^ Tipo |Propiedad| ^ Acceso |Lectura| ^ Tipo de Dato devuelto |Texto| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Si el error de la última operación se debe a un SQL que ha fallado, la sentencia en cuestión está en esta propiedad del objeto de error.\\ \\ Algunos métodos pueden optar también por dejar información en esta propiedad, pero lo normal es que si no hay SQLs implicados en el error, esta propiedad esté vacía.\\ \\ ===Clear=== \\ ^ Tipo |Método| ^ Tipo de Dato devuelto |Ninguno| ^ Plataforma |Win32, Web, .NET, .NET CF, WM (2003, 2005, 6.0, 6.5) Blackberry (5.0), iPhone, Linux, MC+, Symbian (3ed, 5ed)| \\ Limpia las variables del objeto de error, dejándolo listo para la siguiente operación.\\ \\ .... appdata.GetCollection("ForMaintenance").ExecuteSqlString "ALTER TABLE GEN_PRUEBA ADD COLUMN CAMPOTXT varchar(10) NULL" If AppData.Error.Number=0 Then ' Indica que se pudo crear el campo correctamente This("MAP_OK")=1 Else 'Ocurrio un error, como por ejemplo, el campo ya estaba creado This("MAP_OK")=0 'Limpiar el ERROR al final para que no se propague y controlar por mi cuenta el mensaje que quiero mostrar AppData.Error.Clear End If \\ ===== Nueva forma de hacer LOGIN ===== \\ Se ha definido una nueva forma de hacer login en las aplicaciones XOne.\\ \\ Dentro del objeto appData, encontramos los siguientes métodos relacionados con el login. \\ |**login(objecto)**| sirve para hacer login en la aplicación, es el sustituto del antiguo appData.failWithMessage(-11888,##LOGIN_START##”)| El objeto que se le pase tiene la siguiente estructura:\\ \\ { userName: /*usuario*/, password: /*contraseña*/, entryPoint: /*Colección entryPoint que se abrirá cuando el login sea correcto.*/, /*Opcional*/ onLoginSuccessful: function() { /*Esto se llamara si el login ha sido correcto.*/ }, /*Opcional*/ onLoginFailed: function() { /*Esto se llamara si el login no ha sido correcto.*/ } }; \\ **Ejemplo:** \\ function doLogin() { var params = { userName: self.MAP_USER, password: self.MAP_PASSWORD, entryPoint: "MenuEntrada2", /* Opcional */ onLoginSuccessful: function() { ui.showToast("Login OK!"); }, /* Opcional */ onLoginFailed: function() { ui.showToast("Login failed!"); } }; appData.login(params); } \\ \\ |**logout**|cierra sesión y vuelve a la pantalla de login| \\ **Ejemplo**: \\ function doLogout() { appData.logout(); } \\ \\ |**exit**| Cierra la aplicación es el sustituto del antiguo appData.failWithMessage(-11888,## EXITAPP##”)| \\ **Ejemplo**: \\ function exit() { appData.exit(); }