Share - Advanced Search - Custom Aspect

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

Share - Advanced Search - Custom Aspect

Ciao a tutti,

sto usando Alfresco Community 4.2.e su Tomcat 7.
Ho un problema in Share nella ricerca avanzata di campi custom: non riesco ad ottenere alcun risultato.

Ho aggiunto e valorizzato con successo i campi del mio custom aspect e inserito la ricerca per tipo
nella lista Advanced Search.
Ma se provo a ricercare per uno dei miei campi non ottengo risultato.

Come prova ho caricato due documenti, uno sul repository, con valore campo custom "M1"
ed uno all'interno di un sito da me creato con valore campo custom "F1".

Tramite la ricerca semplice, i documenti li trovo, inserendo però "nome del campo custom:valore", ossia
sc_codmodulo:F1 con specificato "All Sites" e sc_codmodulo:M1 con specificato "Repository".

Mi verrebbe da pensare che la mia configurazione nell'Advanced Search non abbia
un riferimento su dove andare ad effettuare la ricerca, ossia in "All Sites" o sul "Repository".
In rete ho trovato questa <a href="http://www.appnovation.com/blog/alfresco-share-search-under-folder-category">nota</a>
ma non so se abbia poi qualche attinenza al mio problema.

Quando eseguo la ricerca da Advanced Search, questo è l'url che fa l'inquire su Lucene:

http://127.0.0.1:8080/share/page/site/test/search?t=&q={'prop_sc_archiviata-date-range':'','prop_sc_...


Avete qualche suggerimento ?

Questo è il mio customModel.xml

<?xml version="1.0" encoding="UTF-8"?>

<!– Custom Model –>

<!– Note: This model is pre-configured to load at startup of the Repository.  So, all custom –>
<!–       types and aspects added here will automatically be registered –>

<model name="sc:customModel" xmlns="http://www.alfresco.org/model/dictionary/1.0">

   <!– Optional meta-data about the model –>  
   <description>Custom Model</description>
   <author></author>
   <version>1.0</version>

   <imports>
        <!– Import Alfresco Dictionary Definitions –>
      <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
      <!– Import Alfresco Content Domain Model Definitions –>
      <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
   </imports>

   <!– Introduction of new namespaces defined by this model –>
   <!– NOTE: The following namespace custom.model should be changed to reflect your own namespace –>
   <namespaces>
      <namespace uri="custom.model" prefix="sc"/>    
   </namespaces>
     
<types>
        <type name="sc:tipomodulo">
            <title>Modulistica</title>
            <parent>cm:content</parent>
            <mandatory-aspects>
                <aspect>sc:protocollabile</aspect>              
            </mandatory-aspects>
        </type>     
</types>
<aspects>
    <aspect name="sc:protocollabile">
       <title>Previp Protocollo</title>
       <properties>
             <property name="sc:archiviata">
                <type>d:date</type>
                <mandatory>true</mandatory>
                </property>
             <property name="sc:codmodulo">
                   <type>d:text</type>            
                   <mandatory>true</mandatory>
             </property>
             <property name="sc:codprotocollo">
                   <type>d:text</type>            
                   <mandatory>true</mandatory>
             </property>      
             <property name="sc:codfiscale">
                   <type>d:text</type>            
                   <mandatory>true</mandatory>
             </property>      
             <property name="sc:cognome">
                   <type>d:text</type>            
                   <mandatory>true</mandatory>
             </property>      
             <property name="sc:nome">
                   <type>d:text</type>            
                   <mandatory>true</mandatory>
             </property>      
            
       </properties>
    </aspect>
   
</aspects>
     
     
</model>


E questo è il mio share-config-custom.xml:

