Manque de la fonction .toSharedCollection

Je veux pouvoir créer une collection partagée contenant donc des objets partagés

Je veux pouvoir la créer à partir d’une entity selection

Actuellement, je n’y arrive pas car les objets ne sont pas partagés lorsqu’on utilise la commande

ES.toCollection(“toto, tata”) => le résultat est une collection non partagée contenant des objets non partagés… :cry:

Une solution ?

Je te laisse faire la demande de feature.
En terme de solution, je te propose :
<code 4D>
// ----------------------------------------------------
// Nom utilisateur (OS) : Patrick EMANUEL
// Date et heure : 26/08/18, 09:56:12
// Paramètres
// ----------------------------------------------------
// $1 = Attribut à creer dans le Storage (Texte)
// $2 = Collection à Stocker (Texte)
// ----------------------------------------------------
// Méthode : ORDA_CollectionToStorageShared
// Description
// Stocke des information dans Storage[$1] de manière à pouvoir les rappeler par après,

C_TEXT($1)
C_COLLECTION($2;$Parameter)

Use (Storage)
If (Storage[$1]=Null)
Storage[$1]:=New shared collection
End if
End use

$Parameter:=Storage[$1]
Use ($Parameter)
$Parameter:=$2.copy()
End use
</code 4D>

l’appel est ensuite on ne peut plus simple:
<code 4D>
ORDA_CollectionToStorageShared (“xFonctions”;$xFonctions)
</code 4D>

Patrick

Je viens de tester ton code malheureusement cela n’a pas l’air de fonctionner avec une collection d’objet non partagés… :frowning:

ca le fait pourtant chez moi

En fait, c’est une collection de collection ?

Cf. la capture:
[]26784426;“Ce que je cherche à rajouter à mon storage…”[/]

Dis-moi si cela dois marcher ou pas ?

Oui, j’en suis venu à cela car dans le Shared il te faut un nom d’un objet ou d’une collection. Je fourvoie certainement l’idée initiale de 4D mais je n’ai pas trouvé d’autres moyens. Si jamais il y a quelqu’un qui a une meilleure idée.

Donc du coup, tu copies ta collection dans ta collection partagée. Quand tu en as besoin, alors tu copies dans l’autre sens. Je sens déjà les critiques sur les perfs en fonction de la taille de la collection, mais encore une fois, j’ai pas trouvé mieux et suis preneur d’une meilleure solution :wink:

Patrick

Sauf que la copie ne fait rien, il me copie dans $parameter ma collection (cf. capture) sauf que c’est une collection non partagée et dans mon Storage j’ai le paramètre $2 qui est une collection partagée, mais qui est vide ?

Voici mon code pour créer ma collection que je veux copier dans mon Storage :

<code 4D>
C_OBJET($ES_Avancement)
$ES_Avancement:=ds.Avancement.all()

C_COLLECTION($NouvelleCollection)
$NouvelleCollection:=$ES_Avancement.toCollection(“Libelle, Couleur, Fichier, IDSociete”)
C_OBJET($Element)
Pour chaque ($Element;$NouvelleCollection)
$Element.Libelle:=TBM_Traduction_GEN ($Element.Libelle)
Fin de chaque

ORDA_CollectionToStorageShared (“AvancementCollection”;$NouvelleCollection)

</code 4D>

Help :pray:

Je ne comprends pas comment ton code peut fonctionner car dans la doc
il est écrit:

: Doc 4D

Lorsqu’elle est appliquée à une collection partagée, collection.copy(
) retourne une collection standard (non partagée).
Donc n’importe comment la collection resultant de la copie est une collection non partagée

Or la doc dit aussi:

: Doc 4D

Comme le catalogue retourné par Storage est un objet partagé, il suit
les règles décrites dans la section Objets partagés et collections
partagées, avec toutefois les spécificités suivantes :
Cet objet peut uniquement contenir des objets partagés ou des
collections partagées. Si vous tentez d’ajouter d’autres types de
valeurs (objets ou collections non partagé(e)s, null, valeurs
scalaires), une erreur est générée.

Avec ton code, je n’ai pas d’erreur sauf que j’ai rien dans mon Storage :cry:

Laisse moi refaire le test car tu me mets un gros doute

Damned, tu as raison, je me suis fait eu, j’ai pas regardé la bonne ligne dans le debug :oops: :evil: :evil: :twisted:

Bon, ben je met ma langue au chat :frowning:
Désolé

Bon, ben, je crois que je vais faire un beau tableau interprocess avec mes donnée concaténées : Où comment un bon gros hack de derrière les fagots est plus simple à gérer que d’utiliser les collections partagées… :roll:

j’en arrive à la conclusion alors que je voulais mettre à la poubelle ce genre de tableaux qui ne bouge que très rarement :frowning:
Suis en train de tourner en rond avec cette histoire et j’avoue que cela commence à me casser les pieds
Feature !!!

essaye cela

<code 4D>
C_TEXT($1)
C_COLLECTION($Parameter)

Use (Storage)
Storage[$1]:=Null
Storage[$1]:=New shared collection
End use

ARRAY OBJECT($Array;0x0000)
ARRAY TEXT($arrNames;0x0000)
COLLECTION TO ARRAY($2;$Array)
$L:=Size of array($Array)

Use (Storage)
For ($col;1;$L)
OB GET PROPERTY NAMES($Array{$col};$arrNames)
Use (Storage[$1])
Storage[$1][$col-1]:=New shared collection
Use (Storage[$1][$col-1])
For ($colNames;1;Size of array($arrNames))
Storage[$1][$col-1].push($arrNames{$colNames};OB Get($Array{$col};$arrNames{$colNames}))
End for
End use
End use
End for
End use
</code 4D>

edit: pour que cela passe au compile.

Salut

as-tu testé car chez moi, maintenant, j’ai bien une collection partagée complétée :wink:

J’ai pas encore eu le temps, mais je vais tester.

Sinon, une optimisation(?) de ton code serait peut-être de faire ce que te conseille Roland http://forums.4d.com/Post/FR/23687286/2/24283871#23714828ici>

Et pour finir, je me pause sérieusement la question de la pertinence de l’utilisation des collections partagées et du Storage pour l’usage que je souhaite en faire.

En fait, je souhaite simplement remplacer un tableau interprocess, est-ce la bonne technique ?
Question performance je n’en suis même pas sûr…

Salut,

Pas de soucis, mais il manque le lien :wink:

Je fais cela car j’ai des droits calculés pour mes utilisateurs => c’est pas le genre de trucs que tu mets à jours tout le temps mais dont tu te sers régulièrement.

Oups :oops: lien corrigé…

Effectivement, l’idée est là, mais si tu enlèves les “use / end use” inclus dans le “use (storage)”, tu obtiens une erreur à l’exécution. C’est la raison pour laquelle je les ai laissé.

C’était surtout par rapport à l’utilisation des For each…
L’exemple est juste au dessus du precedent post http://forums.4d.com/Post/FR/23687286/2/24283871#23714752ici>