Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com

Inicio

 
4D v20 R7
OB Get

OB Get 


 

OB Get ( objeto ; propiedad {; tipo} ) -> Resultado 
Parámetro Tipo   Descripción
objeto  Objeto, Campo Objeto in Objeto estructurado
propiedad  Texto in Nombre de la propiedad a leer
tipo  Entero largo in Tipo al cual convertir el valor
Resultado  Expresión in Valor actual de propiedad

El comando OB Get devuelve el valor actual de la propiedad del objeto, convertido opcionalmente en el tipo definido.

objeto debe haber sido definido con el comando _O_C_OBJECT o designar un campo objeto 4D.

Nota: este comando soporta definiciones de atributo en objetos 4D Write Pro, como el comando WP GET ATTRIBUTES (ver el ejemplo 9).

En el parámetro propiedad, pase la etiqueta de la propiedad a leer. Tenga en cuenta que el parámetro propiedad es sensible a mayúsculas y minúsculas

Por defecto, 4D devuelve el valor de la propiedad en su tipo original. Puede "forzar" la escritura del valor devuelto utilizando el parámetro opcional tipo. Para ello, en tipo pase una de las siguientes constantes que se encuentran en el tema Tipos de campos y variables:

Constante Tipo Valor
Is Boolean Entero largo 6
Is collection Entero largo 42
Is date Entero largo 4
Is longint Entero largo 9
Is null Entero largo 255
Is object Entero largo 38
Is picture Entero largo 3
Is pointer Entero largo 23
Is real Entero largo 1
Is text Entero largo 2
Is time Entero largo 11

El comando devuelve el valor de la propiedad. Varios tipos de datos están soportados. Tenga en cuenta que:

  • un puntero se devuelve tal cual, puede ser evaluado utilizando el comando JSON Stringify,
  • dependiendo de la configuración de la fecha de la base, las fechas en los atributos objeto se almacenan con el tipo de fecha o el tipo de texto (a partir de 4D v16 R6). Para más información, consulte la opción "Utilizar tipo de fecha en lugar del formato de fecha ISO en objetos" en Página Compatibilidad. Para que OB Get interprete correctamente una fecha almacenada como un texto, debe usar la constante Is date (ver ejemplo 5).
  • en valores reales, el separador decimal es siempre un punto "."
  • las horas se devuelven como un número. Las horas se almacenan en segundos por defecto en los objetos (ver nota de compatibilidad abajo). Note que OB SET almacena las horas en forma de milisegundos, conforme al estándar JavaScript, mientras 4D espera un número de segundos. Para una interpretación correcta por OB Get de una hora almacenada, utilice la constante Is null.

Notas de compatibilidad:

  • (4D Write Pro) En versiones anteriores a la v17, las horas eran almacenadas en milisegundos en los objetos. Por razones de compatibilidad, este comportamiento anterior puede restablecerse con ayuda del selector Times inside objects del comando SET DATABASE PARAMETER. Cualquiera que sea el parámetro, el resultado será correcto cuando se utilice la constante Is time. 
  • (4D Write Pro) En versiones anteriores a v16 R6, cuando propiedad definía un atributo de imagen 4D Write Pro (como wk image), siempre se devolvía un valor de texto que contenía un URI de datos. A partir de 4D v16 R6, los atributos imagen 4D Write Pro siempre se devuelven como valores imagen. Debe usar una propiedad específica como wk image url ara obtener un URI de datos.
  • En versiones anteriores a v16 R4, cuando propiedad contiene un valor nulo y si no se utiliza el parámetro tipo, 4D devuelve una cadena vacía. En 4D v16 R4 y superiores, la constante Is null se devuelve en este caso. Para conservar la compatibilidad, este cambio solo surte efecto si la opción "Utilizar la notación objetos para acceder a las propiedades de objetos (se requiere Unicode) " está habilitada en la base (ver el párrafo Página Compatibilidad).

Recuperación de un valor de tipo texto:

 C_OBJECT($ref)
 C_TEXT($FirstName)
 OB SET($ref;"FirstName";"Harry")
 $FirstName:=OB Get($ref;"FirstName") // $FirstName = "Harry" (text)

