Plantage avec entity.toObject()

Pour cloner une entity dont j’ai la référence dans Form.entity, je commence par la copier dans un objet temporaire :

$tempo:=Form.entity.toObject()

Si je mets des noms d’attributs en arguments de toObject(), ça passe. Mais si entre les parenthèses je ne mets rien, comme ci-dessus, 4D plante sèchement en tentant d’exécuter cette ligne. Il plante également si je mets “*”.
J’ai mal compris la doc ou c’est une faiblesse de la v17r4 (testé en 32 et 64 bits) ?

Bonjour Arnaud,
Par hasard, $tempo est alloué avant de faire la copie ?
Avec des arguments, peut être que 4D réalise l’allocation de l’objet de façon implicite ce qui n’est pas le cas si il n’y a pas d’attributs…

C’est juste une piste, malheureusement je ne peux pas faire de tests pour l’instant…

Non, c’est une locale que je déclare juste avant de générer mes clones, ça sert de modèle qui n’est plus touché par cette génération. En simplifié :

C_OBJECT($temp_o)
$temp_o:=Form.entity.toObject("champ1,champ2,champ3,champ4")
For($i;1;$nombre)
$clone_o:=ds.LA_TABLE.new()
$clone_o.fromObject($temp_o)
//modif de certains champs
$status_o:=$clone_o.save()
End for

un bout de code qui fonctionne…

le remove de l’ID n’est pas nécessaire si tu précises les attributs à récupérer

C_OBJECT($status)
C_OBJECT($entity)
C_OBJECT($entityClone)

$logs:=ds.Log.all()

  // clone all entities
For ($i;0;$logs.length-1)
	  //$entity:=$logs[$i].toObject()
	$entity:=$logs[$i].toObject("date, time, method, comment")	
	
	  // prepare entity before assign to $entityClone
	$entity.comment:=$entity.comment+" - cloned from "+String($entity.ID)
	OB REMOVE($entity;"ID")
	
	$entityClone:=ds.Log.new()
	$entityClone.fromObject($entity)
	
	  // save entity
	$status:=$entityClone.save()
	  //TODO : check status
	
End for 

  //  structure of Log table
  //{
  //. "date": "2020-05-20T00:00:00.000Z"0
  //. "time": "63363"0
  //. "method": "LOG_cleaning"0
  //. "comment": "Fin du nettoyage des logs avec succès."
  //}

Oui, j’avais contourné comme ça. Ma question porte sur le fait que ça plante invariablement lorsque je laisse les parenthèses de .toObject() vides : est-ce que quelqu’un reproduit, si oui avec quelle(s) version(s) ?

Mais j’avais laissé en commentaire la version sans les arguments et je n’ai pas de plantage dans ce cas.
(juste au dessus de la ligne contenant l’instruction toObject .)

Peux-tu essayer mon morceau de code sur ton infra (sans les arguments bien sûr) et nous dire si ça plante ?

Non, ça plante pas. Il faudrait que je creuse, ça m’a l’air lié au contexte particulier dans lequel je travaillais l’autre jour. En même temps, comme j’ai contourné le souci… Merci de ton aide, en tout cas !