Record to object

This code places a record into an object.

http://forums.4d.com/4DBB_Main/x_User/3906/files/20293783.zip

<code 4D>
// Method 4DREC_Record_to_Object places a record into a object
//
// #SYNTAX: $O_Record:=4DREC_Record_to_Object(->Table)
// #PARAMETERS:
// $0 Object : Record pushed into an object
// $1 Pointer : Pointer on a table

// #DATE CREATION: 15/08/2017 #AUTHOR: Bertrand SOUBEYRAND info@soubeyrand-4d-developer.eu
// #DATE MODIFICATION: 00/00/0000
// #NOTE:

// #HEADER VERSION: 2

C_OBJECT($0;$O_Output)
C_POINTER($1;$P_Table)
$P_Table:=$1

$O_Output:=JSON Parse("{}") // starting from 16R3 use Create object

C_LONGINT($L_Table)
$L_Table:=Table($P_Table)

C_LONGINT($i)
For ($i;1;Get last field number($L_Table))

If (Is field number valid($L_Table;$i))
	
	C_POINTER($P_Field)
	$P_Field:=Field($L_Table;$i)
	
	C_TEXT($T_Name)
	$T_Name:=Field name($P_Field)
	$T_Name:=Replace string($T_Name;".";"")
	
	OB SET($O_Output;Lowercase(Uppercase($T_Name));$P_Field->)
End if 

End for

$0:=OB Copy($O_Output)

// EOM

</code 4D>

Super boulot je vais l’inclure dans mon composant pour la gestion des objets.
Même si j’ai un doute que l’on puisse manipuler les data depuis le composant…

Par contre pourquoi faire un traitement sur les Majuscule/minuscule dans le nom de l’objet ?
J’aime avoir des noms sous la Forme : articleId ou stockLimite…

Petite amélioration… limiter la sélection des champs possibles.

Maintenant il faudrait aussi faire la méthode dans l’autre sens… ;o)

Petite question toutes bête… Comment on génère et utilise les fichiers .c4d ?

Bonne journée

Ok, je viens de capter comment on utilise les fichiers .c4d.
Je confirme aussi que la méthode fonctionne aussi dans un composant.

Voici ma petite contribution ( cela permet d’ajouter un filtre de champ)

Utilisation : $obChp := coRecordToObject(->[personne];“ID”;“nom”;“prenom”)

Code :
http://forums.4d.com/4DBB_Main/x_User/949583/files/20295638.zip

<code 4D>
// ----------------------------------------------------
// Nom utilisateur (OS) : Grégory Fromain gregory@connect-io.fr
// Date et heure : 15/08/17, 14:11:28
// ----------------------------------------------------
// Méthode : coRecordToObject
// Description
// charge un enregistrement dans un objet.
// Code source : (Bertrand SOUBEYRAND) http://forums.4d.com/Post//20293787/1/
//
// Paramètres
// $0 : [objet]
// $1 : [pointeur] pointeur de la table
// $x : [text] filtre des champs à retourner
// ----------------------------------------------------

C_OBJECT($0;$O_Output)
C_POINTER($1;$P_Table)
C_TEXT(${2})
C_LONGINT($i;$nbParam)

$P_Table:=$1

ARRAY TEXT($listChamp;0)
$nbParam:=Count parameters
For ($i;2;$nbParam)
APPEND TO ARRAY($listChamp;${$i})
End for

$O_Output:=JSON Parse("{}") //starting from 16R3 use Create object

C_LONGINT($L_Table)
$L_Table:=Table($P_Table)

For ($i;1;Get last field number($L_Table))

If (Is field number valid($L_Table;$i))
	
	C_POINTER($P_Field)
	$P_Field:=Field($L_Table;$i)
	
	C_TEXT($T_Name)
	$T_Name:=Field name($P_Field)
	$T_Name:=Replace string($T_Name;".";"")
	
	If ($nbParam=1)
		  // Si le nombre de param = 1, on ajoute le champ à l'objet.
		OB SET($O_Output;$T_Name;$P_Field->)
	Else 
		  // On vérifie que le champ doit être retourné.
		$posArray:=Find in array($listChamp;$T_Name)
		If ($posArray#-1)
			OB SET($O_Output;$T_Name;$P_Field->)
			  // On supprime du tableau le champ que l'on vient d'ajouter en sorti.
			DELETE FROM ARRAY($listChamp;$posArray)
		End if 
	End if 
	
End if 

End for

// Si il existe encore des valeurs dans le tableau, ce n’est pas normal.
// On l’indique donc à la sortie.

For ($i;1;size of array($listChamp))
OB SET($O_Output;$listChamp{$i};“Il n’existe pas de champ sous ce nom dans cette table.”)
End for

$0:=OB Copy($O_Output)
</code 4D>

: Gregory FROMAIN

Par contre pourquoi faire un traitement sur les Majuscule/minuscule

I always lowercase properties

the code I wrote alows to remove all diacritics in field names

merci pour le code

je vais ajouter un test sur le type du champ pour écarter BLOB, IMAGE ou SOUS TABLE

Si ce code m’a sauvé la vie un jour, je ne le recommande plus trop aujourd’hui car il est plus lent que la commande 4D.

A tester

: Bertrand SOUBEYRAND

the code I wrote alows to remove all diacritics in field names
Moi j’aurais tendance plutôt à faire comme ça :

  • soit la méthode utilise les noms de champs tels qu’ils sont
  • soit la méthode reçoit une liste de noms virtuels (tel champ --> tel nom de propriété)
    Mais, dans les deux cas, je ne chercherais pas à corriger les noms non conformes (accents, points, etc.), j’estime que c’est à l’appelant de travailler proprement (et ça peut me détendre de le lui dire). Ça permet aussi d’échanger avec d’autres système sans être asservi aux noms internes.

Quelle commande ?

: Arnaud DE MONTARD

Quelle commande ?
JSON VERS SELECTION
Selection vers JSON