===== THIS ===== \\ \\ 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:** this.ExecuteNode "mensajes" \\ ===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 /* 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**.\\ \\ El objeto USER que contiene los datos del usuario actualmente conectado a la aplicación tiene los mismos método aquí definidos.\\ Si no se ha ejecutado ninguna secuencia de logon ó si se trata de una aplicación que no usa el modelo empresa/usuario este objeto será Nothing. Por tanto es importante verificar si el objeto tiene valor antes de usarlo. ====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 sustituídas.\\ \\ 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 y/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)| \\ \\ Esta 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, ó cualquier tipo de formato que haya podido cambiar, para eso tendríamos que utilizar el ui.refresh, éste 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 */