You are not logged in.
Pages: 1
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
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
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
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
Merci, j'arrive à mes fins avec le code çi dessus.
Offline
Pages: 1