You are not logged in.
Bonjour,
la méthode de String[] actualValues = compositeMetadata.getStringArray(field); ne fonctionnne pas sur un champ de type sub_content. Existe t-il une méthode alternative ?
Extiste-il une méthode qui permet de de tester un champ pour savoir si il est de type sub_content ?
Merci
Offline
Bonjour,
Oui la méthode getStringArray ne fonctionne pas sur un champ de type "sub_content" puisqu'il ne s'agit pas d'un type "string" ...
Pour récupérer la valeur d'un champ de type "sub_content" il faut faire:
TraversableAmetysObject subContentMeta = compositeMetadata.getObjectCollection(field);
AmetysObjectIterable<Content> subcontents = contentMeta.getChildren();
for (Content subcontent : subcontents)
{
// Traitement ...
}
Pour savoir si un champ est de type sub_content, c'est plus compliqué. Il faut avoir accès à la définition du champ (MetadataDefinition).
Voici un exemple de code permettant de faire cela.
String contentTypeId = content.getTypes()[0];
ContentTypeExtensionPoint ctypesEP = (ContentTypeExtensionPoint) manager.lookup(ContentTypeExtensionPoint.ROLE);
ContentType cType = ctypesEP.getExtension(contentTypeId );
MetadataDefinition metadataDef= cType.getMetadataDefinitionByPath(field);
if (MetadataType.SUB_CONTENT.equals (metadataDef.getType())
{
// Traitement ..
}
Laurence Aumeunier
Ametys Expert
Offline
Merci.
Qu'en est-il de l'insertion de nouveau noeuds ?
Il n'existe pas de compositeMetadata.setObjectCollection(field);
Offline
Un "sub_content" est un contenu qui possède un contenu parent. Comme il s'agit d'un contenu, il faut donc le créer comme tout autre contenu, en exécutant l'action d'initialisation du workflow. Par exemple:
_workflow.initialize("content", 1, inputs);
Dans les "inputs", tu as le nom du contenu, son titre, le type de contenus à créer, etc ... mais tu peux aussi lui passer l'identifiant du contenu parent ainsi que le nom de la métadonnée parente qui va porter ce sous-contenu.
inputs.put(CreateContentFunction.PARENT_CONTENT_ID_KEY, parentContentId);
inputs.put(CreateContentFunction.PARENT_CONTENT_METADATA_PATH_KEY, field);
Il existe un helper dans Ametys pour cela : ContentWorkflowHelper.createContent(...)
Laurence Aumeunier
Ametys Expert
Offline
Est-il possible de mettre ces valeurs (PARENT_CONTENT_ID_KEY et PARENT_CONTENT_METADATA_PATH_KEY) à jours alors que l'objet a déjà été créé (à partir d'un ModifiableContent) ? Si oui comment ?
Merci.
Offline
Non, ce n'est pas possible. Ces valeurs(PARENT_CONTENT_ID_KEY et PARENT_CONTENT_METADATA_PATH_KEY) ne sont pas stockées en tant que propriétés du contenu créé mais sont passées à la fonction de création pour déterminer le parent du sous-contenu. Dans l'arbre JCR un sous-contenu est stocké sous le noeud de son contenu parent. On ne peut pas créer donc un contenu, puis en faire un sous-contenu d'un autre contenu après coup.
Laurence Aumeunier
Ametys Expert
Offline