¿Cuántas veces has obtenido el error«Tipo de valor no soportado en un objeto compartido» al intentar poner un objeto en un objeto compartido?
¿Qué has hecho? ¿Escribir un código más largo para convertir tu inocente objeto en uno compartido, quizás iterando sobre todas sus propiedades?
¿Qué tal transferir un objeto compartido de un grupo compartido a otro?
Una cosa interesante sobre los objetos: ya sabes que pueden ser utilizados como un mapa hash (un sistema de clave/valor), pero ¿qué hay de obtener todas las claves o todos los valores con una sola línea de código?
Siga leyendo, porque 4D v18 R3 ha salido y trae buenas noticias.
COPIAR objetos y colecciones compartidas
copiar un objeto como compartido
El comando OB Copy() ha sido mejorado para aceptar una nueva opción que puede tener el valor: ck shared
En el ejemplo siguiente, el objeto $person se copia como objeto compartido en el objeto $copy.
Entonces, podemos poner el objeto $copy en el objeto compartido $personsList .
C_OBJECT$copy ($person;$copy;$personsList)
C_TEXT ($text)
$text :=Document to text(Get 4D folder(Current resources folder)+"persona.txt")
//$person is a standard object
$person :=JSON Parse($text)
$personsList :=New shared object()
//$copy is a shared object
$copy :=OB Copy($person;ck shared)
Use ($personsList)
//We can put $copy in $personsList because $copy is a shared object
$personsList .person:= xml-ph-003
End use
asignar un objeto compartido de un grupo compartido a otro
El comando OB Copy() también se ha mejorado para aceptar un nuevo parámetro: groupWith (que debe ser un objeto compartido o una colección compartida).
Pasar el parámetro groupWith permite poner el objeto copiado en el mismo grupo compartido que groupWith.
En el ejemplo siguiente, $sharedObj y $sharedColl pertenecen a dos grupos compartidos distintos.
No podemos poner $sharedObj en $sharedColl sin obtener un error, pero podemos copiar fácilmente $sharedObj en un nuevo objeto que pertenezca al mismo grupo compartido que $sharedColl.
C_OBJECT
//$objCopy is in the same shared group as $sharedColl($sharedObj;$objCopy)
C_COLLECTION ($sharedColl)
//$sharedObj belongs to a shared group
$sharedObj :=New shared object("apellido"; "Smith"; "dirección";New shared object("ciudad"; "Nueva York"))
//$sharedColl belongs to another shared group
$sharedColl :=New shared collection(New shared object("apellido"; "Marrón"))
$objCopy:=OB Copy($sharedObj;ck shared;$sharedColl)
//So we can put $objCopy into $sharedColl without error
Use ($sharedColl)
$sharedColl .
push($objCopy)
End use
¿y qué pasa con las colecciones compartidas?
Los ejemplos anteriores están relacionados con el comando OB Copy() de la serie.
El método del miembrocollection.copy() ha sido mejorado exactamente de la misma manera.
manejar un objeto como un mapa hash
Hay nuevos comandos para facilitar el manejo de un objeto como un mapa hash. Si tienes objetos cuyos nombres de propiedades contienen datos dinámicos, estos comandos son para ti.
Vamos a explicarlo con un ejemplo.
Considere este objeto $persons que contiene nombres de pila como nombre de propiedad y edad como valor de propiedad:
C_OBJECT($persons)
$persons :=New object
$persons ["John"]:=42 // John is 42
$persons ["Andy"]:=24 // Andy is 24
$persons ["Mary"]:=30 // Mary is 30
$persons ["Paul"]:=50 // Paul is 50
$persons ["Fred"]:=51// Fred is 51
Comando OB Keys
Este comando devuelve los nombres de las propiedades de un objeto como una colección:
ALERT("Hay "+String(OB Keys($persons).length)+" personas")
Comando OB Valores
Este comando devuelve los valores de las propiedades de un objeto como una colección:
ALERT("La media de edad es "+String(OB Values($persons
).average()))
Comando OB Entradas
Este comando devuelve una colección de objetos con propiedades clave (nombre de la propiedad) y valor (valor de la propiedad):
C_COLLECTION($agesOK)
$agesOK:=OB Entries($persons).query("valor>:1";45)
ALERT ("Hay "+String($agesOK.length)+" personas que tienen más de 45 años")
ALERT ("Sus nombres son: "+$agesOK.extract("clave").join("-"))
El uso de un objeto como el mostrado arriba, proporciona un acceso rápido y directo a los datos como cuando se utiliza un índice.
Es más rápido que utilizar una colección de objetos con las propiedades nombre y edad.
También hay que tener en cuenta que esos comandos devuelven una colección. Esto nos permite utilizar todos los métodos miembros disponibles en las colecciones (como average(), query(), …).