<alfresco-config>
   <!– Document Library config section –>
   <config evaluator="string-compare" condition="DocumentLibrary">
      <aspects>
            <!– Aspects that a user can see –>
            <visible>
               <aspect name="sc:protocollabile" />            
            </visible>
            <!– Aspects that a user can add. Same as "visible" if left empty –>
            <addable>
            </addable>
            <!– Aspects that a user can remove. Same as "visible" if left empty
            –>
            <removeable>
            </removeable>
      </aspects>      
   </config>

   <config evaluator="aspect" condition="sc:protocollabile">
      <forms>
         <form>
            <field-visibility>
               <show id="sc:archiviata" />
               <show id="sc:codmodulo" />
               <show id="sc:codprotocollo" />
               <show id="sc:codfiscale" />
               <show id="sc:cognome" />
               <show id="sc:nome" />
            </field-visibility>
            <appearance>
               <field id="sc:archiviata" label-id="prop.sc_archiviata" />
               <field id="sc:codmodulo" label-id="prop.sc_codmodulo" />
               <field id="sc:codprotocollo" label-id="prop.sc_codprotocollo" />
               <field id="sc:codfiscale" label-id="prop.sc_codfiscale" />
               <field id="sc:cognome" label-id="prop.sc_cognome" />
               <field id="sc:nome" label-id="prop.sc_nome" />                                                            
            </appearance>
         </form>
      </forms>
   </config>

   <config replace="true" evaluator="string-compare" condition="AdvancedSearch">
      <advanced-search>
         <!– Forms for the advanced search type list –>
         <forms>
               <form labelId="search.form.label.cm_content" descriptionId="search.form.desc.cm_content">cm:content</form>
               <form labelId="search.form.label.cm_folder"   descriptionId="search.form.desc.cm_folder">cm:folder</form>
               <form labelId="type.sc_tipomodulo" descriptionId="search.form.desc.sc_tipomodulo">sc:tipomodulo</form>
         </forms>
      </advanced-search>
   </config>
   
   <config evaluator="model-type" condition="sc:tipomodulo">
      <forms>
         <!– Search form –>
         <form id="search">
            <field-visibility>
               <show id="sc:archiviata" />
               <show id="sc:codmodulo" force="true" />
               <show id="sc:codprotocollo" />
               <show id="sc:codfiscale" />
               <show id="sc:cognome" />
               <show id="sc:nome" />                                            
            </field-visibility>
            <appearance>
               <field id="sc:archiviata" label-id="prop.sc_archiviata">                     
                      <control template="/org/alfresco/components/form/controls/daterange.ftl" />
                      </field>
               <field id="sc:codmodulo" label-id="prop.sc_codmodulo">
                  <control template="/org/alfresco/components/form/controls/textfield.ftl" />
               </field>
               <field id="sc:codprotocollo" label-id="prop.sc_codprotocollo">
                      <control template="/org/alfresco/components/form/controls/textfield.ftl" />
                      </field>
                      <field id="sc:codfiscale" label-id="prop.sc_codfiscale">
                      <control template="/org/alfresco/components/form/controls/textfield.ftl" />
                      </field>
                      <field id="sc:cognome" label-id="prop.sc_cognome">
                      <control template="/org/alfresco/components/form/controls/textfield.ftl" />
                      </field>
                      <field id="sc:nome" label-id="prop.sc_nome">
                      <control template="/org/alfresco/components/form/controls/textfield.ftl" />
                      </field>
            </appearance>
         </form>
      </forms>
   </config>

</alfresco-config>  
6 Replies
davidciamberlan
Alfresco Employee

Re: Share - Advanced Search - Custom Aspect

Ciao

