Child association et web client

cancel
Showing results for 
Search instead for 
Did you mean: 
skank
Member II

Child association et web client

Bonjour,

j'ai créé un modèle de données avec une association entre deux document de types différents (les noms n'ont pas d'importance).

    <types>
        <type name="az:doc">
            <parent>cm:content</parent>
            <properties>
                <property name="az:version">
                    <type>d:text</type>
                </property>
                <property name="az:date">
                    <type>d:date</type>
                </property>
            </properties>

            <associations>
                <child-association name="az:azerty">
                    <source>
                        <mandatory>true</mandatory>
                        <many>false</many>
                    </source>
                    <target>
                        <class>az:model</class>
                        <mandatory>false</mandatory>
                        <many>false</many>
                    </target>
                    <duplicate>false</duplicate>
                    <propagateTimestamps>true</propagateTimestamps>
                </child-association>
            </associations>
           
            <mandatory-aspects>
                <aspect>cm:versionable</aspect>
                <aspect>cm:auditable</aspect>
            </mandatory-aspects>
        </type>
       
        <type name="az:model">
            <title>Proof Reading</title>
            <parent>cm:content</parent>
            <properties>
                <property name="az:fr">
                    <type>d:text</type>
                </property>
            </properties>
        </type>
    </types>

J'ai ensuite configuré le web-client-config-custom :

    <config evaluator="node-type" condition="az:doc">
        <property-sheet>
            <show-property name="az:version" show-in-edit-mode="true" />
            <show-property name="az:date" show-in-edit-mode="true" />
            <show-child-association name="az:azerty" component-generator="ChildAssociationGenerator" />
        </property-sheet>
    </config>

    <config evaluator="node-type" condition="az:model">
        <property-sheet>
            <show-property name="az:fr" />
            <show-child-association name="az:azerty" show-in-edit-mode="false" />
        </property-sheet>
    </config>

J'ai quelques questions :

- existe-t-il un moyen de montrer le az:model dans le répertoire à côté de son doc ? Je veux dire, il faut que ce soit une child-association, en effet le az:model n'a aucune existence sans son doc (donc quand on déplace le doc, l'autre doit suivre ; quand on supprime le doc, il doit aussi être supprimé..). Mais ce serait plus pratique pour moi s'il apparaissait à côté dans le web client.

- Par ailleurs, le az:model apparaît dans les propriétés du doc, mais seulement en tant que texte, malgré le component-generator="ChildAssociationGenerator" . J'ai essayé de mettre LinkGenerator, mais il n'a pas apprécié et m'a lancé une exception de cast (java.lang.ClassCastException: javax.faces.component.UIOutput cannot be cast to org.alfresco.web.ui.repo.component.property.BaseAssociationEditor). En fait, j'aimerais pouvoir accéder à az:model (c'est un fichier excel). J'aimerais donc pouvoir le modifier, .. , comme n'importe quel document.

Merci pour votre aide.
3 Replies
skank
Member II

Re: Child association et web client

Pas d'idées ?
skank
Member II

Re: Child association et web client

Après une (longue) recherche dans la doc et surtout dans le code source, j'en ai déduit qu'il y a deux fichiers où je dois faire des modifications : browse.jsp et le bean BrowseBean.

Dans la jsp, le passage intéressant :
                    <%– Content list –%>
                    <a:richList id="contentRichList"
                                binding="#{BrowseBean.contentRichList}"
                                viewMode="#{BrowseBean.browseViewMode}"
                                pageSize="#{BrowseBean.pageSizeContent}"
                                styleClass="recordSet"
                                headerStyleClass="recordSetHeader"
                                rowStyleClass="recordSetRow"
                                altRowStyleClass="recordSetRowAlt"
                                width="100%"
                                value="#{BrowseBean.content}"
                                var="r">

Dans le bean, la méthode queryBrowseNodes, et surtout ce passage:

        for (FileInfo fileInfo : children)
         {
            // create our Node representation from the NodeRef
            NodeRef nodeRef = fileInfo.getNodeRef();

            // find it's type so we can see if it's a node we are interested in
            QName type = this.getNodeService().getType(nodeRef);

            // make sure the type is defined in the data dictionary
            TypeDefinition typeDef = this.getDictionaryService().getType(type);

            if (typeDef != null)
            {
               MapNode node = null;

               [b]// look for File content node[/b]
               if (this.getDictionaryService().isSubClass(type, ContentModel.TYPE_CONTENT))
               {
                  // create our Node representation
                  node = new MapNode(nodeRef, this.getNodeService(), fileInfo.getProperties());
                  setupCommonBindingProperties(node);

[b][i]                  Rajouter ici :
                  si (noeud de mon type perso)
                  alors
                       si(noeud a des enfants)
                              this.contentNodes.add(enfant);
                   fin si[/i]
[/b]
                  this.contentNodes.add(node);
               }

Maintenant, je me demande quel est la meilleure manière de faire : faut-il que je réinstancie complètement BrowseBean, et que je change toutes ses apparitions dans FacesContext par mon nouveau bean ? Ou comment puis-je faire pour juste réinstancier la partie qui m'intéresse ?
skank
Member II

Re: Child association et web client

J'ai finalement réussi, en surchargeant le bean BrowseBean comme indiqué dans ce topic : http://forums.alfresco.com/fr/viewtopic.php?f=11&t=1168&p=5224&hilit=browsebean#p5224