cancel
Showing results for 
Search instead for 
Did you mean: 

¿cómo crear un espacio nuevo y subir un archivo?

jaime_martin
Champ in-the-making
Champ in-the-making
hola:
Siento si es una pregunta muy fácil, pero agradecería mucho alguna indicación entre tanta API y wiki.
Quiero crear desde una aplicación java un espacio BBB, que esté bajo otro que ya existe (por ejemplo tengo un AAA bajo User Homes),
Es decir quiero tener la estructura User Homes –> BBB –> AAA)

Por otro lado quiero subir después un archivo ya existente, por ejemplo C:\pruebas\jmp.txt,  al espacio User Homes –> BBB –> AAA.

En FirstWebServiceClient he visto algo de luz pero no consigo hacer lo que quiero. Si hay que meterse en tema de protocolos prefiero WebDav. No sé si es posible hacer esto desde Java con la API WebService de Alfresco (creo que esta es la API que debo usar frente a las otras 2) o si habría que instalarse algo más tipo Webdav client 4 java. Creo que no debería ser necesario.
mcuhas gracias!
6 REPLIES 6

jaime_martin
Champ in-the-making
Champ in-the-making
hola:
Me respondo a parte de la duda. Con este código creo un espacio, que está ubicado en MyHome


public static void crearEspacio() {
        try {
     ParentReference parentReference = new ParentReference(
             STORE,
             null,
             "/app:company_home/",
             Constants.ASSOC_CONTAINS,
             Constants.createQNameString(Constants.NAMESPACE_CONTENT_MODEL, "sample_folder"));

     NamedValue[] properties = new NamedValue[]{Utils.createNamedValue(Constants.PROP_NAME, "AAA")};
     CMLCreate create = new CMLCreate("1", parentReference, null, null, null, Constants.TYPE_FOLDER, properties);
     CML cml = new CML();
     cml.setCreate(new CMLCreate[]{create});
     UpdateResult[] results = WebServiceFactory.getRepositoryService().update(cml);               
     System.out.println("ESPACIO CREADO!!");
        }
        catch (Exception exception)
     {
        System.out.println("EXCEPTION "+exception.getMessage());
     }
}


Sin embargo , ahora intento hacer lo mismo con BBB cambiando esto:

     ParentReference parentReference = new ParentReference(
             STORE,
             null,
             "/app:company_home/AAA",
             Constants.ASSOC_CONTAINS,
             Constants.createQNameString(Constants.NAMESPACE_CONTENT_MODEL, "sample_folder"));

     NamedValue[] properties = new NamedValue[]{Utils.createNamedValue(Constants.PROP_NAME, "BBB")};

pero me genera una excepción

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
faultSubcode:
faultString:
faultActor:
faultNode:
faultDetail:
   {http://www.alfresco.org/ws/service/repository/1.0}RepositoryFault:<ns1:errorCode>0</ns1:errorCode><ns1:message>org.alfresco.service.cmr.repository.XPathException: Error executing xpath:
   xpath: /app:company_home/</ns1:message>
   {http://xml.apache.org/axis/}exceptionName:org.alfresco.repo.webservice.repository.RepositoryFault
   {http://xml.apache.org/axis/}stackTrace:
   at org.alfresco.repo.webservice.repository.RepositoryWebService.update(RepositoryWebService.java:341)

y ojeando la API solo sé que ParentReference espera un String en ese parámetro. Está claro que no indico bien el sitio en que quiero crear el espacio. ¿alguna idea?

fstnboy
Champ on-the-rise
Champ on-the-rise
Yo hago lo siguiente:

Después de crearme la primera carpeta, me guardo su referencia:


Reference padre = results[0].getDestination();

Ya tengo la referencia del padre, por lo que a la hora de pasarle el parentReference para crear la carpeta utilito el método siguiente:


private static ParentReference damePadreRef(Store almacen,Reference carpetaRef){
         return new ParentReference(almacen,carpetaRef.getUuid(),carpetaRef.getPath(),Constants.ASSOC_CONTAINS,null);
      }

el parámetro almacén sería el storeReference.

Espero que te sirva!

Un saludo.

jaime_martin
Champ in-the-making
Champ in-the-making
muchas gracias fstnboy!!
He hecho un pequeño cambio ya que me salía esta excepción:

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
faultSubcode:
faultString:
faultActor:
faultNode:
faultDetail:
   {http://www.alfresco.org/ws/service/repository/1.0}RepositoryFault:<ns1:errorCode>0</ns1:errorCode><ns1:message>org.alfresco.service.namespace.InvalidQNameException: Argument qname is mandatory</ns1:message>
   {http://xml.apache.org/axis/}exceptionName:org.alfresco.repo.webservice.repository.RepositoryFault

Para evitarlo he definido la QNAme de esta manera:


     private static ParentReference damePadreRef(Store almacen,Reference carpetaRef){
          return new ParentReference(almacen,carpetaRef.getUuid(),carpetaRef.getPath(),Constants.ASSOC_CONTAINS,
                 Constants.createQNameString(Constants.NAMESPACE_CONTENT_MODEL, "espacio_hijo"));
      }    
¿a ti te funciona sin definir la QName?

jaime_martin
Champ in-the-making
Champ in-the-making
fstnboy, y  a quien pueda interesarle:
He descubierto como mejorar lo de antes y lo comento por si le resulta útil a alguien.
La solución que me comentabas obtenía la refrencia tras haber creado el nodo padre, pero tenía la limitación de que partíamos de un espacio recien creado para tener la referencia del mismo. Si se quiere crear un espacio en otro ya existente que estaba bajo otro ya existente no podía indicar en la referencia ese nivel de anidamiento y los creaba en la raíz, a menos que lo crease bajo algo recien creado.
Pues bien, la referencia anidada he visto tras varias pruebas que se puede hacer así: (por ejemplo quiero crear un espacio dentro de otro llamado BBB, que a su vez está bajo otro llamado AAA
La referencia de partida sería ésta

Reference refer = new Reference(STORE, null, "/app:company_home/*[@cm:name=\"" + "AAA" + "\"]" + "/*[@cm:name=\"" + "BBB" + "\"]"  );

y ya después lo que comentábamos antes, es decir esa referencia se usaría para obtener el ParentReference que luego se emplearia en el CMLCreate.
Espero que sea de ayuda.

jariel06
Champ in-the-making
Champ in-the-making
Hola comunidad, tengo un pequeño problema, estoy intentando crear un nuevo espacio en el alfresco pero desde PHP, y no he podido y me gustaria que si alguno de ustedes lo ha hecho, o si halogrado acceder a los contenidos de alfresco desde PHP, que me ayude, estoy utilizando una api de PHP (http://wiki.alfresco.com/wiki/Alfresco_PHP_API), si alguien conoce algo mejor, por favor necesito algo de ayuda en el tema…

Saludos y gracias de antemano…

fstnboy
Champ on-the-rise
Champ on-the-rise
Buenas xerox!

Nunca he creado un espacio desde PHP, yo lo he hecho desde Java, pero intenta mirarte el artículo de Jeff Potts en http://ecmarchitect.com/images/articles/alfresco-content/content-article.pdf

Espero que te sirva!

Saludos