Solo una verifica al volo: attribuisci il tipo corretto al tuo documento quando lo crei (c'è una configurazione di share che ti permette di farlo)?

La ricerca avanzata così come mi sembra di vedere dalla tua configurazione si aspetta di trovare un documento di tipo sc:tipomodulo ma se tu non lo specifichi in fase di caricamento il doc ti viene creato di tipo cm:content e questo impedisce di trovare correttamente il tuo documento, anche se ha i metadati corretti.

luigi
Member II

Re: Share - Advanced Search - Custom Aspect

Ciao David,

ho provato ad inserire il documento sia con upload manuale che tramite programma java (librerie opencmis).
Nel primo caso, una volta effettuato l'upload gli aggiungo il mio custom aspect "protocollabile" e poi con
la funzione di menù "Edit properties" valorizzo i campi custom.

Nel caso del programma java carico e valorizzo direttamente i campi custom.

Tramite il workbench chemistry sembrano valorizzate correttamente. Ti allego uno screenshot.
Ma se le ricerco, non vengono trovate….

Luigi
davidciamberlan
Alfresco Employee

Re: Share - Advanced Search - Custom Aspect

Ciao,

quello che intendevo dire era: quando esegui una ricerca avanzata, scegli nella casella a discesa in alto a sinistra il tipo di documento sul quale vuoi eseguire la ricerca (dovresti vedere nel tuo caso: contenuto, cartelle e tipomodulo).

Con la configurazione che hai postato, per poter cercare i metadati del protocollo devi selezionare il tipo tipomodulo.
Facendo così però indichi ad Alfresco di cercare solo i nodi di tipo "tipomodulo".
Il documento però che mostri nella tua immagine non è di quel tipo (il tipo cmis è document che dovrebbe corrispondere al tipo cm:content di alfresco) e quindi non viene trovato.

Se ho capito male, correggimi pure.



luigi
Member II

Re: Share - Advanced Search - Custom Aspect

grazie David,
è esattamente quello che hai detto.
Ed in effetti adesso, tramite il programma java sono riuscito ad impostare il tipo corretto, ossia tipomodulo

Map newDocProps = new HashMap();

newDocProps.put(PropertyIds.OBJECT_TYPE_ID, "D:sc:tipomodulo,P:cm:titled,P:sc:protocollabile,P:cm:author");


, ma se faccio un upload manuale il documento caricato è sempre ti tipo "document".
(vedi screenshot in allegato).

Ho trovato in rete 2 tipi di approccio per aggirare il problema:
1. al momento dell'upload far scegliere il tipo documento (vedi il <a href="http://www.iptech-group.com/blog/alfresco-share-tip-content-type-selection-when-uploading-a-document...">post</a>) ossia nel mio caso document o tipomodulo, ma a me non permette alcuna scelta
pur avendo modificato il file
tomcat\webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\components\upload\flash-upload.get.js
con questo contentuto,

/**                                               
* Custom content types                           
*/                                               
function getContentTypes()                        
{                                                 
   // TODO: Data webscript call to return list of a
   var contentTypes = [                           
   {                                              
      id: "cm:content",                           
      value: "cm_content"                         
   },                                             
{                                                
   id: "sc:tipomodulo",                           
   value: "type.sc_tipomodulo"                    
}];                                               
                                                  
   return contentTypes;                           
}                                                 
                                                  
model.contentTypes = getContentTypes();           
                                                  
function main()                                   
{                                                 
   // Widget instantiation metadata…            
   var flashUpload = {                            
      id : "FlashUpload",                         
      name : "Alfresco.FlashUpload"               
   };                                             
   model.widgets = [flashUpload];                 
}                                                 
                                                  
main();                                           
                                                  



2. fare dopo l'upload il "change type" da menu (vedi il <a href="https://forums.alfresco.com/forum/installation-upgrades-configuration-integration/configuration/ive-...">post</a>),
e finalmente mi è apparsa la possibilità di cambiare il tipo in tipomodulo dopo aver inserito (come suggerito) nel file share-config-custom.xml questo codice:

      <!–
         Used by the "Change Type" action

         Define valid subtypes using the following example:
            <type name="cm:content">
               <subtype name="cm:mysubtype" />
            </type>

         Remember to also add the relevant i18n string(s):
            cm_mysubtype=My SubType
      –>
     <types>
          <type name="cm:content">
               <subtype name="sc:tipomodulo" />
            </type>

       
      </types>



A quel punto valorizzando i valori custom riesco a ritrovarli da Advanced Search !
Direi che mi può andare bene così !

Grazie!

Luigi
davidciamberlan
Alfresco Employee

Re: Share - Advanced Search - Custom Aspect

Ciao,

per fare il "change type" nel tuo caso, "sc:tipomodulo" deve essere sottotipo di cm:content.
Questo viene fatto con l'aggiunta del tag <subtype> nello share-config-custom.xml, come da te giustamente riportato.
Attenzione però che nel tuo codice c'è un errore

invece di:
<subtype name="cm:mysubtype" />

dovrebbe essere:
<subtype name="sc:tipomodulo" />


In questo modo puoi specializzare il tipo con "cambia tipo".

Se può interessarti, puoi associare i metadati dell'aspetto direttamente al tipo base cm:content, nell'advanced search.
Devi valutare però se questo si adatta al tuo caso perchè poi nella ricerca avanzata ti ritrovi sempre i campi del tuo aspect.

Per farlo devi modificare (come al solito) il file share-config-custom.xml, aggiungendo (con le opportune modifiche per il tuo caso) quanto segue:



<config evaluator="model-type" condition="cm:content" force="true">
        <forms>
            <!– Search form –>
            <form id="search">
                <field-visibility>
                    <show id="cm:name" />
                    <show id="cm:title" force="true" />
                    <show id="cm:description" force="true" />
                    <show id="shc:type" force="true" />
                    <show id="shc:owner" force="true" />
                    <show id="shc:dateAdopted" force="true" />
                    <show id="shc:reviewDate" force="true" />
                   
                    <!– tuoi campi custom –>
                    <show id="sc:cognome" force="true"  />
                    <show id="sc:nome" force="true"  />   
                   
                </field-visibility>
               
                <appearance>
                    <field id="shc:reviewDate">
                        <control template="/org/alfresco/components/form/controls/daterange.ftl" />
                    </field>
                    <field id="shc:dateAdopted">
                        <control template="/org/alfresco/components/form/controls/daterange.ftl" />
                    </field>
                   
                    <!– campi custom –>
                    <field id="sc:cognome" label-id="prop.sc_cognome">
                        <control template="/org/alfresco/components/form/controls/textfield.ftl" />
                    </field>

                    <field id="sc:nome" label-id="prop.sc_nome">
                        <control template="/org/alfresco/components/form/controls/textfield.ftl" />
                    </field>
                </appearance>
            </form>
        </forms>
    </config>



luigi
Member II

Re: Share - Advanced Search - Custom Aspect

la configurazione per il change type è ok!
grazie
luigi