Collection
Vous souhaitez obtenir le premier élément de texte dont la taille est inférieure à 5 caractères :
Une collection est initialisée avec :
New collection {( ...value : any )} : Collection |
New shared collection {( ...value : any )} : Collection |
Exemple
Supérieur à
Sommaire
New collection
New collection {( ...value : any )} : Collection
Paramètres | Type | Description | |
---|---|---|---|
value | Number, Text, Date, Time, Boolean, Object, Collection, Picture, Pointer | -> | Valeur(s) de collection |
Résultat | Collection | <- | $1.stop (booléen, optionnel) : true pour stopper le rétroappel. |
Description
Recherche avec des dates :
Prise en charge des formules
Vous devez affecter la référence retournée à une variable 4D de type Collection.
Utilisation de parenthèses
Condition Not appliquée à une assertion
Sinon, vous pouvez ajouter ou modifier des éléments ultérieurement par affectation. Par exemple :
Vous pouvez fournir des paramètres supplémentaires à la callback si nécessaire.
Considère le @ comme un caractère standard
Vous pouvez passer n'importe quel nombre de valeurs de n'importe quel type pris en charge (number, text, date, picture, pointer, object, collection...). Contrairement aux tableaux, les collections peuvent mélanger des données de différents types.
Vous devez prêter attention aux problèmes de conversion suivants :
- La nouvelle collection partagée
- 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. 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. Indice de fin (non inclus)
- Si vous passez une heure, elle est stockée sous la forme d'un nombre de millisecondes (Réel).
Exemple 1
Vous souhaitez créer une nouvelle collection vide et l'assigner à une variable collection 4D :
var $myCol : Collection
$myCol:=New collection
//$myCol=[]
Exemple 2
Vous souhaitez créer une collection pré-remplie :
var $filledColl : Collection
$filledColl:=New collection(33;"mike";"november";->myPtr;Current date)
//$filledColl=[33,"mike","november","->myPtr","2017-03-28T22:00:00.000Z"]
Exemple 3
Vous souhaitez créer une nouvelle collection puis ajouter un élément :
Inférieur à
New shared collection
Historique
Release | Modifications |
---|---|
v16 R6 | Ajout |
New shared collection {( ...value : any )} : Collection
Paramètres | Type | Description | |
---|---|---|---|
value | Number, Text, Date, Time, Boolean, Shared object, Shared collection | -> | Valeur(s) de la collection partagée |
Résultat | Collection | <- | $1.stop (booléen, optionnel) : true pour stopper le rétroappel de la méthode. |
Description
nombres
Par exemple : Copie inversée de la collection
Les symboles suivants sont pris en charge :
Symbole(s)
Vous devez affecter la référence retournée à une variable 4D de type Collection.
Utilisation de parenthèses
Symbole(s) Sinon, vous pouvez ajouter ou modifier des éléments ultérieurement via l'assignation en notation objet (cf. exemple).
Prise en charge des formules
Vous pouvez passer tout nombre de valeurs de n'importe quel type pris en charge :
- nombre (réel, entier...). Les valeurs numériques sont toujours stockées sous forme de réels.
- text
- boolean
- date
- heure (stockée en nombre de milliseconds - réel)
- Null
- Si vous souhaitez que l'évaluation soit sensible à la casse ou pour différencier des caractères accentués, passez la constante
ck diacritical
dans le paramètre option. - $1.stop (booléen, optionnel) : true pour stopper le rétroappel de la 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.
Exemple
$mySharedCol:=New shared collection("alpha";"omega")
Use($mySharedCol)
$mySharedCol[1]:="beta"
End use
.at()
Historique
Release | Modifications |
---|---|
20 | Ajout |
.at( index : Integer ) : any
Paramètres | Type | Description | |
---|---|---|---|
index | Integer | -> | Index de l'élément à renvoyer |
Résultat | any | <- | Pour cela, nous devons créer une copie partagée au préalable ($sharedLastnames). |
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 | <- | Voici un exemple : |
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 | <- | Vous pouvez passer : |
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 | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valeur(s) à concaténer. Nom de méthode |
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.
Nom de méthode Egal à
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. Premier élément de collection 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. Options de requête : paramètres, attributs
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 | Text, Number, Boolean, Date, Object, Collection | -> | 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. La collection retournée est automatiquement triée.
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 | Number, Text, Object, Collection, Date, Boolean | -> | 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 | -> | Elé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 Les comparateurs suivants sont pris en charge : 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 | -> | Elé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 Les comparateurs suivants sont pris en charge : 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 | -> | Elé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 Trois syntaxes sont prises en charge pour ce paramètre :
- 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 | -> | Elément à partir duquel débuter la recherche |
Résultat | Integer | <- | Modifications |
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 | <- | Exemple 1 |
Description
Exemple 3 Les positions sont retournées dans un ordre croissant.
Cette fonction ne modifie pas la collection d'origine.
Exemple 2
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
Exemple 2
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 | -> | Elé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 | Boolean, Text, Number, Collection, Object, Date | <- | 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 | Boolean, Text, Number, Collection, Object, Date | <- | 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.
Valeur 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 Longint 0 Les éléments sont triés par ordre croissant (défaut) ck descending Longint 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")
//utilisation du code de caractère:
$strings2:=$strings1.orderByMethod(Function(sortCollection);sk character codes)
// result : ["Alpha","Bravo","Charlie","alpha","bravo","charlie"]
//utilisation du langage:
$strings2:=$strings1.orderByMethod(Function(sortCollection);sk strict)
// result : ["alpha","Alpha","bravo","Bravo","charlie","Charlie"]
booléens
**Tri synchronisé à un niveau**
.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
Exemple 2
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" (voir ci-dessous). |
!==, 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 à "Not equal to" (voir ci-dessous). |
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 typeboolé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, valuedoit être une collection, ou des valeurs du même type que les données du chemin d'attribut, fournies entre [ ] et séparées par des virgules (pour les chaînes, les caractères
"
doivent être écha
-
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. 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
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. Exemple 1
- 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"] |
Modifications
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+"@")
//if $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 not allowed with "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...}] if today is 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)
la collection ne contient pas d'éléments numériques,
.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 | Text, Number, Object, Collection, Date, Boolean | -> | la collection est vide, |
param | expression | -> | Paramètre(s) à passer |
Résultat | Text, Number, Object, Collection, Date, Boolean | <- | 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.
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 :
Ajout
Les éléments sont triés par ordre croissant (défaut) Modifications
La callback reçoit les paramètres suivants :
- Contrairement aux tableaux, les collections peuvent mélanger des données de différents types.
- 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) :
- Vous voulez obtenir la collection des éléments de type texte dont la longueur est inférieure à 6 :
- Elément à chercher dans la collection 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 collection à un seul :
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]
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.
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 | Text, Number, Object, Collection, Date, Boolean | -> | la collection est vide, |
param | expression | -> | Paramètre(s) à passer |
Résultat | Text, Number, Object, Collection, Date, Boolean | <- | 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.
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 :
Ajout
Les éléments sont triés par ordre croissant (défaut) Modifications
La callback reçoit les paramètres suivants :
- Contrairement aux tableaux, les collections peuvent mélanger des données de différents types.
- 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) :
- Vous voulez obtenir la collection des éléments de type texte dont la longueur est inférieure à 6 :
- Elément à chercher dans la collection La valeur retournée est la dernière calculée.
Exemple 1
Exemple
Exemple 2
Cet exemple permet de réduire plusieurs éléments de collection à un seul :
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]
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.
//Flatten project method
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 | <- | Toutefois, vous pouvez résoudre les pointeurs au moment de la copie en passant la constante ck resolve pointers . |
Description
Exemple
Cette fonction modifie la collection d'origine.
Exemple 1
Exemple 1 Exemple 1
- Inclus parmi
- Les objets Datastore, dataclass et entity ne sont pas copiables.
- Exemple 1
La callback reçoit les paramètres suivants : Vous souhaitez calculer le pourcentage de chaque valeur de la collection par rapport au total :
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 | Number, Text, Object, Collection, Date, Boolean | -> | Valeur par défaut pour remplir de nouveaux éléments |
Résultat | Collection | <- | Pour ce type de recherche, vous devez utiliser la syntaxe de recherche directe : |
Description
Exemple
Cette fonction modifie la collection d'origine.
- Exemple 1
- Exemple 1
Exemple Copie triée de la collection (shallow copy)
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 | <- | 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 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
Exemple
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 | <- | Résultat |
Description
Exemple booléens 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 1 Exemple 1
- Exemple 3
- Pour plus d'informations sur les collections partagées, veuillez vous référer à la page Objets et collections partagés.
- Prise en charge de querySettings
- Cet exemple permet de réduire plusieurs éléments de collection à un seul :
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 |
---|
Vous souhaitez trier trois collections synchronisées : ville, pays et continent.
Description
Paramètres
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 :
- Contrairement aux tableaux, les collections peuvent mélanger des données de différents types.
- 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) :
- Une collection est initialisée avec :
- Elément à chercher dans la collection La valeur retournée est la dernière calculée.
Exemple
Objet formule Modifications
-
Modifications
-
Ajout
-
Commentaire
Exemple
Résultat
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( formula : 4D.Function { ; ...extraParam : any } ) : Collection
.sort( methodName : Text { ; ...extraParam : any } ) : Collection
Paramètres | Type | Description | |
---|---|---|---|
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
Exemple
Cette fonction modifie la collection d'origine.
Exemple Les éléments sont triés par défaut par ordre croissant, en fonction de leur type. 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 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)
des placeholders indexés et/ou nommés.
- 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
Ajout
.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 | <- | 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. |
Description
Ajout
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.
Les éléments sont triés par défaut par ordre croissant, en fonction de leur type.
- 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 | Text, Number, Object, Collection, Date | -> | Valeur(s) à insérer au début de la collection |
Résultat | Real | <- | Collection contenant des éléments ajoutés |
Description
Exemple
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]