[OBJETS]Quelle syntaxe?

Bonjour,

J’ai un objet dans un objet $o_racine[“REF”+string($l_ref)] et je souhaite y créer un nouvel objet. Mais lorsque j’appelle <code 4D>
OB SET($o_racine[“REF”+string($l_ref)];“site”+string($CP);New Object)
</code 4D> J’ai une erreur d’incompatibilité de type d’argument sur $o_racine[“REF”+string($l_ref)].

Si je tape en dur dans le code <code 4D>
OB SET($o_racine.REF1002;“site”+string($CP);New Object)
</code 4D> ça fonctionne.

Quelle syntaxe dois-je utiliser ?
Merci :pray:

En v17 ?

la syntaxe est (objet ; propriété ; valeur), pas (objet.propriété ; valeur), ça donnerait ceci :
OB FIXER($o_racine;(“REF”+Chaîne($l_ref));“site”+$CP;Créer objet)
Mais si tu es en v17, la notation à point est plus lisible - à mon goût.

Bonsoir Messieurs

Serge utilise la bonne syntaxe (objet[prop1] ; prop11 ; valeur)
objet[prop1] étant lui-même un objet

Certes la notation à point est plus lisible, cependant lorsque l’on veut, comme ici, utiliser une expression (ou une variable) contenant/retournant le nom de la propriété et non directement la propriété, il convient d’utiliser la notation avec les [ ]

Serge, le code ci-dessous ne produit pas l’erreur que vous mentionnez (v17r3)

<code 4D>
C_LONGINT($l_ref;$CP)
C_OBJECT($o_racine)

$o_racine:=New object(“REF1002”;New object)

$l_ref:=1002
$CP:=78230

OB SET($o_racine[“REF”+String($l_ref)];“site”+String($CP);New object)

</code 4D>

En quel version êtes-vous ?

Bonjour,

Pourquoi vouloir utiliser OB SET dans ce cas? Où ai-je loupé quelque chose?

Pour moi la bonne façon d’écrire serais

<code 4D>
$o_racine[“REF”+String($l_ref)][“site”+String($CP)]:=New object
</code 4D>

Est-ce que la notation à point est bien activée dans votre base?