Child Association Javascript

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

Child Association Javascript

Buenas,

tengo una duda sobre como tratar las child association desde un script de javascript.
Pondré un ejemplo, tengo estos 2 tipos, A y B, donde B tiene definida una asociación de documentos de tipo A
<type name="x:a">
   <title>A</title>
   <parent>cm:content</parent>
   <properties>
      <property name="x:campo1">
         <title>campo 1</title>
         <description>Descripción campo 1</description>
         <type>d:text</type>
         <mandatory>false</mandatory>
         <default></default>
      </property>
   </properties>
</type>
<type name="x:b">
   <title>B</title>
   <parent>cm:content</parent>
   <properties>
      <property name="x:campo2">
         <title>campo 2</title>
         <description>Descripción campo 2</description>
         <type>d:text</type>
         <mandatory>false</mandatory>
         <default></default>
      </property>
   </properties>

   <associations>
      <child-association name="x:asocA">
         <source>
            <mandatory>false</mandatory>
            <many>false</many>
         </source>
         <target>
            <class>x:a</class>
            <mandatory>false</mandatory>
            <many>false</many>
         </target>
      </child-association>
   </associations>
</type>

ahora imaginemos que tengo 1 documento A y 1 documento B
A1.txt
B1.txt

como creo la child association en B con javascript?

una asociación normal se haria de este modo:
nodoB.createAssociation(nodoA, "x:asocA"); //Crea asociación entre el nodo B y el nodo A

Pero esto no me funciona para las child-association, no me da ningún error, pero a la que voy al nodoB, este no tiene ninguna asociación con el nodoA…

Muchas gracias de antemano
9 Replies
cybermakoki
Member II

Re: Child Association Javascript

Hola Rubén,

En principio, el código javascript está bien…  has mirado por el node browser a ver si tiene bien la asociación??

como la visualizas en el web-client-config-custom??
ruben_arjonilla
Member II

Re: Child Association Javascript

<config evaluator="node-type" condition="x:b">
      <property-sheet>
         <show-property name="x:campo2" display-label="Campo 2" />
         <show-child-association name="x:asocA" display-label="Asociacion A"/>
      </property-sheet>
   </config>

El problema es que con esa linea javascript, lo que estoy creando no es una child-association, sinos una asociación normal.

Despues de haber ejecutado varias veces el script, si pusiera esto otro:

<config evaluator="node-type" condition="x:b">
      <property-sheet>
         <show-property name="x:campo2" display-label="Campo 2" />
         <show-association name="x:asocA" display-label="Asociacion A"/>
      </property-sheet>
   </config>

en vez de show-child-association

salen de golpe todas las asociaciones creadas, es decir, si he ejecutado 6 veces el script, sale 6 veces la asociación normal.

Es decir, que la linea de javascript esa no sirve para child-association Smiley Frustrated
cybermakoki
Member II

Re: Child Association Javascript

Pues tienes razón…

a mi me pasó algo parecido, he encontrado esto en el foro de inglés:

http://forums.alfresco.com/en/viewtopic.php?f=46&t=18027


a lo mejor te puede servir de ayuda Smiley Happy
ruben_arjonilla
Member II

Re: Child Association Javascript

Gracias, me lo miraré a ver que tal.

Pero no se como crear un script en java (hasta ahora solo los he creado en javascript), no se donde hay que poner los archivos ni como crearlos ni nada :?
Supongo que primero tendré que empezar por ahí
cybermakoki
Member II

Re: Child Association Javascript

Pues mira…

yo al principio empecé a hacerlo todo con javascripts, y al final he desistido porque no conseguia controlar bien el tema de errores y tenia pocas opciones…

para ejecutar las reglas, opté por crearme un ActionExecuter por cada una de las reglas…

yo lo que tengo es un proyecto java, con X clases y luego lo exporto como JAR y lo meto en Alfresco/tomcat/…..alfresco/WEB-INF/lib

los ActionExecuter tienen la siguiente estructura:

Te creas una clase MiClaseExecuter que extienda de ActionExecuterAbstractBase

y te obligará a implementar los métodos:

 

private NodeService nodeService;

protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
    { …Código que se ejecutará cuando definas la regla…}

   

y

  protected void addParameterDefinitions(List<ParameterDefinition> paramList)
    {
        // none required
    }

    public NodeService getNodeService(){
          return nodeService;
}



Cuando hayas creado tu clase, la añades la referencia en custom-model-context.xml (Añades tantas propiedades como te hagan falta, nodeService, contenService, searchService…)

    <bean id="miClase" class="alfresco.org.custom.executer.MiClaseExecuter" parent="action-executer">
        <property name="nodeService">
            <ref bean="nodeService" />  <!– runtime nodeService –>
        </property>
    </bean>  


luego tendrás que modificar el fichero D:\Alfresco\tomcat\shared\classes\alfresco\messages\action-config_es_ES.properties

y añadir el texto para tu acción:


miClase.title=Crear una asociación padre-hijo
miClase.description=Acción que crea una asociación padre e hijo

Una vez hecho esto, cuando vayas a crear una regla para un espacio, esta acción te aparecerá en el desplegable…

pudiendo ya programar en java, creo que puedes hacer algo como esto:

java.lang.Object
  extended by org.alfresco.service.cmr.repository.ChildAssociationRef

ChildAssociationRef

public ChildAssociationRef(QName assocTypeQName,
                           NodeRef parentRef,
                           QName childQName,
                           NodeRef childRef,
                           boolean isPrimary,
                           int nthSibling)

    Construct a representation of a parent — name —-> child relationship.

    Parameters:
        assocTypeQName - the type of the association
        parentRef - the parent reference - may be null
        childQName - the qualified name of the association - may be null
        childRef - the child node reference. This must not be null.
        isPrimary - true if this represents the primary parent-child relationship
        nthSibling - the nth association with the same properties. Usually -1 to be ignored


No se si te he liado más… pero desde luego, tienes más posibilidades que con javascript… y un mayor control de errores…

suerte Smiley Happy
ruben_arjonilla
Member II

Re: Child Association Javascript

Lo intentare de este modo.
Si que lo he entendido, solo tengo una pequeña duda.
Al proyecto este java, le pones alguna dependencia, o alguna librería hacia alfresco? o ActionExecuterAbstractBase es una clase de una librería estándar?
Lo digo para la hora de programar (utilizo eclipse) no me coge la clase "ActionExecuterAbstractBase", no sabe donde encontrarla, ni se que import tengo que ponerle.

Muchísimas gracias por todo Smiley Happy
cybermakoki
Member II

Re: Child Association Javascript

Con que te importes las librerias de Alfresco en el eclipse ya te vale, para tener las clases… luego en la instalación ya las tienes asiq no te hacen falta más que para programar Smiley Happy
ruben_arjonilla
Member II

Re: Child Association Javascript

Ok, muchas gracias.
Probaré con java a ver que tal me va.
cybermakoki
Member II

Re: Child Association Javascript

Suerte!! si tienes cualquier problema ya sabes donde estamos Smiley Happy