Objet partagé et non partagé

OB copier fait parfaitement le travail pour cloner un objet partagé dans un objet non partagé. Mais je ne trouve rien qui fasse l’inverse : j’ai loupé le truc magique ou je me lance dans une (ignoble) générique ?

Bonjour Arnaud

https://kb.4d.com/assetid=78197

:wink:

Patrick

Je sens que ça va me plaire mais de kb 78197 point ne trouve :frowning:
Recherche de “shared object” = pas convaincante.

Force est de constater que je ne sais pas chercher ; je me demande quelle étrange lubie m’a amenée à faire ce métier.

Effectivement, elle a disparu :frowning:

// ----------------------------------------------------
// Nom utilisateur (OS) : Patrick EMANUEL
// Date et heure : 25/01/19, 14:29:30
// Paramètres
// ----------------------------------------------------
// $1 : Object to copy from
// $2 : Shared Object to copy to
// ----------------------------------------------------
// Méthode : ORDA_ObjectToSharedObject
// Description
// https://kb.4d.com/assetid=78197

// // This method works for assigning any object to an existing shared object, it supp.
// // The method can replace the object assignment or OB COPY in the code above:
//Use (Storage)
//Storage.person:=New shared object
//Use (Storage.person)
//ORDA_ObjectToSharedObject($person;Storage.person)
//End use
//End use

ARRAY TEXT($arrNames;0)
C_OBJECT($1;$2)
OB GET PROPERTY NAMES($1;$arrNames)
For ($counter;1;Size of array($arrNames))
If (OB Get type($1;$arrNames{$counter})=Is object)
$2[$arrNames{$counter}]:=New shared object
Use ($2[$arrNames{$counter}])
ORDA_ObjectToSharedObject ($1[$arrNames{$counter}];$2[$arrNames{$counter}])
End use
Else
$2[$arrNames{$counter}]:=$1[$arrNames{$counter}]
End if
End for

En attendant (car c’est prévu)

<code 4D>
$Obj_src:=New object
$Obj_src.value:=“value”
$Obj_src.object:=New object(“bool”;True)
$Obj_src.collection:=New collection(“value”;1;OB Copy($Obj_src);New collection(1;2;“a”))

$Obj_shared:=New shared object
sharedObject ($Obj_src;$Obj_shared)

</code 4D>

sharedObject:

<code 4D>
$Obj_src:=$1
$Obj_shared:=$2

Use ($Obj_shared)
For each ($Txt_property;$Obj_src)

	Case of 
			
			  //______________________________________________________
		: (Value type($Obj_src[$Txt_property])=Is object)
			
			$Obj_shared[$Txt_property]:=New shared object
			sharedObject ($Obj_src[$Txt_property];$Obj_shared[$Txt_property])
			
			  //______________________________________________________
		: (Value type($Obj_src[$Txt_property])=Is collection)
			
			$Obj_shared[$Txt_property]:=New shared collection
			sharedCollection ($Obj_src[$Txt_property];$Obj_shared[$Txt_property])
			
			  //______________________________________________________
		Else 
			
			$Obj_shared[$Txt_property]:=$Obj_src[$Txt_property]
			
			  //______________________________________________________
	End case 
End for each 

End use

</code 4D>

sharedCollection:

<code 4D>
$Col_src:=$1
$Col_shared:=$2

Use ($Col_shared)

For ($i;0;$Col_src.length-1;1)
	
	Case of 
			
			  //______________________________________________________
		: (Value type($Col_src[$i])=Is object)
			
			$Col_shared[$i]:=New shared object
			sharedObject ($Col_src[$i];$Col_shared[$i])
			
			  //______________________________________________________
		: (Value type($Col_src[$i])=Is collection)
			
			$Col_shared[$i]:=New shared collection
			sharedCollection ($Col_src[$i];$Col_shared[$i])
			
			  //______________________________________________________
		Else 
			
			$Col_shared[$i]:=$Col_src[$i]
			
			  //______________________________________________________
	End case 
End for 

End use

</code 4D>

Merci à vous deux !

: Vincent DE LACHAUX

En attendant (car c’est prévu)

Quand ça sortira, tout le monde aura déjà réécrit ça propre générique dans son coin… :roll:

Cf.https://forums.4d.com/Post/FR/26781888/0/0/ici>, https://forums.4d.com/Post/FR/28324700/0/0/là> ,etc…