Utiliser une formule en critère de recherche dans une collection

Bonjour,

Soit la collection suivante :

image

Sur les 69396 items, je souhaite éliminer ceux dont le nom vtNom est une suite de chiffres, soit créer une nouvelle collection à partir de la première via une query.

Seulement, je n’arrive pas à utiliser la Formule tel qu’expliquée dans cet exemple.

Je pense que c’est la logique globale que je ne comprends pas.

Dans un premier temps, j’essaie d’expérimenter en sélectionnant par exemple le premier item par son nom : vtNom=762041127.

Voici mon code

C_OBJET($voFormule)
$voFormule:=Formule(This.vtNom="762041127")
C_COLLECTION($vcTruc)
$vcTruc:=Créer collection
$vcTruc:=$vcTiers.query($voFormule)

Ma formule consiste donc à vérifier si la propriété “vtNom” de “This” est égale à 762041127.

Or, même ce simple test ne fonctionne pas (ma collection $vcTruc contient la même chose que la collection d’origine $vcTiers).

Quelqu’un pourrait m’éclairer sur cette syntaxe ?

Merci !

as-tu essayé avec une Regex ?

^[0-9]+

Oui, c’est ce que je faisais au départ, j’utilisais une regex. Mais le résultat étant négatif (collection à l’arrivée identique à la collection de départ), j’ai tenté une expérimentation plus simple pour comprendre comment fonctionne le .query avec une Formule.

Bon, à vrai dire, entretemps j’ai laissé tomber et réussi à obtenir en amont une collection nettoyée des entités que je souhaitais enlever. Donc, pour ce coup là, tant pis, mais je ne comprends toujours pas comment fonctionne ce système.

Merci pour ta réponse.

In your screenshot the value 762041127 looks like a number, not string.

The property named “vtNom” is a string. In most cases, the value of this property is the same as the “velIdOrganisme” property, which is a number. The purpose of this method was to eliminate those data. But nevermind, I found a workaround.

Bonjour,

Le blogpost auquel vous faîtes référence porte sur le query sur une dataclass (ou une entity selection).
Pour les collections, on ne peut pas mettre une Formula dans la member method query().

Il faut utiliser la member method collection.filter() --> https://doc.4d.com/4Dv18R3/4D/18-R3/collectionfilter.305-4900883.en.html

@Marie-Sophie_Landrie : merci pour la précision, désolé pour la confusion.
Mon problème courant a été résolu autrement, mais je garde ça sous le coude pour la prochaine fois.