Entity selection/Collection query et operateur de Bit

Bonjour,
nous commençons à utiliser ORDA, mais nous sommes confronté à un problème avec le nouvel opérateur query, car nous utilisons énormément les opérateurs sur les bits. Est-ce qu’il y a moyen de faire l’équivalent des recherches suivantes :

([table]Champ1 & $Masque) = $val

[table]Champ1 ?? $posBit

D’avance merci.

Hello,
we are starting to use ORDA, but we are facing a problem with the new query’s operator because we are using the bitwise operators tremendously. Is there a way to do the equivalent of the following searches:

([table]Champ1 & $Masque) = $val

[table]Champ1 ?? $posBit

thanks

Bonjour Loic,

je ne suis pas encore très familier avec ORDA…

mais voilà une piste

Tu crées une entity collection à partir de ta sélection ("$collectionInitiale")
dans l’exemple il y a une propriété entier long “nombre”

ensuite tu peux utiliser une fonction spécifique (ici “findBit”) et tu la passes en paramètre à la member function “map”

$collectionRetour:=$collectionInitiale.map(“findBit”;5)

avec findBit

C_OBJET($1)
C_ENTIER LONG($2)
$1.result:=$1.value.nombre ?? $2

Dans $collectionRetour tu auras autant d’items que dans $collectionInitiale avec une succession de vrai et faux…

je ne sais pas si cela va dans le sens de ta demande.

Et surtout je ne sais pas si je me fais comprendre…

La recherche en question, en 4D “classique”, serait un “chercher par formule”. Récemment je me suis https://forums.4d.com/Post/FR/29143749/1/29143750#29143750posé la question>, devant la foule de réponses obtenues je n’ai pas l’impression qu’il soit possible de chercher par formule dans le datastore (du moins pour le moment).

Par contre, pour “chercher par formule” dans une collection au lieu du datastore, il y a du matos, dans les member functions. En ce sens, la démarche d’Éric me semble être la bonne. Par contre je testerais avec la member function filter(), au lieu de map(), cf. doc :
« collection.map( ) retourne toujours une collection de taille égale à celle de la collection d’origine »)
« collection.filter( ) retourne une nouvelle collection contenant tous les éléments de la collection d’origine pour lesquels le résultat de la méthode nomMéthode est vrai. »

Bon, après on pourrait aussi faire en faux-nez-orda : chercher par formule, puis selection vers collection…