Entity get + toObject

Salut,

Dans le code qui suit le get me renvoie une entité dont tous les enregistrements des tables liées.
Malheureusement dès que je demande .toObject le contenu des tables liées est zappé.
<code 4D>
C_OBJECT($b;$c)
$b:=ds.CONTRAT.get(23332)
$c:=$b.toObject()
</code 4D>
Est-il possible de retrouver les contenus des tables liées dans l’objet $c ?

https://doc.4d.com/4Dv17R4/4D/17-R4/entitytoObject.305-4055348.fr.htmlL’exemple 3> m’a l’air de correspondre à ce que tu veux, non ?

Oui l’exemple récupère bien les tables liées mais écrire le nom du lien agit comme un filtre. Du coup je suis obligé d’écrire tous les autres champs dans le filtre. Sauf si j’ai raté une fonctionnalité qui le ferait à ma place ?

si tu as un lien qui s’apple “lien1” et un autre “lien2” pour lesquels tu souhaites récupérer les infos, est-ce que cela ne le fait pas en faisant :

$c:=$b(“lien1., lien2.”)

Patrick

: Patrick EMANUEL

si tu as un lien qui s’apple “lien1” et un autre “lien2”
Salut,
Je n’ai pas de problème pour récupérer les infos des tables liées.

Ce qui m’embête c’est que j’ai l’impression d’utiliser un marteau pour écraser une mouche:

ce code 1:
<code 4D>
$z:=ds.CONTRAT.get(23332)
</code 4D>
me ramène tout des tables liées.

avec .toObject :
<code 4D>
$w:=ds.CONTRAT.get(23332).toObject()
</code 4D>
Je ne récupère plus mes tables liées en 1 seule ligne comme avec le code 1

OUi, je viens de faire l’essai et je te comprends mieux maintenant.
Sans le nom du RelatedEntity dans la recherche, que nenni.
Du coup, pas terrible pour obtenir toutes les infos associées à 1 seule entité, ce qui pourrait être pas mal.

Bon après, la doc elle dit:

Si filter contient une chaîne vide ou “*”, l’objet retourné contiendra :
tous les attributs du type (kind) storage de l’entité
attributs du type relatedEntity : vous obtenez une propriété avec le même nom que l’entité liée (nom du lien N vers 1). L’attribut est extrait sous forme simple.
attributs du type relatedEntities : non retourné(s).

Du coup soit tu passes tous tes attributs du type relatedEntities sous la forme “lien1., lien 2.…” pour obtenir ce que tu veux

J’ai un contrat qui fait référence à :

  • un client
  • une liste d’interventions

Je veux un objet qui embarque le contrat avec le client et les interventions.

Le code en plusieurs étapes :
<code 4D>
C_COLLECTION($C_Filtre)
$C_Filtre:=New collection
$C_Filtre.push(“Lien_ref_occupant.")
$C_Filtre.push("Lien_ref_intervention_retour.
”)

C_OBJECT($O_Contrat;$O_temp)
$O_temp:=ds.CONTRAT.get(23332).toObject($C_Filtre)

$O_Contrat:=ds.CONTRAT.get(23332).toObject()
$O_Contrat.Lien_ref_occupant:=$O_temp.Lien_ref_occupant
$O_Contrat.Lien_ref_intervention_retour:=$O_temp.Lien_ref_intervention_retour

</code 4D>

I think you can do:

$entity.toObject(“Lien_ref_occupant.,Lien_ref_occupant.Lien_ref_intervention_retour.”)

the * wildcard only extends to the next dot, but you can request multiple filters.

Thank you,

I’m not sure if it was your aim but I tuned my request with only one ds:

<code 4D>
C_OBJECT($O_Entity)
$O_Entity:=ds.CONTRAT.get($L_PK)

C_COLLECTION($C_Filtre)
$C_Filtre:=New collection
$C_Filtre.push(“Lien_ref_occupant.")
$C_Filtre.push("Lien_ref_proprietaire.
”)
$C_Filtre.push(“Lien_ref_gestionnaire.")
$C_Filtre.push("Lien_ref_payeur.
”)
$C_Filtre.push(“Lien_ref_equipment.")
$C_Filtre.push("Lien_ref_option.
”)
$C_Filtre.push(“Lien_ref_tva.")
$C_Filtre.push("Lien_ref_tarif.
”)
$C_Filtre.push(“Lien_ref_intervention_retour.*”) // selection N

C_OBJECT($O_Contrat;$O_temp)
$O_temp:=$O_Entity.toObject($C_Filtre)

$O_Contrat:=$O_Entity.toObject()
$O_Contrat.Lien_ref_occupant:=$O_temp.Lien_ref_occupant
$O_Contrat.Lien_ref_proprietaire:=$O_temp.Lien_ref_proprietaire
$O_Contrat.Lien_ref_gestionnaire:=$O_temp.Lien_ref_gestionnaire
$O_Contrat.Lien_ref_payeur:=$O_temp.Lien_ref_payeur
$O_Contrat.Lien_ref_equipment:=$O_temp.Lien_ref_equipment
$O_Contrat.Lien_ref_option:=$O_temp.Lien_ref_option
$O_Contrat.Lien_ref_tva:=$O_temp.Lien_ref_tva
$O_Contrat.Lien_ref_tarif:=$O_temp.Lien_ref_tarif
$O_Contrat.Lien_ref_intervention_retour:=$O_temp.Lien_ref_intervention_retour
</code 4D>

Hi,

If you try something like:

$O_temp:=$O_Entity.toObject(",Lien_ref_occupant.,Lien_ref_proprietaire., Lien_ref_gestionnaire.,Lien_ref_payeur.* … )

it works.

You have all storage fields and related entity ones.

: Marie-Sophie LANDRIEU

it works.

yeah! A tenth of lines to the garbage :razz:

for the archive:

<code 4D>
C_OBJECT($O_Entity)
$O_Entity:=ds.CONTRAT.get($L_PK)

C_COLLECTION($C_Filtre)
$C_Filtre:=New collection
$C_Filtre.push("")
$C_Filtre.push("Lien_ref_occupant.
")
$C_Filtre.push(“Lien_ref_proprietaire.")
$C_Filtre.push("Lien_ref_gestionnaire.
”)
$C_Filtre.push(“Lien_ref_payeur.")
$C_Filtre.push("Lien_ref_equipment.
”)
$C_Filtre.push(“Lien_ref_option.")
$C_Filtre.push("Lien_ref_tva.
”)
$C_Filtre.push(“Lien_ref_tarif.")
$C_Filtre.push("Lien_ref_intervention_retour.
”) // selection N

$0:=JSON Stringify($O_Entity.toObject($C_Filtre))

// EOM
</code 4D>