Le coin des objets : partage facile et autres bonnes nouvelles

Traduit automatiquement de Deepl

Combien de fois avez-vous obtenu l’erreur« Not supported value type in a shared object » en essayant de placer un objet dans un objet partagé ?

Qu’avez-vous fait ? Vous avez écrit un code plus long pour transformer votre objet innocent en un objet partagé, peut-être en itérant sur toutes ses propriétés ?

Et si vous transfériez un objet partagé d’un groupe partagé à un autre?

Une chose intéressante à propos des objets: vous savez déjà qu’ils peuvent être utilisés comme une carte de hachage (un système clé/valeur), mais qu’en est-il de l’obtention de toutes les clés ou de toutes les valeurs avec une seule ligne de code?

Continuez à lire, car 4D v18 R3 est sorti et apporte de bonnes nouvelles !

COPIE d’objets et de collections partagés

copier un objet comme partagé

La commande OB Copy() a été améliorée pour accepter une nouvelle option qui peut avoir la valeur : ck shared .

Dans l’exemple ci-dessous, l’objet $person est copié comme objet partagé dans l’objet $copy.

Ensuite, nous pouvons mettre l’objet $copy dans l’objet partagé $personsList .

C_OBJECT$copy ($person;$copy;$personsList)
C_TEXT ($text)

$text :=Document to text(Get 4D folder(Current resources folder)+"person.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

assigner un objet partagé d’un groupe partagé à un autre

La commande OB Copy() a également été améliorée pour accepter un nouveau paramètre : groupWith (qui doit être un objet partagé ou une collection partagée).

Passer le paramètre groupWith permet de placer l’objet copié dans le même groupe partagé que groupWith.

Dans l’exemple ci-dessous, $sharedObj et $sharedColl appartiennent à deux groupes partagés distincts.

Nous ne pouvons pas mettre $sharedObj dans $sharedColl sans obtenir une erreur, mais nous pouvons facilement copier $sharedObj dans un nouvel objet appartenant au même groupe partagé que $sharedColl.

C_OBJECT($sharedObj;$objCopy)
C_COLLECTION ($sharedColl)

//$sharedObj belongs to a shared group

$sharedObj :=New shared object("lastname" ; "Smith" ; "address" ;New shared object("city" ; "New York"))

//$sharedColl belongs to another shared group

$sharedColl :=New shared collection(New shared object("lastname" ; "Brown"))

//$objCopy is in the same shared group as $sharedColl

$objCopy:=OB Copy($sharedObj;ck shared;$sharedColl)

//So we can put $objCopy into $sharedColl without error

Use ($sharedColl)
$sharedColl .push($objCopy)
End use

et qu’en est-il des collections partagées ?

Les exemples ci-dessus sont liés à la commande OB Copy() .

La méthode du membrecollection.copy() a été améliorée exactement de la même manière.

manipuler un objet comme une carte de hachage

Il existe de nouvelles commandes pour faciliter la manipulation d’un objet en tant que carte de hachage. Si vous avez des objets dont les noms de propriété contiennent des données dynamiques, ces commandes sont faites pour vous !

Expliquons cela à l’aide d’un seul exemple.

Considérons cet objet $persons contenant des prénoms comme nom de propriété et l’âge comme valeur de propriété :

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

Commande OB Keys

Cette commande renvoie les noms des propriétés d’un objet sous forme de collection :

ALERT("Il y a "+String(OB Keys($persons).length)+" personnes")

Commande OB Values

Cette commande renvoie les valeurs des propriétés d’un objet sous forme de collection :

ALERT("L'âge moyen est de "+String(OB Values($persons).average()))

Commande OB Entries

Cette commande renvoie une collection d’objets avec des propriétés clés (nom de la propriété) et une valeur (valeur de la propriété) :

C_COLLECTION($agesOK)

$agesOK:=OB Entries($persons).query("valeur>:1";45)
ALERT ("Il y a "+String($agesOK.length)+" des personnes qui ont plus de 45 ans")
ALERT ("Leurs noms sont : "+$agesOK.extract("clé").join("-"))

L’utilisation d’un objet, comme indiqué ci-dessus, permet un accès rapide et direct aux données, comme dans le cas d’un index.

C’est plus rapide que d’utiliser une collection d’objets avec les propriétés prénom et âge.

Notez également que ces commandes retournent une collection. Cela nous permet d’utiliser toutes les méthodes de membres disponibles sur les collections (telles que average(), query(), …).

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert a rejoint l'équipe de 4D Product en tant que Product Owner en 2017. En tant que Product Owner, elle est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Marie-Sophie est diplômée de l'école d'ingénieur ESIGELEC et a commencé sa carrière en tant qu'ingénieur chez IBM en 1995. Elle a participé à divers projets (projets de maintenance ou de construction) et a travaillé en tant que développeur Cobol. Elle a ensuite travaillé en tant que concepteur UML et développeur Java. Dernièrement, ses principaux rôles étaient d'analyser et de rédiger des exigences fonctionnelles, de coordonner les équipes commerciales et de développement.