Recuperación de un valor real convertido en entero largo:

 OB SET($ref ;"age";42)
 $age:=OB Get($ref ;"age") // $age es un número real (default)
 $age:=OB Get($ref ;"age";Is longint// $age es un entero largo

Recuperación de los valores de un objeto:

 C_OBJECT($ref1;$ref2)
 OB SET($ref1;"LastName";"Smith") // $ref1={"LastName":"Smith"}
 OB SET($ref2;"son";$ref1// $ref2={"son":{"LastName":"Smith"}}
 $son:=OB Get($ref2;"son") // $son={"LastName":"john"} (object)
 $sonsName:=OB Get($son ;"name") // $sonsName="john" (text)

Modificando de la edad de un empleado dos veces:

 C_OBJECT($ref_john;$ref_jim)
 OB SET($ref_john;"name";"John";"age";35)
 OB SET($ref_jim;"name";"Jim";"age";40)
 APPEND TO ARRAY($myArray;$ref_john// creamos un objeto array
 APPEND TO ARRAY($myArray;$ref_jim)
  // cambiamos la edad de John de 35 a 25
 OB SET($myArray{1};"age";25)
  // cambiamos la edad de "John" en el array
 For($i;1;Size of array($myArray))
    If(OB Get($myArray{$i};"name")="John")
       OB SET($myArray{$i};"age";36) // en cambio de 25
  // $ref_john={"name":"John","age":36}
    End if
 End for

Al recuperar una fecha, el valor resultante depende de la configuración actual de la fecha de la base.

  • Si la opción "Utilizar tipo fecha en lugar del formato de fecha ISO en objetos" no está seleccionada:

 C_OBJECT($object)
 C_DATE($birthday)
 C_TEXT($birthdayString)
 OB SET($object;"Birthday";!30/01/2010!)
 $birthday:=OB Get($object;"Birthday";Is date//30/01/10
 $birthdayString:=OB Get($object;"Birthday") //"2010-01-29T23:00:00.000Z" (Paris time zone)

  • Si la opción "Utilizar tipo fecha en lugar del formato de fecha ISO en objetos" está seleccionada:

 C_OBJECT($object)
 C_DATE($birthday)
 OB SET($object;"Birthday";!30/01/2010!)
 $birthday:=OB Get($object;"Birthday") //30/01/10, no hay necesidad de Is date

Nota: para más información sobre esta configuración, consulte Página Compatibilidad.

Utilización de objetos anidados:

 C_OBJECT($ref1;$child;$children)
 C_TEXT($childName)
 OB SET($ref1;"firstname";"John";"lastname";"Monroe")
  //{"firstname":"john","lastname";"Monroe"}
 OB SET($children;"children";$ref1)
 $child:=OB Get($children;"children")
  //$son = {"firstname":"John","lastname":"Monroe"} (object)
 $childName:=OB Get($child;"lastname")
  //$childName = "Monroe" (text)
  //o
 $childName:=OB Get(OB Get($children;"children");"lastname")
  // $childName = "Monroe" (text)

Recuperación en 4D de una hora almacenada en un objeto:

 C_OBJECT($obj_o)
 C_TIME($set_h;$get_h)
 
 $set_h:=?01:00:00?+1
 OB SET($obj_o;"myHour";$set_h)
  // $obj_o = {"myHour":3601}
  // La hora se almacena en segundos
 $get_h:=OB Get($obj_o;"myHour";Is time)
  // $get_h = ?01:00:01?

Ejemplos de manipulación de campos objeto 4D:

  // Definir un valor
 OB SET([People]Identity_OB;"First name";$firstName)
 OB SET([People]Identity_OB;"Last name";$lastName)
 
  // Obtener un valor
 $firstName:=OB Get([People]Identity_OB;"First name")
 $lastName:=OB Get([People]Identity_OB;"Last name")

En un método formulario, puede escribir:

 If(FORM Event=On Validate)
    OB SET([MyDocuments]My4DWP;"myatt_Last edition by";Current user)
    OB SET([MyDocuments]My4DWP;"myatt_Category";"Memo")
 End if

También puede leer los atributos personalizados de los documentos:

 vAttrib:=OB Get([MyDocuments]My4DWP;"myatt_Last edition by")

Desea conocer el tamaño de una imagen almacenada en un atributo objeto:

 C_LONGINT($vSize)
 $vSize:=Picture size(OB Get($object;"photo";Is picture))

Nota: si asigna el resultado del comando a una variable imagen, la constante Is picture no es necesaria. Ejemplo:

 C_PICTURE($vPict)
 $vPict:=OB Get($object;"photo") //"is picture" es inútil en este caso



Ver también 

OB Copy
OB SET
Tipos de campos y variables

 
PROPIEDADES 

Producto: 4D
Tema: Objetos (Lenguaje)
Número 1224

This command can be run in preemptive processes

 
CONTENIDO DE LA PÁGINA 
 
HISTORIA 

Creado por: 4D v14
Modificado: 4D v15
Modificado: 4D v15 R4
Modificado: 4D v16 R4
Modificado: 4D v16 R6

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v20 R7)