Forum Ametys

Forum de la communauté Ametys

You are not logged in.

#1 30/04/2014 16:31:59

jorog
Guest
Registered: 26/09/2013
Posts: 14

Ajouter une donnée à un champs multivalué

Bonjour,

J'aimerais ajouter des données à un champ multivalué.

String[] strArr = compositeMetadata.getMetadataNames();
for (String i : strArr) {
      if (field.equals(i)) {
            ModifiableCompositeMetadata list = compositeMetadata.getCompositeMetadata(field);
            }
     }

Ici la dernière instruction n'a pas lance une excepetion alors que la métadonnée est bien présente. De plus il est indiqué dans la documentation de cette fonction qu'en cas de métadonnée multivaluée une seule valeur sera retournée.

Offline

#2 02/05/2014 09:32:45

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: Ajouter une donnée à un champs multivalué

Je ne comprends pas bien ce que vous essayez de faire.
Vous partez d'une métadonnée composite "compositeMetadata" ; puis vous bouclez sur ses sous-métadonnées valuées ; et si l'une s'appelle "field" vous récupérez la sous-métadonnées composite aussi nommée "field".

Pourquoi voudriez vous que "compositeMetadata.getCompositeMetadata(field)" génère une exception si justement la métadonnée est bien présente ?
Les metadonnées composite ne peuvent pas être multivaluées.

Il faut comprendre que les métadonnées composite et repeater sont stockées de manière différentes des autres : ce ne sont pas de simples propriétés JCR mais des sous-noeuds.
Le problème sous-jacent est qu'une propriété nommée "a" et un noeud nommé "a" peuvent cohabiter. Il peut arriver quand on manipule ces notions à la main, qu'on puisse donc créer les deux mais ensuite certaines méthodes ne fonctionneront pas.

Dans votre cas, pourquoi boucler sur les metadonnées à la recherche de celle qui s'appelle "i" ? pourquoi ne pas faire compositeMetadata.hasMetadata(field) ?

En tous cas, dans votre question "J'aimerais ajouter des données à un champ multivalué." je ne vois pas de champ multivalué car vous ne parlez que de composites. Ne vouliez-vous pas faire plutot à la fin : compositeMetadata.getString(field) ?


Raphael Franchet
Expert Ametys

Offline

#3 02/05/2014 16:15:52

jorog
Guest
Registered: 26/09/2013
Posts: 14

Re: Ajouter une donnée à un champs multivalué

Bonjour,

J'utilise un objet composite metadata car c'est le seul type d'objet que j'ai eu l'occasion d'utiliser jusqu'à présent. Ce n'est effectivement peut être pas un composite. Voici ce que j'entend par metadonnée multivaluée:




Dans mon code ModifiableCompositeMetadata compositeMetadata représente mon objet contenant le champ "tutelle". J'aimerais ajouter a ce champ un nouvelle données (en plus de "Centre d'action..." et "Institut...").

Je peux effectivement utiliser compositeMetadata.hasMetadata(field) pour vérifier la présence de ce champs. Mais par la suite je ne comprends pas récupérerles valeurs déjà présentes pour les réinjecter avec ma nouvelle valeur (de cette manière je n'écrase pas les anciennes valeurs avec la nouvelle).

Offline

#4 02/05/2014 16:27:15

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: Ajouter une donnée à un champs multivalué

l'image fait environ 3 pixels de haut donc j'arrive pas à la lire.

En effet, pour une metadonnée multivaluée, il faut repositionner tout le tableau de valeurs.
Donc il faut qqchose du goût suivant :
String[] mesNouvellesValeurs;
if (composite.hasMetadata("champmulti"))
{
     String[] valeursActuelles = composite.getStringArray("champmulti")
     mesNouvellesValeurs = valeursActuelles + mesNouvellesValeurs // il s'agit ici de créer un nouveau tableau de réunion des deux tableaux existants
}
composite.setMetadata("champmulti", mesNouvellesValeurs);


Raphael Franchet
Expert Ametys

Offline

#5 05/05/2014 15:54:50

jorog
Guest
Registered: 26/09/2013
Posts: 14

Re: Ajouter une donnée à un champs multivalué

Merci, j'arrive à mes fins avec le code çi dessus.

Offline

Board footer

Powered by FluxBB