Collection
La classe Collection gère les expressions de type Collection.
Une collection est initialisée avec les commandes New collection ou New shared collection.
Exemple
var $colVar : Collection //création d'une variable 4D de type collection
$colVar:=New collection ///initialisation de la collection et assignation à la variable 4D
Sommaire
.at()
Historique
| Release | Modifications |
|---|---|
| 20 | Ajout |
.at( index : Integer ) : any
| Paramètres | Type | Description | |
|---|---|---|---|
| index | Integer | -> | Indice de l'élément à renvoyer |
| Résultat | any | <- | L'élément à cet indice |
Description
Différent de
Cette fonction ne modifie pas la collection d'origine.
Les nombres entiers négatifs déterminent la position à partir du dernier élément de la collection.
Voici un exemple :
Exemple
var $col : Collection
$col:=New collection(10; 20; 30; 40; 50)
$element:=$col.at(0) // 10
$element:=$col.at(1) // 20
$element:=$col.at(-1) // 50
$element:=$col.at(-2) // 40
$element:=$col.at(10) // undefined
.average()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.average( {propertyPath : Text } ) : Real
| Paramètres | Type | Description | |
|---|---|---|---|
| propertyPath | Text | -> | Chemin de propriété d'objet à utiliser pour évaluer les valeurs |
| Résultat | Real, Undefined | <- | où : |
Description
Différent de
Seuls les éléments ayant une valeur numérique sont pris en compte pour le calcul (les autres types d'éléments sont ignorés).
Les positions sont retournées dans un ordre croissant.
Vous pouvez passer tout type d'élément accepté par les collections, y compris une autre collection.
- la collection est vide,
- la collection ne contient pas d'éléments numériques,
- Egal à
Exemple 1
var $col : Collection
$col:=New collection(10;20;"Monday";True;6)
$vAvg:=$col.average() //12
Exemple 2
var $col : Collection
$col:=New collection
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500))
$vAvg:=$col.average("salary") //23500
.clear()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.clear() : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| Résultat | Collection | <- | Collection d'origine dont tous les éléments ont été supprimés |
Description
Vous devez prêter attention aux problèmes de conversion suivants :
Cette fonction modifie la collection d'origine.
Exemple
var $col : Collection
$col:=New collection(1;2;5)
$col.clear()
$vSize:=$col.length //$vSize=0
.combine()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.combine( col2 : Collection {; index : Integer } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| col2 | Collection | -> | Collection à combiner |
| index | Integer | -> | Emplacement où insérer les éléments à combiner (défaut=length+1) |
| Résultat | Collection | <- | Collection d'origine incluant les éléments combinés |
Description
Vous pouvez passer : Vous pouvez passer :
Cette fonction modifie la collection d'origine.
Nom de méthode Exemples :
Exemple 1
- Exemple 2
- Inclus parmi
- Vous souhaitez un tri croissant des première et troisième collections, et une synchronisation pour la deuxième collection :
Exemple
var $c; $fruits : Collection
$c:=New collection(1;2;3;4;5;6)
$fruits:=New collection("Orange";"Banana";"Apple";"Grape")
$c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6]
.concat()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.concat( value : any { ; ...valueN } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| value | any | -> | Valeur(s) à concaténer. Si value est une collection, tous ses éléments sont ajoutés comme de nouveaux éléments à la fin de la collection d'origine. |
| Résultat | Collection | <- | En cas d'incohérence, les règles suivantes sont appliquées : |
Description
Par exemple :
Cette fonction ne modifie pas la collection d'origine.
La collection retournée contient l'élément spécifié par startFrom et tous les éléments suivants jusqu'à l'élément spécifié par end (mais non compris). Si seul le paramètre startFrom est spécifié, la collection retournée contient tous les éléments de startFrom au dernier élément de la collection d'origine.
Exemple
var $c : Collection
$c:=New collection(1;2;3;4;5)
$fruits:=New collection("Orange";"Banana";"Apple";"Grape")
$fruits.push(New object("Intruder";"Tomato"))
$c2:=$c.concat($fruits) //[1,2,3,4,5,"Orange","Banana","Apple","Grape",{"Intruder":"Tomato"}]
$c2:=$c.concat(6;7;8) //[1,2,3,4,5,6,7,8]
.copy()
Historique
| Release | Modifications |
|---|---|
| 18 R3 | Les dates sont stockées sous la forme de date « aaaa-mm-jj » ou des chaînes au format « AAAA-MM-JJTHH: ss.SSSZ: mm » , selon la configuration actuelle « dates à l'intérieur des objets » de la base de données. Cet exemple retourne des personnes embauchées il y a plus de 90 jours : |
| v16 R6 | Ajout |
.copy() : Collection
.copy( option : Integer ) : Collection
.copy( option : Integer ; groupWithCol : Collection ) : Collection
.copy( option : Integer ; groupWithObj : Object ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| option | Integer | -> | Exemple 3 |
| groupWithCol | Collection | -> | Collection partagée à grouper avec la collection résultante |
| groupWithObj | Object | -> | Objet partagé à grouper avec la collection résultante |
| Résultat | Collection | <- | pathStrings contient une formule constituée de 1 à N chemin(s) de propriété(s) et (optionnellement) ordres de tri, séparés par des virgules. |
Description
Lorsque vous utilisez une valeur constante, les règles suivantes doivent être respectées :
Cette fonction ne modifie pas la collection d'origine.
Utilisation de guillemets
| option | Description |
|---|---|
ck resolve pointers | Si la collection d'origine contient des valeurs de type pointeur, par défaut la copie contient également les pointeurs. Si la collection d'origine contient des valeurs de type pointeur, par défaut la copie contient également les pointeurs. Dans ce cas, chaque pointeur contenu dans la collection est évalué lors de la copie et sa valeur déréférencée est utilisée. |
ck shared | Prise en charge des formules Symbole(s) L'évaluation est sensible à la casse et différencie les caractères accentués. |
Par défaut si omis, une évaluation non diacritique est effectuée
Les objets Datastore, dataclass et entity ne sont pas copiables. Collection mise à plat
Exemple 1
Inférieur ou égal à Null
var $sharedObject : Object
var $lastnames;$sharedLastnames : Collection
var $text : Text
$sharedObject:=New shared object
$text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt")
$lastnames:=JSON Parse($text) //$lastnames est un collection standard
$sharedLastnames:=$lastnames.copy(ck shared) //$sharedLastnames est une collection partagée
//Nous pouvons désormais placer $sharedLastnames dans $sharedObject
Use($sharedObject)
$sharedObject.lastnames:=$sharedLastnames
End use
Exemple 2
Null Etant donné qu'ils appartiennent à différents groupes partagés, une combinaison directe pourrait générer une erreur. Etant donné qu'ils appartiennent à différents groupes partagés, une combinaison directe pourrait générer une erreur.
var $sharedColl1;$sharedColl2;$copyColl : Collection
$sharedColl1:=New shared collection(New shared object("lastname";"Smith"))
$sharedColl2:=New shared collection(New shared object("lastname";"Brown"))
//$copyColl appartient au nouveau groupe partagé comme $sharedColl2
$copyColl:=$sharedColl1.copy(ck shared;$sharedColl2)
Use($sharedColl2)
$sharedColl2.combine($copyColl)
End use
Exemple 3
Supérieur ou égal à Paramètre querySettings
var $lastnames;$sharedLastnames : Collection
var $text : Text
$text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt")
$lastnames:=JSON Parse($text) //$lastnames est une collection standard
$sharedLastnames:=$lastnames.copy(ck shared) // copie partagée
Use(Storage)
Storage.lastnames:=$sharedLastnames
End use
Exemple 4
Collection d'origine dont tous les éléments ont été supprimés
Résultat
.count()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.count( { propertyPath : Text } ) : Real
| Paramètres | Type | Description | |
|---|---|---|---|
| propertyPath | Text | -> | Chemin de propriété d'objet à utiliser pour évaluer les valeurs |
| Résultat | Real | <- | La recherche d'une personne nommée "smith OR status='private"' échouera simplement. |
Description
Ajout
Exemple 2 Tri d'une collection de nombres par ordre croissant ou décroissant :
Exemple
var $col : Collection
var $count1;$count2 : Real
$col:=New collection(20;30;Null;40)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500))
$col.push(New object("lastName";"Henry";"salary";12000))
$count1:=$col.count() //$count1=7
$count2:=$col.count("name") //$count2=3
.countValues()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.countValues( value : any {; propertyPath : Text } ) : Real
| Paramètres | Type | Description | |
|---|---|---|---|
| value | any | -> | Valeur à compter |
| propertyPath | Text | -> | Chemin de propriété d'objet à utiliser pour évaluer les valeurs |
| Résultat | Real | <- | Par défaut, copy() retourne une collection standard (non partagée), même si la commande est appliquée à une collection partagée. |
Description
Lorsque vous utilisez des placeholders, le contournement des options de sécurité n'est pas possible :
L'ordre dans lequel les propriétés sont passées détermine la priorité de tri des éléments de la collection.
- une valeur scalaire (texte, numérique, booléen, date),
- une référence d'objet ou de collection.
La callback reçoit les paramètres suivants :
Comparaison
Cette fonction ne modifie pas la collection d'origine.
Exemple 1
var $col : Collection
var $vCount : Integer
$col:=New collection(1;2;5;5;5;3;6;4)
$vCount:=$col.countValues(5) // $vCount=3
Exemple 2
var $col : Collection
var $vCount : Integer
$col:=New collection
$col.push(New object("name";"Smith";"age";5))
$col.push(New object("name";"Wesson";"age";2))
$col.push(New object("name";"Jones";"age";3))
$col.push(New object("name";"Henry";"age";4))
$col.push(New object("name";"Gross";"age";5))
$vCount:=$col.countValues(5;"age") //$vCount=2
Exemple 3
var $numbers; $letters : Collection
var $vCount : Integer
$letters:=New collection("a";"b";"c")
$numbers:=New collection(1;2;$letters;3;4;5)
$vCount:=$numbers.countValues($letters) //$vCount=1
.distinct()
Historique
| Release | Modifications |
|---|---|
| 20 | Vous souhaitez créer une nouvelle collection puis ajouter un élément : |
| v16 R6 | Ajout |
.distinct( {options : Integer} ) : Collection
.distinct( propertyPath : Text {; options : Integer } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| propertyPath | Text | -> | Chemin de l'attribut dont vous souhaitez obtenir les valeurs distinctes |
| options | Integer | -> | ck diacritical, ck count values |
| Résultat | Collection | <- | Commentaire |
Description
Nom de méthode
Cette fonction ne modifie pas la collection d'origine.
La collection retournée est automatiquement triée. Vous souhaitez créer une collection pré-remplie :
Cette recherche semble sécurisée puisque les données non publiques sont filtrées.
Exemple 2
| Constante | Valeur | Commentaire |
|---|---|---|
ck diacritical | 8 | L'évaluation est sensible à la casse et différencie les caractères accentués. Par défaut si omis, une évaluation non diacritique est effectuée |
ck count values | 32 | Renvoie le nombre d'éléments pour chaque valeur distincte. Prise en charge des formules |
Exemples
var $c; $c2; $c3 : Collection
$c:=New collection
$c.push("a";"b";"c";"A";"B";"c";"b";"b")
$c.push(New object("size";1))
$c.push(New object("size";3))
$c.push(New object("size";1))
$c2:=$c.distinct() //$c2=["a","b","c",{"size":1},{"size":3},{"size":1}]
$c2:=$c.distinct(ck diacritical) //$c2=["a","A","b","B","c",{"size":1},{"size":3},{"size":1}]
$c2:=$c.distinct("size") //$c2=[1,3]
$c3:=$c.distinct("size";ck count values) //$c3=[{value:1,count:2},{value:3,count:1}]
.equal()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.equal( collection2 : Collection {; option : Integer } ) : Boolean
| Paramètres | Type | Description | |
|---|---|---|---|
| collection2 | Collection | -> | Collection à comparer |
| option | Integer | -> | La formule reçoit les paramètres suivants : |
| Résultat | Boolean | <- | Cet exemple illustre l'utilisation de l'option ck resolve pointers : |
Description
Ajout
-
Historique La callback reçoit les paramètres suivants : - Par exemple, imaginez une chaîne de recherche du type :
Par défaut, une évaluation non diacritique est effectuée. L'évaluation est sensible à la casse et différencie les caractères accentués.
dans $2 : param Modifications
Exemple
var $c; $c2 : Collection
var $b : Boolean
$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"orange");2;3;4)
$b:=$c.equal($c2) // false
$c:=New collection(New object("1";"a";"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"orange");2;3)
$b:=$c.equal($c2) // false
$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"ORange");2;3)
$b:=$c.equal($c2) // true
$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"ORange");2;3)
$b:=$c.equal($c2;ck diacritical) //false
.every()
Historique
| Release | Modifications |
|---|---|
| 19 R6 | Prise en charge des formules |
| v16 R6 | Ajout |
.every( { startFrom : Integer ; } formula : 4D.Function { ;...param : any } ) : Boolean
.every( { startFrom : Integer ; } methodName : Text { ;...param : any } ) : Boolean
| Paramètres | Type | Description | |
|---|---|---|---|
| startFrom | Integer | -> | Elément à partir duquel débuter l'évaluation |
| formula | 4D.Function | -> | Objet formule |
| methodName | Text | -> | Nom de méthode |
| param | any | -> | Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée. |
| Résultat | Boolean | <- | Paramètres |
Description
Ajout
Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :
- Par défaut, une évaluation non diacritique est effectuée.
- Vous souhaitez trier la collection obtenue :
Exemple 2 Par défaut, les propriétés sont triées pas ordre croissant. Modifications
La callback reçoit les paramètres suivants :
- Nouvelle taille de la collection
- Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
- Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Elle peut définir le(s) paramètre(s) suivant(s) :
- Collection à combiner
- Elément à insérer dans la collection La valeur retournée est la dernière calculée.
Prise en charge des formules
Objet formule Les propriétés suivantes sont prises en charge :
- Prise en charge des formules
- Prise en charge des formules
- Commentaire
Exemple 1
Comparaison
Exemple 2
Cet exemple vérifie que tous les éléments de la collection sont de type réel :
var $c : Collection
var $b : Boolean
var $f : 4D.Function
$f:=Formula(Value type($1.value)=$2
$c:=New collection
$c.push(5;3;1;4;6;2)
$b:=$c.every($f;Is real) //$b=true
$c:=$c.push(New object("name";"Cleveland";"zc";35049))
$c:=$c.push(New object("name";"Blountsville";"zc";35031))
$b:=$c.every($f;Is real) //$b=false
.extract()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.extract( propertyPath : Text { ; option : Integer } ) : Collection
.extract( propertyPath : Text ; targetPath : Text { ;...propertyPathOrTargetPathN : Text } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| propertyPath | Text | -> | Chemin de propriété d'objet dont les valeurs doivent être extraites dans la nouvelle collection |
| targetpath | Text | -> | Chemin ou nom de propriété cible |
| option | Integer | -> | Prise en charge des formules Sommaire |
| Résultat | Collection | <- | $1.stop (booléen, optionnel) : true pour stopper le rétroappel. |
Description
OU
Cette fonction ne modifie pas la collection d'origine.
Exemple
-
Prise en charge des formules
Exemple 2 Exemple
-
Exemple Par exemple, vous pouvez organiser une recherche de la manière suivante :
Exemple 1
var $c : Collection
$c:=New collection
$c.push(New object("name";"Cleveland"))
$c.push(New object("zip";5321))
$c.push(New object("name";"Blountsville"))
$c.push(42)
$c2:=$c.extract("name") // $c2=[Cleveland,Blountsville]
$c2:=$c.extract("name";ck keep null) //$c2=[Cleveland,null,Blountsville,null]
Exemple 2
var $c : Collection
$c:=New collection
$c.push(New object("zc";35060))
$c.push(New object("name";Null;"zc";35049))
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$c2:=$c.extract("name";"City") //$c2=[{City:null},{City:Cleveland},{City:Blountsville},{City:Adger},{City:Clanton},{City:Clanton}]
$c2:=$c.extract("name";"City";"zc";"Zip") //$c2=[{Zip:35060},{City:null,Zip:35049},{City:Cleveland,Zip:35049},{City:Blountsville,Zip:35031},{City:Adger,Zip:35006},{City:Clanton,Zip:35046},{City:Clanton,Zip:35045}]
.fill()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.fill( value : any ) : Collection
.fill( value : any ; startFrom : Integer { ; end : Integer } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| value | any | -> | Valeur de remplissage |
| startFrom | Integer | -> | Indice l'élément de départ (inclus) |
| end | Integer | -> | Indice de fin (non inclus) |
| Résultat | Collection | <- | Vous pouvez modifier ce comportement en utilisant le sélecteur Dates inside objects de la commande SET DATABASE PARAMETER. |
Description
Exemples
Cette fonction modifie la collection d'origine.
- nombres
- Exemple 2
- Exemple 3
En cas d'incohérence, les règles suivantes sont appliquées :
- Exemple 3 nombres
- Prise en charge de querySettings
- La profondeur à laquelle une structure de collection imbriquée doit être mise à plat.
Exemple
var $c : Collection
$c:=New collection(1;2;3;"Lemon";Null;"";4;5)
$c.fill("2") // $c:=[2,2,2,2,2,2,2,2]
$c.fill("Hello";5) // $c=[2,2,2,2,2,Hello,Hello,Hello]
$c.fill(0;1;5) // $c=[2,0,0,0,0,Hello,Hello,Hello]
$c.fill("world";1;-5) //-5+8=3 -> $c=[2,"world","world",0,0,Hello,Hello,Hello]
.filter()
Historique
| Release | Modifications |
|---|---|
| 19 R6 | Prise en charge des formules |
| v16 R6 | Ajout |
.filter( formula : 4D.Function { ; ...param : any } ) : Collection
.filter( methodName : Text { ; ...param : any } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| formula | 4D.Function | -> | Objet formule |
| methodName | Text | -> | Nom de méthode |
| param | any | -> | Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée. |
| Résultat | Collection | <- | Résultat |
Description
Utilisation de placeholders Modifications Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Cette fonction ne modifie pas la collection d'origine.
Vous désignez le code de rétroappel (callback) à exécuter pour filtrer les éléments de la collection en utilisant soit :
- Par défaut, une évaluation non diacritique est effectuée.
- Vous souhaitez trier la collection obtenue :
Exemple 4 Par exemple, si vous exécutez la recherche suivante :
La callback reçoit les paramètres suivants :
- Nouvelle taille de la collection
- Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
- Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Elle peut définir le(s) paramètre(s) suivant(s) :
- Nom de méthode
- Elément à insérer dans la collection La valeur retournée est la dernière calculée.
Lors de la conversion de dates 4D en texte avant de les stocker dans la collection, par défaut le programme prend en compte le fuseau horaire local.
Exemple 1
Vous voulez obtenir la collection des éléments de type texte dont la longueur est inférieure à 6 :
var $col;$colNew : Collection
$col:=New collection("hello";"world";"red horse";66;"tim";"san jose";"miami")
$colNew:=$col.filter(Formula((Value type($1.value)=Is text) && (Length($1.value)<$2)); 6)
//$colNew=["hello","world","tim","miami"]
Exemple 2
Vous voulez filtrer les éléments de la collection en fonction de leur type :
var $c;$c2;$c3 : Collection
var $f : 4D.Function
$f:=Formula(OB Get type($1;"value")=$2)
$c:=New collection(5;3;1;4;6;2)
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c2:=$c.filter($f;Is real) // $c2=[5,3,1,4,6,2]
$c3:=$c.filter($f;Is object)
// $c3=[{name:Cleveland,zc:35049},{name:Blountsville,zc:35031}]
.find()
Historique
| Release | Modifications |
|---|---|
| 19 R6 | Prise en charge des formules |
| v16 R6 | Ajout |
.find( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : any
.find( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : any
| Paramètres | Type | Description | |
|---|---|---|---|
| startFrom | Integer | -> | Indice d'élément à partir duquel débuter la recherche |
| formula | 4D.Function | -> | Objet formule |
| methodName | Text | -> | Nom de méthode |
| param | any | -> | Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée. |
| Résultat | any | <- | Pour cela, nous devons créer une copie partagée de la collection ($sharedLastnames). |
Description
Exemple
Cette fonction ne modifie pas la collection d'origine.
Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :
- Par défaut, une évaluation non diacritique est effectuée.
- Vous souhaitez trier la collection obtenue :
Exemple 2 La callback peut effectuer n'importe quel test, avec ou sans le(s) paramètre(s) et doit retourner true pour chaque élément remplissant le test. Modifications
La callback reçoit les paramètres suivants :
- Nouvelle taille de la collection
- Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
- Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Elle peut définir le(s) paramètre(s) suivant(s) :
- Collection d'origine redimensionnée
- Elément à insérer dans la collection La valeur retournée est la dernière calculée.
Exemple 2 Exemple 2
- Tri avec un chemin de propriété :
- Séparateur à utiliser entre les éléments Vous pouvez utiliser un des opérateurs logiques suivants (le nom ou le symbole peut être passé) :
- Commentaire
Exemple 1
Vous souhaitez obtenir le premier élément de texte dont la taille est inférieure à 5 caractères :
var $col : Collection
$col:=New collection("hello";"world";4;"red horse";"tim";"san jose")
$value:=$col.find(Formula((Value type($1.value)=Is text) && (Length($1.value)<$2)); 5) //$value="tim"
Exemple 2
Vous souhaitez trouver un nom de ville dans une collection :
var $c : Collection
var $c2 : Object
$c:=New collection
$c.push(New object("name"; "Cleveland"; "zc"; 35049))
$c.push(New object("name"; "Blountsville"; "zc"; 35031))
$c.push(New object("name"; "Adger"; "zc"; 35006))
$c.push(New object("name"; "Clanton"; "zc"; 35046))
$c.push(New object("name"; "Clanton"; "zc"; 35045))
$c2:=$c.find(Formula($1.value.name=$2); "Clanton") //$c2={name:Clanton,zc:35046}
.findIndex()
Historique
| Release | Modifications |
|---|---|
| 19 R6 | Prise en charge des formules |
| v16 R6 | Ajout |
.findIndex( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Integer
.findIndex( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Integer
| Paramètres | Type | Description | |
|---|---|---|---|
| startFrom | Integer | -> | Indice d'élément à partir duquel débuter la recherche |
| formula | 4D.Function | -> | Objet formule |
| methodName | Text | -> | Nom de méthode |
| param | any | -> | Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée. |
| Résultat | Integer | <- | Etant donné qu'ils appartiennent à différents groupes partagés, une combinaison directe pourrait générer une erreur. |
Description
Exemple
Cette fonction ne modifie pas la collection d'origine.
Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :
- Par défaut, une évaluation non diacritique est effectuée.
- Collection partagée à grouper avec la collection résultante
Exemple 2 La callback peut effectuer n'importe quel test, avec ou sans le(s) paramètre(s) et doit retourner true pour chaque élément remplissant le test. Modifications
La callback reçoit les paramètres suivants :
- Nouvelle taille de la collection
- Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
- Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Elle peut définir le(s) paramètre(s) suivant(s) :
- Collection d'origine redimensionnée
- Elément à insérer dans la collection La valeur retournée est la dernière calculée.
Les parenthèses sont obligatoires lorsque NOT est utilisé avant une déclaration contenant plusieurs opérateurs. Exemple 2
- Tri avec un chemin de propriété :
- Séparateur à utiliser entre les éléments Vous pouvez utiliser un des opérateurs logiques suivants (le nom ou le symbole peut être passé) :
- Commentaire
Exemple
Vous souhaitez trouver la position du premier nom de ville dans la collection :
var $c : Collection
var $val2;$val3 : Integer
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$val2:=$c.findIndex(Formula($1.value.name=$2);"Clanton") // $val2=3
$val3:=$c.findIndex($val2+1;Formula($1.value.name=$2);"Clanton") //$val3=4
.first()
Historique
| Release | Modifications |
|---|---|
| 20 | Ajout |
.first() : any
| Paramètres | Type | Description | |
|---|---|---|---|
| Résultat | any | <- | $1.stop (booléen, optionnel) : true pour stopper le rétroappel. |
Description
Ajout
Cette fonction ne modifie pas la collection d'origine.
La fonction renvoie Undefined si la collection est vide.
Exemple
var $col; $emptyCol : Collection
var $first : Variant
$col:=New collection(10; 20; 30; "hello"; 50)
$first:=$col.first() // 10
$emptyCol:=New collection() //vide
// $first:=$emptyCol[0] //retournerait une erreur
$first:=$emptyCol.first() // retourne Undefined
.flat()
Historique
| Release | Modifications |
|---|---|
| 20 | Ajout |
.flat( { depth : Integer } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| depth | Integer | -> | La profondeur à laquelle une structure de collection imbriquée doit être mise à plat. Par défaut=1 |
| Résultat | Collection | <- | $1.result (booléen): true si $1.value < $1.value2, false sinon |
Description
Exemple 2
Exemple avec une référence d'objet :
Cette fonction ne modifie pas la collection d'origine.
Exemple
$col:=New collection(1; 2; New collection(3; 4))
$col.flat()
// [1, 2, 3, 4]
$col:=New collection(1; 2; New collection(3; 4; New collection(5; 6)))
$col.flat()
// [1, 2, 3, 4, [5, 6]]
$col:=New collection(1; 2; New collection(3; 4; New collection(5; 6)))
$col.flat(2)
// [1, 2, 3, 4, 5, 6]
$col:=New collection(1; 2; New collection(3; 4; 5; 6; New collection(7; 8; New collection(9; 10))))
$col.flat(MAXLONG)
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
.flatMap()
Historique
| Release | Modifications |
|---|---|
| 20 | Ajout |
.flatMap( formula : 4D.Function { ; ...param : any } ) : Collection
.flatMap( methodName : Text { ; ...param : any } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| formula | 4D.Function | -> | Objet formule |
| methodName | Text | -> | Nom de méthode |
| param | any | -> | Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée. |
| Résultat | Collection | <- | Note : Même si startFrom est négatif, la recherche est effectuée de la droite vers la gauche. |
Description
Exemple Collection d'origine modifiée ne contenant plus les éléments supprimés
Résultat de la valeur de l'accumulateur
Cette fonction ne modifie pas la collection d'origine.
Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :
- Par défaut, une évaluation non diacritique est effectuée.
- Vous souhaitez trier la collection obtenue :
Exemple 2 La callback peut effectuer n'importe quelle opération, avec ou sans le(s) paramètre(s), et doit renvoyer une nouvelle valeur transformée à ajouter à la collection résultante. Modifications
La callback reçoit les paramètres suivants :
- Nouvelle taille de la collection
- Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
- Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Elle peut définir le(s) paramètre(s) suivant(s) :
- Propriété
- Elément à insérer dans la collection La valeur retournée est la dernière calculée.
Exemple 1
var $col ; $result : Collection
$col:=New collection(1; 2; 3; 4)
$result:=$col.map(Formula(New collection($1.value*2)))
// [[2],[4],[6],[8]]
$result:=$col.flatMap(Formula(New collection($1.value*2)))
// [2,4,6,8]
Exemple 2
var $col; $result : Collection
$col:=New collection("Hello how"; ""; "are you ?")
$result:=$col.map(Formula(Split string($1.value; " ")))
// [["Hello", "how"], [], ["are", "you", "?"]]
$result:=$col.flatMap(Formula(Split string($1.value; " ")))
// ["Hello", "how", "are", "you", "?"]
Exemple 3
Vous souhaitez calculer le pourcentage de chaque valeur de la collection par rapport au total :
var $c; $c2 : Collection
var $f : 4D.Function
$c:=New collection(1; 4; 9; 10; 20)
$f:=Formula(New collection($1.value;Round(($1.value/$2)*100; 2)))
$c2:=$c.flatMap($f; $c.sum())
//$c2=[1, 2.27, 4, 9.09,9, 20.45,10, 22.73, 20, 45.45]
.includes()
Historique
| Release | Modifications |
|---|---|
| 20 | Ajout |
.includes( toSearch : expression { ; startFrom : Integer } ) : Boolean
| Paramètres | Type | Description | |
|---|---|---|---|
| toSearch | Expression | -> | Expression à rechercher dans la collection |
| startFrom | Integer | -> | Indice d'élément à partir duquel débuter la recherche |
| Résultat | Boolean | <- | Exemple 1 |
Description
Exemple
Cette fonction ne modifie pas la collection d'origine.
Exemple 1 Vous pouvez passer :
- une valeur scalaire (texte, numérique, booléen, date),
- la valeur null,
- une référence d'objet ou de collection.
La callback reçoit les paramètres suivants :
Exemple 2
- Exemple
- Séparateur à utiliser entre les éléments Note: Même si startFrom est négatif, la collection est toujours recherchée de gauche à droite.
- Commentaire
Exemple
var $col : Collection
var $in : Boolean
var $obj : Object
$obj:=New object("value"; 10)
$col:=New collection(1;2;"Henry";5;3;"Albert";6;4;"Alan";5;$obj)
$in:=$col.includes(3) //True
$in:=$col.includes(5;6) //True
$in:=$col.includes("al@") //True
$in:=$col.includes("Hello") //False
$in:=$col.includes($obj) //True
$in:=$col.includes(New object("value"; 10)) //False
.indexOf()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.indexOf( toSearch : expression { ; startFrom : Integer } ) : Integer
| Paramètres | Type | Description | |
|---|---|---|---|
| toSearch | Expression | -> | Expression à rechercher dans la collection |
| startFrom | Integer | -> | Indice d'élément à partir duquel débuter la recherche |
| Résultat | Integer | <- | Indice de la première occurrence de toSearch dans la collection, -1 si non trouvée |
Description
Exemple
Cette fonction ne modifie pas la collection d'origine.
Exemple 1 Vous pouvez passer :
- une valeur scalaire (texte, numérique, booléen, date),
- la valeur null,
- une référence d'objet ou de collection.
La callback reçoit les paramètres suivants :
Exemple 2
- Tri avec un chemin de propriété :
- Séparateur à utiliser entre les éléments Vous pouvez utiliser un des opérateurs logiques suivants (le nom ou le symbole peut être passé) :
- Commentaire
Exemple
var $col : Collection
var $i : Integer
$col:=New collection(1;2;"Henry";5;3;"Albert";6;4;"Alan";5)
$i:=$col.indexOf(3) //$i=4
$i:=$col.indexOf(5;5) //$i=9
$i:=$col.indexOf("al@") //$i=5
$i:=$col.indexOf("Hello") //$i=-1
.indices()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.indices( queryString : Text { ; ...value : any } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| queryString | Text | -> | Critère(s) de recherche |
| value | any | -> | Valeur(s) à comparer lors de l'utilisation de paramètre(s) dans la chaîne |
| Résultat | Collection | <- | Indice(s) d'élément(s) de la collection répondant aux critères de queryString |
Description
Exemple 3 Les positions sont retournées dans un ordre croissant.
Cette fonction ne modifie pas la collection d'origine.
Le paramètre queryString doit respecter la syntaxe suivante :
propertyPath comparator value {logicalOperator propertyPath comparator value}
Les éléments sont triés par ordre décroissant
Exemple
var $c; $icol : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$icol:=$c.indices("name = :1";"Cleveland") // $icol=[0]
$icol:=$c.indices("zc > 35040") // $icol=[0,3,4]
.insert()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.insert( index : Integer ; element : any ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| index | Integer | -> | Où insérer l'élément |
| element | any | -> | Elément à insérer dans la collection |
| Résultat | Collection | <- | Résultat |
Description
Nom de méthode
Cette fonction modifie la collection d'origine.
Cet exemple retourne des personnes dont l'âge n'est pas connu (propriété définie sur null ou indéfinie) :
Exemple 1
- Exemple 2
- Exemple 3
- Si la valeur recalculée est négative, index prend la valeur 0.
Vous pouvez passer tout type d'élément accepté par les collections, y compris une autre collection.
Exemple
var $col : Collection
$col:=New collection("a";"b";"c";"d") //$col=["a","b","c","d"]
$col.insert(2;"X") //$col=["a","b","X","c","d"]
$col.insert(-2;"Y") //$col=["a","b","X","Y","c","d"]
$col.insert(-10;"Hi") //$col=["Hi","a","b","X","Y","c","d"]
.join()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.join( delimiter : Text { ; option : Integer } ) : Text
| Paramètres | Type | Description | |
|---|---|---|---|
| delimiter | Text | -> | Séparateur à utiliser entre les éléments |
| option | Integer | -> | collection partagée |
| Résultat | Text | <- | Exemple 3 |
Description
La fonction .join() convertit tous les éléments de la collection en chaînes et les concatène en utilisant la chaîne delimiter spécifiée comme séparateur.
Cette fonction ne modifie pas la collection d'origine.
Par défaut, les éléments null ou vides de la collection sont inclus dans la chaîne résultante. Exemple avec une référence de collection :
Exemple
var $c : Collection
var $t1;$t2 : Text
$c:=New collection(1;2;3;"Paris";Null;"";4;5)
$t1:=$c.join("|") //1|2|3|Paris|null||4|5
$t2:=$c.join("|";ck ignore null or empty) //1|2|3|Paris|4|5
.last()
Historique
| Release | Modifications |
|---|---|
| 20 | Ajout |
.last() : any
| Paramètres | Type | Description | |
|---|---|---|---|
| Résultat | any | <- | $1.result (booléen) : true si $1.value < $1.value2, false sinon. |
Description
Ajout
Cette fonction ne modifie pas la collection d'origine.
La fonction renvoie Undefined si la collection est vide.
Exemple
Nom de méthode
.lastIndexOf()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.lastIndexOf( toSearch : expression { ; startFrom : Integer } ) : Integer
| Paramètres | Type | Description | |
|---|---|---|---|
| toSearch | Expression | -> | Elément à chercher dans la collection |
| startFrom | Integer | -> | Indice d'élément à partir duquel débuter la recherche |
| Résultat | Integer | <- | Commentaire |
Description
Exemple
Cette fonction ne modifie pas la collection d'origine.
Exemple 1 Vous pouvez passer :
- une valeur scalaire (texte, numérique, booléen, date),
- la valeur null,
- une référence d'objet ou de collection.
la collection est vide,
Exemple 2
- Exemple 3
- Exemple 3 Si la position calculée est négative, -1 est retourné (la collection n'est pas évaluée). Exemple 3
- Modifications
Exemple
heure (stockée en nombre de milliseconds - réel)
.length
Historique
| Release | Modifications |
|---|---|
| v16 R5 | Ajout |
.length : Integer
Description
Exemple 2
Avec la méthode Flatten suivante : Elle est automatiquement mise à jour en cas d'ajout ou de suppression d'éléments. Exemple 2
Exemple
Nom de méthode
.map()
Historique
| Release | Modifications |
|---|---|
| 19 R6 | Prise en charge des formules |
| v16 R6 | Ajout |
.map( formula : 4D.Function { ; ...param : any } ) : Collection
.map( methodName : Text { ; ...param : any } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| formula | 4D.Function | -> | Objet formule |
| methodName | Text | -> | Nom de méthode |
| param | any | -> | Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée. |
| Résultat | Collection | <- | toSearch doit correspondre exactement à l'élément à trouver (les mêmes règles que l'opérateur d'égalité du type de données sont appliquées). |
Description
Exemple Collection d'origine modifiée ne contenant plus les éléments supprimés Où insérer l'élément
Cette fonction ne modifie pas la collection d'origine.
Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :
- Par défaut, une évaluation non diacritique est effectuée.
- Vous souhaitez trier la collection obtenue :
Exemple 2 La callback peut effectuer n'importe quelle opération, avec ou sans le(s) paramètre(s), et doit renvoyer une nouvelle valeur transformée à ajouter à la collection résultante. Modifications
La callback reçoit les paramètres suivants :
- Nouvelle taille de la collection
- Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
- Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Elle peut définir le(s) paramètre(s) suivant(s) :
- Propriété
- Elément à insérer dans la collection La valeur retournée est la dernière calculée.
Exemple
var $c; $c2 : Collection
$c:=New collection(1; 4; 9; 10; 20)
$c2:=$c.map(Formula(Round(($1.value/$2)*100; 2)); $c.sum())
//$c2=[2.27,9.09,20.45,22.73,45.45]
.max()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.max( { propertyPath : Text } ) : any
| Paramètres | Type | Description | |
|---|---|---|---|
| propertyPath | Text | -> | Chemin de propriété d'objet à utiliser pour évaluer les valeurs |
| Résultat | any | <- | Cet exemple renvoie les personnes dont le nom contient "in" : |
Description
Exemple 3
Cette fonction ne modifie pas la collection d'origine.
Ajout
Modifications
Modifications
Exemple
var $col : Collection
$col:=New collection(200;150;55)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Alabama";"salary";10500))
$max:=$col.max() //{name:Alabama,salary:10500}
$maxSal:=$col.max("salary") //50000
$maxName:=$col.max("name") //"Wesson"
.min()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.min( { propertyPath : Text } ) : any
| Paramètres | Type | Description | |
|---|---|---|---|
| propertyPath | Text | -> | Chemin de propriété d'objet à utiliser pour évaluer les valeurs |
| Résultat | any | <- | formula (syntaxe recommandée), un objet Formula qui peut encapsuler toute expression exécutable, y compris des fonctions et des méthodes projet; |
Description
Ajout
Cette fonction ne modifie pas la collection d'origine.
Ajout
Modifications
Modifications
Exemple
var $col : Collection
$col:=New collection(200;150;55)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Alabama";"salary";10500))
$min:=$col.min() //55
$minSal:=$col.min("salary") //10000
$minName:=$col.min("name") //"Alabama"
.multiSort()
Historique
| Release | Modifications |
|---|---|
| 20 R3 | Ajout |
.multiSort() : Collection
.multiSort( colsToSort : Collection ) : Collection
.multiSort( formula : 4D.Function ; colsToSort : Collection ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| formula | 4D.Function | -> | Objet formule |
| colsToSort | Collection | -> | Exemple 2 |
| Résultat | Collection | <- | Optionnellement, vous pouvez passer des paramètres à formula ou methodName en utilisant le(s) paramètre(s) param. |
Description
Exemple 2
Exemple
Exemple
- Null
- booléens
- chaînes
- nombres
- objets
- collections
- dates
booléens
Valeur Les valeurs sont exprimées sous forme de paires propriété / valeur, où propriété est le nom du placeholder inséré pour une valeur dans queryString (":placeholder") et où valeur correspond à la valeur à comparer. Valeur à compter
Cela permet l'utilisation de variables ou d'expressions dans les arguments de recherche.
Si vous souhaitez trier les collections dans un ordre autre que croissant, vous devez fournir formula (objet Formula) qui définit l'ordre de tri. Nom de méthode Contrairement aux collections standard (non partagées), les collections partagées ne prennent pas en charge les images, les pointeurs et les objets ou collections non partagés.
Sinon, vous pouvez ajouter ou modifier des éléments ultérieurement par affectation.
- $1 (object), où :
- La nouvelle collection
- Collection d'origine triée
- $2...$N (tout type) : paramètres supplémentaires (extraParam)
Elle est automatiquement mise à jour en cas d'ajout ou de suppression d'éléments.
Exemple
Exemple 1
Élément à partir duquel la suppression peut commencer
Exemple 1
Résultat
var $col;$col2;$col3 : Collection
$col:=["A"; "C"; "B"]
$col2:=[1; 2; 3]
$col3:=[["Jim"; "Philip"; "Maria"]; ["blue"; "green"]; ["11"; 22; "33"]]
$col.multiSort([$col2; $col3])
//$col=["A","B","C"]
//$col2=[1,3,2]
//$col3[0]=["Jim","Philip","Maria"]
//$col3[1]=["11",22,"33"]
//$col3[2]=["blue","green"]
Exemple 2
= Les valeurs Null ne sont pas retournées.
var $city : Collection
var $country : Collection
var $continent : Collection
$city:=["Paris"; "Lyon"; "Rabat"; "Eching"; "San Diego"]
$country:=["France"; "France"; "Morocco"; "Germany"; "US"]
$continent:=["Europe"; "Europe"; "Africa"; "Europe"; "America"]
$continent.multiSort([$country; {collection: $city; order: ck ascending}])
//$continent=["Africa","America","Europe","Europe","Europe"]
//$country=["Morocco","US","France","France","Germany"]
//$city=["Rabat","San Diego","Lyon","Paris","Eching"]
Exemple 3
Si la valeur calculée est négative, startFrom prend la valeur 0.
var $name : Collection
var $address : Collection
$name:=[]
$name.push({firstname: "John"; lastname: "Smith"})
$name.push({firstname: "Alain"; lastname: "Martin"})
$name.push({firstname: "Jane"; lastname: "Doe"})
$name.push({firstname: "John"; lastname: "Doe"})
$address:=[]
$address.push({city: "Paris"; country: "France"})
$address.push({city: "Lyon"; country: "France"})
$address.push({city: "Eching"; country: "Germany"})
$address.push({city: "Berlin"; country: "Germany"})
$name.multiSort(Formula($1.value.firstname<$1.value2.firstname); [$address])
//"Alain Martin","Jane Doe","John Smith","John Doe"
//"Lyon France","Eching Germany","Paris France","Berlin Germany"
.orderBy()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.orderBy( ) : Collection
.orderBy( pathStrings : Text ) : Collection
.orderBy( pathObjects : Collection ) : Collection
.orderBy( ascOrDesc : Integer ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| pathStrings | Text | -> | Chemin(s) de propriété(s) à utiliser pour trier la collection |
| pathObjects | Collection | -> | Collection d'objets critère |
| ascOrDesc | Integer | -> | Exemple 1 |
| Résultat | Collection | <- | Les éléments avec des valeurs null ne sont pas égaux aux éléments Undefined. |
Description
Exemple
Prise en charge de ck count values Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Cette fonction ne modifie pas la collection d'origine.
Si vous ne passez aucun paramètre, la fonction classe les valeurs scalaires de la collection dans un ordre croissant (les autres types d'éléments tels que les objets ou les collections sont renvoyés avec un ordre interne). Exemple 1
Vous pouvez également passer des critères afin de configurer le tri des éléments de la collection. Trois syntaxes sont prises en charge pour ce paramètre :
-
Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée. Null Résultat de la valeur de l'accumulateur L'ordre dans lequel les propriétés sont passées détermine la priorité de tri des éléments de la collection. Par défaut, les propriétés sont triées pas ordre croissant. Vous pouvez définir l'ordre de tri de chaque propriété dans la formule de critère, séparée du chemin de propriété par un simple espace : passez "asc" pour trier par ordre croissant ou "desc" pour un ordre décroissant.
-
pathObjects : Collection. Résultat Par défaut, les propriétés sont triées par ordre croissant ("descending" est faux). Chaque élément de la collection contient un objet structuré de la manière suivante :
{
"propertyPath": string,
"descending": boolean
}
-
ascOrDesc : Integer. Résultat
Constante Type Valeur Commentaire ck ascending Integer 0 Les éléments sont triés par ordre croissant (défaut) ck descending Integer 1 Les éléments sont triés par ordre décroissant Cette syntaxe trie uniquement les valeurs scalaires de la collection (les autres types d'éléments comme les objets ou les collections sont retournés non triés).
Si la collection contient des éléments de différents types, ils sont d'abord groupés par type et triés par la suite. Les types sont renvoyés dans l'ordre suivant :
- Null
- booléens
- chaînes
- nombres
- objets
- collections
- dates
Exemple 1
Tri d'une collection de nombres par ordre croissant ou décroissant :
var $c; $c2; $c3 : Collection
$c:=New collection
For($vCounter;1;10)
$c.push(Random)
End for
$c2:=$c.orderBy(ck ascending)
$c3:=$c.orderBy(ck descending)
Exemple 2
Tri d'une collection d'objets basé sur une formule de texte avec noms de propriétés :
var $c; $c2 : Collection
$c:=New collection
For($vCounter;1;10)
$c.push(New object("id";$vCounter;"value";Random))
End for
$c2:=$c.orderBy("value desc")
$c2:=$c.orderBy("value desc, id")
$c2:=$c.orderBy("value desc, id asc")
Tri d'une collection d'objets sur des propriétés :
var $c; $c2 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"phones";New object("p1";"01";"p2";"02")))
$c.push(New object("name";"Blountsville";"phones";New object("p1";"00";"p2";"03")))
$c2:=$c.orderBy("phones.p1 asc")
Exemple 3
Tri d'une collection d'objets via une collection d'objets critères :
var $crit; $c; $c2 : COllection
$crit:=New collection
$c:=New collection
For($vCounter;1;10)
$c.push(New object("id";$vCounter;"value";Random))
End for
$crit.push(New object("propertyPath";"value";"descending";True))
$crit.push(New object("propertyPath";"id";"descending";False))
$c2:=$c.orderBy($crit)
Tri avec un chemin de propriété :
var $crit; $c; $c2 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"phones";New object("p1";"01";"p2";"02")))
$c.push(New object("name";"Blountsville";"phones";New object("p1";"00";"p2";"03")))
$crit:=New collection(New object("propertyPath";"phones.p2";"descending";True))
$c2:=$c.orderBy($crit)
.orderByMethod()
Historique
| Release | Modifications |
|---|---|
| 19 R6 | Prise en charge des formules |
| v16 R6 | Ajout |
.orderByMethod( formula : 4D.Function { ; ...extraParam : expression } ) : Collection
.orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| formula | 4D.Function | -> | Objet formule |
| methodName | Text | -> | Nom de méthode |
| extraParam | any | -> | Paramètre(s) à passer |
| Résultat | Collection | <- | |startFrom |Integer|->|Index pour démarrer le test| |formula|4D.Function|->|Objet formule| |methodName|Text|->|Nom d'une méthode| |param |any |->|Paramètre(s) à passer| |Resultat|Boolean|<-|Vrai si au moins un élément a réussi le test| |
Description
Exemple
Prise en charge de ck count values Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Cette fonction ne modifie pas la collection d'origine.
Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :
-
Par défaut, une évaluation non diacritique est effectuée.
-
Vous souhaitez trier la collection obtenue :
Collection contenant des éléments ajoutés Chaque élément de la collection contient un objet structuré de la manière suivante :
La callback reçoit les paramètres suivants :
- $1 (object), où :
- La nouvelle collection
- Collection d'origine triée
- $2...$N (tout type) : paramètres supplémentaires (extraParam)
Si vous avez utilisé une méthode, elle doit définir le paramètre suivant :
- Vous pouvez également passer des critères afin de configurer le tri des éléments de la collection.
Exemple 1
Vous souhaitez trier une collection de chaînes contenant des nombres par valeur plutôt que par ordre alphabétique :
Conjonction
Exemple 2
Vous souhaitez trier une collection de chaînes de caractères en fonction de leur longueur :
var $fruits; $c2 : Collection
$fruits:=New collection("Orange";"Apple";"Grape";"pear";"Banana";"fig";"Blackberry";"Passion fruit")
$c2:=$fruits.orderByMethod(Formula(Length(String($1.value))>Length(String($1.value2))))
//$c2=[Passion fruit,Blackberry,Orange,Banana,Apple,Grape,pear,fig]
Exemple 3
Vous souhaitez trier une collection par code de caractère ou par langage :
var $strings1; $strings2 : Collection
$strings1:=New collection("Alpha";"Charlie";"alpha";"bravo";"Bravo";"charlie")
//using the character code:
$strings2:=$strings1.orderByMethod(Formula(sortCollection);sk char codes)
// result : ["Alpha","Bravo","Charlie","alpha","bravo","charlie"]
//using the language:
$strings2:=$strings1.orderByMethod(Formula(sortCollection);sk strict)
// result : ["alpha","Alpha","bravo","Bravo","charlie","Charlie"]
booléens
#DECLARE ($toSort : Object ; $option : Integer)
$toSort.result:=(Compare strings($toSort.value;$toSort.value2;$option2)<0)
.pop()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.pop() : any
| Paramètres | Type | Description | |
|---|---|---|---|
| Résultat | any | <- | $1.result (booléen) : true si $1.value < $1.value2, false sinon. |
Description
Exemple 1
Cette fonction modifie la collection d'origine.
Modifications
Exemple
Recherche de valeurs null
Chemin ou nom de propriété cible
.push()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.push( element : any { ;...elementN } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| element | any | -> | Élément(s) à ajouter à la collection |
| Résultat | Collection | <- | $1.stop (booléen, optionnel) : true pour stopper le rétroappel de la méthode. |
Description
Nom de méthode
Cette fonction modifie la collection d'origine.
Exemple 1
var $col : Collection
$col:=New collection(1;2) //$col=[1,2]
$col.push(3) //$col=[1,2,3]
$col.push(6;New object("firstname";"John";"lastname";"Smith"))
//$col=[1,2,3,6,{firstname:John,lastname:Smith}
Exemple 2
Vous souhaitez trier la collection obtenue :
var $col; $sortedCol : Collection
$col:=New collection(5;3;9) //$col=[5,3,9]
$sortedCol:=$col.push(7;50).sort()
//$col=[5,3,9,7,50]
//$sortedCol=[3,5,7,9,50]
.query()
Historique
| Release | Modifications |
|---|---|
| 20 R6 | Par défaut=1 |
| 17 R5 | Prise en charge de querySettings |
| v16 R6 | Ajout |
.query( queryString : Text ) : Collection
.query( queryString : Text ; ...value : any ) : Collection
.query( queryString : Text ; querySettings : Object ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| queryString | Text | -> | Critère(s) de recherche |
| value | any | -> | Valeur(s) à comparer lors de l'utilisation de paramètre(s) dans la chaîne |
| querySettings | Object | -> | Options de requête : paramètres, attributs |
| Résultat | Collection | <- | Null |
Description
Exemple Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Modifications
Cette fonction ne modifie pas la collection d'origine.
paramètre queryString
Le paramètre queryString doit respecter la syntaxe suivante :
propertyPath comparator value {logicalOperator propertyPath comparator value}
où :
-
Modifications Ce paramètre peut contenir un nom simple (par exemple "pays") ou un chemin d'attribut valide (par exemple "pays.nom"). Dans le cas d'un chemin d'accès à un attribut dont le type est
Collection, la notation[]est utilisée pour traiter toutes les occurrences (par exemplechildren[].age). -
Premier élément de collection Les symboles suivants sont pris en charge :
| Comparaison | Symbole(s) | Commentaire |
|---|---|---|
| Egal à | =, == | Retourne les données correspondantes, prend en charge le joker de recherche (@), ne tient pas compte de la casse et est non diacritique. |
| ===, IS | Retourne les données correspondantes, considère le @ comme un caractère standard, ne tient pas compte de la casse et est non diacritique | |
| Différent de | #, != | Prend en charge le joker de recherche (@). Équivalent à "Condition Not appliquée à une assertion"). |
| !==, IS NOT | Considère le @ comme un caractère standard | |
| Condition Not appliquée à une assertion | NOT | Les parenthèses sont obligatoires lorsque NOT est utilisé avant une déclaration contenant plusieurs opérateurs. Équivalent à "Non égal à" ). |
| Inférieur à | < | |
| Supérieur à | > | |
| Inférieur ou égal à | <= | |
| Supérieur ou égal à | > = | |
| Inclus parmi | IN | Retourne les données égales à au moins une des valeurs d'une collection ou d'un ensemble de valeurs, prend en charge le joker de recherche (@) |
-
Ajout La callback reçoit les paramètres suivants : Lorsque vous utilisez une valeur constante, les règles suivantes doivent être respectées :
- Les valeurs constantes de type texte peuvent être passées avec ou sans guillemets (voir Utilisation des guillemets ci-dessous). Pour rechercher une chaîne dans une chaîne (recherche de type "contient"), utilisez le symbole joker (@) dans valeur pour isoler la chaîne à chercher, comme dans cet exemple : "@Smith@". Les mots-clés suivants sont interdits pour des constantes de type texte : true, false.
- Valeurs constantes de type booléen: true or false (sensible à la casse).
- Valeurs constantes de type numérique : les décimales doivent être séparées par un '.'
- Constantes de type date : "YYYY-MM-DD" format
- Constantes null : en utilisant le mot-clé "null", la recherche trouvera les propriétés ayant la valeur null et undefined.
- dans le cas d'une recherche avec un comparateur IN, value doit être une collection ou des valeurs correspondant au type de l'attribut path entre [ ] séparés par des virgules (pour les chaînes, les caractères
"doivent être échappés avec\).
-
logicalOperator : utilisé pour relier des conditions multiples dans la recherche (optionnel). Vous pouvez utiliser un des opérateurs logiques suivants (le nom ou le symbole peut être passé) :
| Conjonction | Symbole(s) |
|---|---|
| AND | &, &&, and |
| OU | |,||, or |
Utilisation de guillemets
Lorsque vous utilisez des guillemets dans des recherches, vous devez utiliser des guillemets simples ' ' à l'intérieur de la requête et des guillemets doubles " " pour encadrer la requête, sinon une erreur est renvoyée. Par exemple :
"employee.name = 'smith' AND employee.firstname = 'john'"
Les guillemets simples (') ne sont pas pris en charge dans les valeurs recherchées car ils casseraient la chaîne de recherche. Par exemple, "comp.name = 'John's pizza' " génèrera une erreur. Si vous devez rechercher des valeurs contenant des guillemets simples, il est nécessaire d'utiliser des placeholders (voir ci-dessous).
Utilisation de parenthèses
Vous pouvez utiliser des parenthèses dans la recherche afin de prioriser les calculs. Par exemple, vous pouvez organiser une recherche de la manière suivante :
"(employee.age >= 30 OR employee.age <= 65) AND (employee.salary <= 10000 OR employee.status = 'Manager')"
Utilisation de placeholders
Exemple Un placeholder est un paramètre que vous insérez dans des chaines de recherche et qui est remplacé par une autre valeur au moment où la chaîne de recherche est évaluée. La valeur des placeholders est évaluée une seule fois, au début de la requête ; elle n'est pas évaluée pour chaque élément.
Résultat
- Résultat dans queryString et leurs valeurs correspondantes sont fournies par la séquence de paramètres value. dans queryString et leurs valeurs correspondantes sont fournies par la séquence de paramètres value.
Voici un exemple :
$c:=$myCol.query(":1=:2";"city";"Chicago")
- La fonction renvoie la chaîne résultante.
Voici un exemple :
$o.attributes:={att:"city"}
$o.parameters:={name:"Chicago")
$c:=$myCol.query(":att=:name";$o)
Vous pouvez combiner tous les types d'arguments dans queryString. Vous pouvez combiner tous les types d'arguments dans queryString.
- des valeurs directes (pas de placeholders)
- des placeholders indexés et/ou nommés.
L'utilisation de placeholders dans les recherches est recommandée pour les raisons suivantes :
- Cela empêche l'injection de code malveillant : si vous utilisez dans la chaîne de recherche des variables dont le contenu provient directement de la saisie de l'utilisateur, celui-ci pourrait modifier les conditions de recherche en saisissant des arguments de recherche supplémentaires. Par exemple, imaginez une chaîne de recherche du type :
$vquery:="status = 'public' & name = "+myname //l'utilisateur saisit son nom
$result:=$col.query($vquery)
Cette recherche semble sécurisée puisque les données non publiques sont filtrées. Cependant, si l'utilisateur saisit dans la zone myname une chaîne du type "smith OR status='private', la chaîne de recherche sera modifiée à l'étape de l'interprétation et pourra retourner des données privées.
Lorsque vous utilisez des placeholders, le contournement des options de sécurité n'est pas possible :
$result:=$col.query("status='public' & name=:1";myname)
Dans ce cas, si l'utilisateur saisit smith OR status='private' dans la zone myname, cela ne sera pas interprété dans la chaîne de recherche, mais uniquement passé en tant que valeur. La recherche d'une personne nommée "smith OR status='private"' échouera simplement.
-
Objet partagé à grouper avec la collection résultante
-
Cela permet l'utilisation de variables ou d'expressions dans les arguments de recherche. Exemples :
$result:=$col.query("address.city = :1 & name =:2";$city;$myVar+"@")
$result2:=$col.query("company.name = :1";"John's Pizzas")
Exemple objet partagé
Recherche de valeurs null
Lorsque vous recherchez les valeurs null, vous ne pouvez pas utiliser la syntaxe placeholder car le moteur de recherche considère la valeur null comme une valeur de comparaison invalide. Par exemple, si vous exécutez la recherche suivante :
Elément à partir duquel débuter l'évaluation
Vous n'obtiendrez pas le résultat souhaité car la valeur null sera évaluée par 4D comme une erreur résultant de l'évaluation du paramètre (pouvant être, par exemple, un attribut provenant d'une autre recherche). Pour ce type de recherche, vous devez utiliser la syntaxe de recherche directe :
Si vous passez une heure, elle est stockée sous la forme d'un nombre de millisecondes (Réel).
Lorsque vous utilisez des guillemets dans des recherches, vous devez utiliser des guillemets simples ' ' à l'intérieur de la requête et des guillemets doubles " " pour encadrer la requête, sinon une erreur est renvoyée.
Par exemple, "comp.name = 'John's pizza' " génèrera une erreur. Modifications
Optionnellement, vous pouvez passer le numéro de l'élément auquel démarrer la recherche dans startFrom.
| Comparaison | Symbole(s) |
|---|---|
| Egal à | =, == |
| Différent de | #, != |
Exemple La collection originale sera triée par ordre croissant et toutes les collections colsToSort seront triées de manière synchronisée.
Nouvelle option *ck shared*.
$1.stop (booléen, optionnel) : true pour stopper le rétroappel de la méthode.
Indice de fin (non inclus)
Paramètre querySettings
Exemple 1 Les propriétés suivantes sont prises en charge :
| Propriété | Type | Description |
|---|---|---|
| parameters | Object | Exemple 1 Vous pouvez passer un nombre illimité de collections. Vous pouvez combiner, dans une même recherche, des placeholders indexés (valeurs passées directement dans les paramètres value) et les valeurs des placeholders nommés. |
| attributes | Object | Une comparaison récursive de collections peut prendre beaucoup de temps si la collection est de grande taille et comporte de nombreux niveaux. Modifications Résultat L'utilisation d'une collection permet de rechercher des attributs dont les noms ne sont pas compatibles avec la notation à points, par exemple ["4Dv17.1", "en/fr"] |
Utiliser ce paramètre est obligatoire si vous voulez interroger une collection en utilisant une référence de collection ou une référence d'objet.
Exemple 1
var $c; $c2; $c3 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$c2:=$c.query("name = :1";"Cleveland") //$c2=[{name:Cleveland,zc:35049}]
$c3:=$c.query("zc > 35040") //$c3=[{name:Cleveland,zc:35049},{name:Clanton,zc:35046},{name:Clanton,zc:35045}]
Exemple 2
var $c : Collection
$c:=New collection
$c.push(New object("name";"Smith";"dateHired";!22-05-2002!;"age";45))
$c.push(New object("name";"Wesson";"dateHired";!30-11-2017!))
$c.push(New object("name";"Winch";"dateHired";!16-05-2018!;"age";36))
$c.push(New object("name";"Sterling";"dateHired";!10-5-1999!;"age";Null))
$c.push(New object("name";"Mark";"dateHired";!01-01-2002!))
Cet exemple renvoie les personnes dont le nom contient "in" :
$col:=$c.query("name = :1";"@in@")
//$col=[{name:Winch...},{name:Sterling...}]
Cet exemple retourne des personnes dont le nom ne commence pas par une chaine dont la valeur provient d'une variable (saisie par l'utilisateur, par exemple) :
$col:=$c.query("name # :1";$aString+"@")
//si $astring="W"
//$col=[{name:Smith...},{name:Sterling...},{name:Mark...}]
Cet exemple retourne des personnes dont l'âge n'est pas connu (propriété définie sur null ou indéfinie) :
$col:=$c.query("age=null") //placeholders non permis avec "null"
//$col=[{name:Wesson...},{name:Sterling...},{name:Mark...}]
Cet exemple retourne des personnes embauchées il y a plus de 90 jours :
$col:=$c.query("dateHired :1";(Current date-90))
//$col=[{name:Smith...},{name:Sterling...},{name:Mark...}] si la date du jour est 01/10/2018
Exemple 3
Recherche avec des dates :
$entitySelection:=ds.Employee.query("birthDate > :1";"1970-01-01")
$entitySelection:=ds.Employee.query("birthDate <= :1";Current date-10950)
Vous trouverez d'autres exemples de requêtes dans la page dataClass.query(). Notez cependant que les formules ne sont pas prises en charge par la fonction collection.query(), ni dans le paramètre queryString ni en tant que paramètre objet formula.
.reduce()
Historique
| Release | Modifications |
|---|---|
| 19 R6 | Prise en charge des formules |
| v16 R6 | Ajout |
.reduce( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any
.reduce( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any
| Paramètres | Type | Description | |
|---|---|---|---|
| formula | 4D.Function | -> | Objet formule |
| methodName | Text | -> | Nom de méthode |
| initValue | any | -> | Valeur à utiliser comme premier argument du premier appel de formula ou methodName* |
| param | Expression | -> | Paramètre(s) à passer |
| Résultat | any | <- | Résultat de la valeur de l'accumulateur |
Description
La fonction .reduce() applique la callback formula ou methodName à un accumulateur et à chaque élément de la collection (de gauche à droite) pour la réduire à une valeur unique.
Cette fonction ne modifie pas la collection d'origine.
Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :
- Par défaut, une évaluation non diacritique est effectuée.
- Vous souhaitez trier la collection obtenue :
La callback prend chaque élément de la collection et effectue toutes les opérations souhaitées pour accumuler le résultat dans $1.accumulator, qui est retourné dans $1.value.
Vous pouvez passer la valeur pour initialiser l'accumulateur dans initValue. Si elle est omise, $1.accumulator commence par Undefined.
La callback reçoit les paramètres suivants :
- dans $1.value : valeur d'élément à évaluer
- dans $2: param
- dans $N...: paramN...
Elle peut définir le(s) paramètre(s) suivant(s) :
- $1.accumulator: valeur à modifier par la fonction et qui est initialisée par initValue.
- $1.stop (booléen, optionnel) : true pour stopper le rétroappel de la méthode. La valeur retournée est la dernière calculée.
Exemple 1
var $c : Collection
$c:=New collection(5;3;5;1;3;4;4;6;2;2)
$r:=$c.reduce(Formula($1.accumulator*=$1.value); 1) //retourne 86400
Exemple 2
Cet exemple permet de réduire plusieurs éléments de collections en une seule :
var $c;$r : Collection
$c:=New collection
$c.push(New collection(0;1))
$c.push(New collection(2;3))
$c.push(New collection(4;5))
$c.push(New collection(6;7))
$r:=$c.reduce(Formula(Flatten)) //$r=[0,1,2,3,4,5,6,7]
Avec la méthode Flatten suivante :
If($1.accumulator=Null)
$1.accumulator:=New collection
End if
$1.accumulator.combine($1.value)
.reduceRight()
Historique
| Release | Modifications |
|---|---|
| 20 | Ajout |
.reduceRight( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any
.reduceRight( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any
| Paramètres | Type | Description | |
|---|---|---|---|
| formula | 4D.Function | -> | Objet formule |
| methodName | Text | -> | Nom de méthode |
| initValue | any | -> | Valeur à utiliser comme premier argument du premier appel de formula ou methodName* |
| param | Expression | -> | Paramètre(s) à passer |
| Résultat | any | <- | Résultat de la valeur de l'accumulateur |
Description
La fonction .reduceRight() applique la callback formula ou methodName à un accumulateur et à chaque élément de la collection (de droite à gauche) pour la réduire à une valeur unique.
Cette fonction ne modifie pas la collection d'origine.
Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :
- Par défaut, une évaluation non diacritique est effectuée.
- Vous souhaitez trier la collection obtenue :
La callback prend chaque élément de la collection et effectue toutes les opérations souhaitées pour accumuler le résultat dans $1.accumulator, qui est retourné dans $1.value.
Vous pouvez passer la valeur pour initialiser l'accumulateur dans initValue. Si elle est omise, $1.accumulator commence par Undefined.
La callback reçoit les paramètres suivants :
- dans $1.value : valeur d'élément à évaluer
- dans $2: param
- dans $N...: paramN...
Elle peut définir le(s) paramètre(s) suivant(s) :
- $1.accumulator: valeur à modifier par la fonction et qui est initialisée par initValue.
- $1.stop (booléen, optionnel) : true pour stopper le rétroappel de la méthode. La valeur retournée est la dernière calculée.
Exemple 1
var $c : Collection
$c:=New collection(5;3;5;1;3;4;4;6;2;2)
$r:=$c.reduceRight(Formula($1.accumulator*=$1.value); 1) //retourne 86400
Exemple 2
Cet exemple permet de réduire plusieurs éléments de collections en une seule :
var $c;$r : Collection
$c:=New collection
$c.push(New collection(0;1))
$c.push(New collection(2;3))
$c.push(New collection(4;5))
$c.push(New collection(6;7))
$r:=$c.reduceRight(Formula(Flatten)) //$r=[6,7,4,5,2,3,0,1]
Avec la méthode Flatten suivante :
//méthode projet Flatten
If($1.accumulator=Null)
$1.accumulator:=New collection
End if
$1.accumulator.combine($1.value)
.remove()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.remove( index : Integer { ; howMany : Integer } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| index | Integer | -> | Élément à partir duquel la suppression peut commencer |
| howMany | Integer | -> | Nombre d'éléments à supprimer, ou 1 élément si omis |
| Résultat | Collection | <- | Collection modifiée ne contenant plus le ou les élément(s) supprimé(s) |
Description
La fonction .remove() supprime un ou plusieurs élément(s) à partir de la position index spécifiée dans la collection et retourne la collection modifiée.
Cette fonction modifie la collection d'origine.
Dans index, passez la position à partir de laquelle vous souhaitez supprimer des éléments de la collection.
Exemple 1 Si startFrom < 0, la fin de la collection est considérée comme point de départ du calcul de la position (startFrom:=startFrom+length).
- Inclus parmi
- Si la valeur calculée < 0, index est défini à 0.
- Si la valeur calculée > la longueur de la collection, index est défini à cette longueur.
Dans howMany, passez le nombre d'éléments à supprimer à partir de index. Si howMany n'est pas spécifié, alors un seul élément est supprimé.
Si vous essayez de supprimer un élément d'une collection vide, la méthode ne fait rien (aucune erreur n'est générée).
Exemple
var $col : Collection
$col:=New collection("a";"b";"c";"d";"e";"f";"g";"h")
$col.remove(3) // $col=["a","b","c","e","f","g","h"]
$col.remove(3;2) // $col=["a","b","c","g","h"]
$col.remove(-8;1) // $col=["b","c","g","h"]
$col.remove(-3;1) // $col=["b","g","h"]
.resize()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.resize( size : Integer { ; defaultValue : any } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| size | Integer | -> | Nouvelle taille de la collection |
| defaultValue | any | -> | Valeur par défaut pour remplir de nouveaux éléments |
| Résultat | Collection | <- | Collection d'origine redimensionnée |
Description
La fonction .resize() redéfinit la longueur de la collection à partir de la nouvelle taille spécifiée et retourne la collection redimensionnée.
Cette fonction modifie la collection d'origine.
- Si size < longueur de la collection, les éléments excédentaires sont supprimés de la collection.
- Si size > longueur de la collection, la longueur de la collection est étendue à size.
Par défaut, les nouveaux éléments sont remplis par des valeurs null. Vous pouvez indiquer la valeur de remplissage à utiliser dans les éléments ajoutés à l'aide du paramètre defaultValue.
Exemple
var $c : Collection
$c:=New collection
$c.resize(10) // $c=[null,null,null,null,null,null,null,null,null,null]
$c:=New collection
$c.resize(10;0) // $c=[0,0,0,0,0,0,0,0,0,0]
$c:=New collection(1;2;3;4;5)
$c.resize(10;New object("name";"X")) //$c=[1,2,3,4,5,{name:X},{name:X},{name:X},{name:X},{name:X}]
$c:=New collection(1;2;3;4;5)
$c.resize(2) //$c=[1,2]
.reverse()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.reverse( ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| Résultat | Collection | <- | Copie inversée de la collection |
Description
La fonction .reverse() retourne une copie profonde de la collection avec tous ses éléments dans l'ordre inverse. Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Cette fonction ne modifie pas la collection d'origine.
Exemple
var $c; $c2 : Collection
$c:=New collection(1;3;5;2;4;6)
$c2:=$c.reverse() //$c2=[6,4,2,5,3,1]
.shift()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.shift() : any
| Paramètres | Type | Description | |
|---|---|---|---|
| Résultat | any | <- | $1.stop (booléen, optionnel) : true pour stopper le rétroappel. |
Description
La fonction .shift() supprime le premier élément de la collection et le retourne comme résultat de la fonction.
Cette fonction modifie la collection d'origine.
Si la collection est vide, cette méthode ne fait rien.
Exemple
var $c : Collection
var $val : Variant
$c:=New collection(1;2;4;5;6;7;8)
$val:=$c.shift()
// $val=1
// $c=[2,4,5,6,7,8]
.slice()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.slice( startFrom : Integer { ; end : Integer } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| startFrom | Integer | -> | Indice l'élément de départ (inclus) |
| end | Integer | -> | Indice de fin (non inclus) |
| Résultat | Collection | <- | Nouvelle collection contenant des éléments découpés (copie superficielle) |
Description
La fonction .slice() retourne une partie d'une collection dans une nouvelle collection, sélectionnée de la position startFrom à la position end (end non incluse). Cette fonction retourne une copie superficielle (shallow copy) de la collection. Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Cette fonction ne modifie pas la collection d'origine.
La collection retournée contient l'élément spécifié par startFrom et tous les éléments suivants jusqu'à l'élément spécifié par end (mais non compris). Si seul le paramètre startFrom est spécifié, la collection retournée contient tous les éléments de startFrom jusqu'au dernier élément de la collection d'origine.
- Exemple 3
- Si la valeur calculée < 0, startFrom est mis à 0.
- Prise en charge de querySettings
- Si end < startFrom (valeurs passées ou calculées), la méthode ne fait rien.
Exemple
var $c; $nc : Collection
$c:=New collection(1;2;3;4;5)
$nc:=$c.slice(0;3) //$nc=[1,2,3]
$nc:=$c.slice(3) //$nc=[4,5]
$nc:=$c.slice(1;-1) //$nc=[2,3,4]
$nc:=$c.slice(-3;-2) //$nc=[3]
.some()
Historique
| Release | Modifications |
|---|---|
| 19 R6 | Prise en charge des formules |
| v16 R6 | Ajout |
.some( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Boolean
.some( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Boolean
| Paramètres | Type | Description | |
|---|---|---|---|
| startFrom | Integer | -> | Elément à partir duquel débuter l'évaluation |
| formula | 4D.Function | -> | Objet formule |
| methodName | Text | -> | Nom de méthode |
| param | any | -> | Paramètre(s) à passer |
| Résultat | Boolean | <- | Vrai si au moins un élément a réussi le test |
Description
La fonction .some() retourne true si au moins un élément de la collection a réussi un test implémenté dans formula ou methodName.
Vous désignez le code 4D de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :
- Par défaut, une évaluation non diacritique est effectuée.
- Vous souhaitez trier la collection obtenue :
Exemple 2 Par défaut, les propriétés sont triées pas ordre croissant. Modifications
La callback reçoit les paramètres suivants :
- dans $1.value : valeur d'élément à évaluer
- dans $2: param
- dans $N...: paramN...
Elle peut définir le(s) paramètre(s) suivant(s) :
- (obligatoire si vous avez utilisé une méthode) $1.result (booléen) : true si l'évaluation de la valeur de l'élément est à vrai, false sinon.
- $1.stop (booléen, optionnel) : true pour stopper le rétroappel de la méthode. La valeur retournée est la dernière calculée.
Dans tous les cas, au moment où la fonction .some() rencontre le premier élément de la collection retournant true, elle arrête d'appeler la callback et retourne true.
Par défaut, .some() évalue l'ensemble de la collection. Optionnellement, vous pouvez passer la position de l'élément auquel démarrer le test dans startFrom.
-
Si startFrom >= la longueur de la collection, False est retourné, ce qui signifie que la collection n'est pas testée.
-
Si startFrom < 0, il est considéré comme un décalage par rapport à la fin de la collection.
-
Commentaire
Exemple
Vous voulez savoir si au moins une valeur de la collection est >0.
var $c : Collection
var $b : Boolean
$c:=New collection
$c.push(-5;-3;-1;-4;-6;-2)
$b:=$c.some(Formula($1.value>0)) // $b=false
$c.push(1)
$b:=$c.some(Formula($1.value>0)) // $b=true
$c:=New collection
$c.push(1;-5;-3;-1;-4;-6;-2)
$b:=$c.some(Formula($1.value>0)) //$b=true
$b:=$c.some(1;Formula($1.value>0)) //$b=false
.sort()
Historique
| Release | Modifications |
|---|---|
| 19 R6 | Prise en charge des formules |
| v16 R6 | Ajout |
.sort() : Collection
.sort( ascOrDesc : Integer ) : Collection
.sort( formula : 4D.Function { ; ...extraParam : any } ) : Collection
.sort( methodName : Text { ; ...extraParam : any } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| ascOrDesc | Integer | -> | Exemple 1 |
| formula | 4D.Function | -> | Objet formule |
| methodName | Text | -> | Nom de méthode |
| extraParam | any | -> | Paramètre(s) à passer à la méthode |
| Résultat | Collection | <- | Optionnellement, vous pouvez passer des paramètres à formula ou methodName en utilisant le(s) paramètre(s) param. |
Description
La fonction .sort() trie les éléments de la collection d'origine et retourne également la collection triée.
Cette fonction modifie la collection d'origine.
Si .sort() est appelé sans paramètres, seules les valeurs scalaires (nombres, textes, dates, booléens) sont triées. Les éléments sont triés par défaut par ordre croissant, en fonction de leur type.
Vous pouvez également passer une des constantes suivantes dans le paramètre ascOrDesc :
| Constante | Type | Valeur | Commentaire |
|---|---|---|---|
| ck ascending | Integer | 0 | Les éléments sont triés par ordre croissant (défaut) |
| ck descending | Integer | 1 | Les éléments sont triés par ordre décroissant |
Cette syntaxe trie uniquement les valeurs scalaires de la collection (les autres types d'éléments comme les objets ou les collections sont retournés non triés).
Si la collection contient des éléments de différents types, ils sont d'abord groupés par type et triés par la suite. Les types sont renvoyés dans l'ordre suivant :
- Null
- booléens
- chaînes
- nombres
- objets
- collections
- dates
Si vous souhaitez trier les éléments de la collection dans un autre ordre ou trier n'importe quel type d'élément, vous devez fournir dans *formula * (objet Formula) ou methodName (Text) une callback qui définit l'ordre de tri. Nom de méthode Vous pouvez fournir des paramètres supplémentaires à la callback si nécessaire.
La callback reçoit les paramètres suivants :
- $1 (object), où :
- La nouvelle collection
- Collection d'origine triée
- $2...$N (tout type) : paramètres supplémentaires (extraParam)
Si vous avez utilisé une méthode, vous devez définir le paramètre suivant :
- Nouvelle collection contenant des éléments scindées (copie superficielle)
Exemple 1
var $col; $col2 : Collection
$col:=New collection("Tom";5;"Mary";3;"Henry";1;"Jane";4;"Artie";6;"Chip";2)
$col2:=$col.sort() // $col2=["Artie","Chip","Henry","Jane","Mary","Tom",1,2,3,4,5,6]
// $col=["Artie","Chip","Henry","Jane","Mary","Tom",1,2,3,4,5,6]
Exemple 2
var $col; $col2 : Collection
$col:=New collection(10;20)
$col2:=$col.push(5;3;1;4;6;2).sort() //$col2=[1,2,3,4,5,6,10,20]
Exemple 3
var $col; $col2; $col3 : Collection
$col:=New collection(33;4;66;1111;222)
$col2:=$col.sort() //numerical sort: [4,33,66,222,1111]
$col3:=$col.sort(Formula(String($1.value)<String($1.value2))) //tri alphabétique : [1111,222,33,4,66]
.sum()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.sum( { propertyPath : Text } ) : Real
| Paramètres | Type | Description | |
|---|---|---|---|
| propertyPath | Text | -> | Chemin de propriété d'objet à utiliser pour évaluer les valeurs |
| Résultat | Real | <- | Somme des valeurs de la collection |
Description
La fonction .sum() retourne la somme de toutes les valeurs de l'instance de collection.
Seuls les éléments ayant une valeur numérique sont pris en compte pour le calcul (les autres types d'éléments sont ignorés).
Les positions sont retournées dans un ordre croissant.
.sum() retourne 0 si :
- la collection est vide,
- la collection ne contient pas d'éléments numériques,
- Egal à
Exemple 1
var $col : Collection
var $vSum : Real
$col:=New collection(10;20;"Monday";True;2)
$vSum:=$col.sum() //32
Exemple 2
var $col : Collection
var $vSum : Real
$col:=New collection
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500,5))
$vSum:=$col.sum("salary") //$vSum=70500,5
.unshift()
Historique
| Release | Modifications |
|---|---|
| v16 R6 | Ajout |
.unshift( value : any { ;...valueN : any } ) : Collection
| Paramètres | Type | Description | |
|---|---|---|---|
| value | any | -> | Valeur(s) à insérer au début de la collection |
| Résultat | Collection | <- | Collection contenant des éléments ajoutés |
Description
La fonction .unshift() insère value au début de la collection et retourne la collection modifiée.
Cette fonction modifie la collection d'origine.
Si plusieurs valeurs sont passées, elles sont insérées toutes en même temps, ce qui signifie qu'elles apparaissent dans la collection résultante dans le même ordre que dans la liste d'arguments.
Exemple
var $c : Collection
$c:=New collection(1;2)
$c.unshift(4) // $c=[4,1,2]
$c.unshift(5) //$c=[5,4,1,2]
$c.unshift(6;7) // $c=[6,7,5,4,1,2]