cancel
Showing results for 
Search instead for 
Did you mean: 

No asigna valores a las propiedades personalizadas

adyp
Champ on-the-rise
Champ on-the-rise

Buenas Tardes,
Utilizo alfresco 5.2
Cmis 1.1
Requiero asignar propiedades personalizadas, tales como: (intTipoDocumento , strTipoDocumento , etc),
para ello que creado un aspecto y propiedades para ese aspecto utilizando alfresco share
Para asginar el aspecto al documento he seguido estos pasos :
https://docs.alfresco.com/5.2/pra/1/concepts/opencmis-ext-creating-aspects.html
Cuando veo el documento por cmis workbench observo el aspecto que esta dentro de "Secondary objetType lds" como uno de sus valores y
a las propiedades personalizadas fuera del "Secondary objetType lds" pero sin valores asignados .
Mi codifo es este :
lProperties.put(PropertyIds.NAME, name);
lProperties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document,PSmiley Very HappyocServ:AspectDocServicio");
lProperties.put(PropertyIds.DESCRIPTION , objDocumentoServicio.getStrObservacion());
lProperties.put("DocServ:intTipodocId", intTipoDocumento);
lProperties.put("DocServ:strTipoDoc", strTipoDocumento);

El aspecto y la definicion de las propiedades ya estan credas , pero la asignacion del aspecto y delas propiedades se harian al subir el documento a alfresco via cmis.
Que estoy haciendo mal ?

1 ACCEPTED ANSWER

angelborroy
Community Manager Community Manager
Community Manager

Lo he probado y definitivamente esto funciona. Lo único que veo es que no has definido un Layout con el Gestor de Modelos para que muestre los campos en la aplicación web Share, por lo que he utilizado el Navegador de Nodos para verificar los resultados.

Te pongo debajo el código fuente que he utilizado por si te sirve de ayuda.

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.Repository;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.client.api.SessionFactory;
import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.enums.BindingType;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;

public class App {
     
     public static void main(String... args) throws Exception {
          
          SessionFactory sessionFactory = SessionFactoryImpl.newInstance();

          Map<String, String> parameters = new HashMap<String, String>();

          // Se utilizan las credenciales admin/admin
          parameters.put(SessionParameter.USER, "admin");
          parameters.put(SessionParameter.PASSWORD, "admin");

          // Se utiliza protocolo BROWSER en el servidor alfresco "localhost:8080"
          // Aunque también podría utilizarse ATOM
          parameters.put(SessionParameter.BROWSER_URL,
           "http://localhost:8080/alfresco/api/" +
           "-default-/public/cmis/versions/1.1/browser");
          parameters.put(SessionParameter.BINDING_TYPE, BindingType.BROWSER.value());

          // Se ajustan estos parámetros para un mejor rendimiento
          parameters.put(SessionParameter.COMPRESSION, "true");
          parameters.put(SessionParameter.CACHE_TTL_OBJECTS, "0");

          // Se obtiene el repositorio de Alfresco (por defecto solo hay 1, así que se coge el primero)
          Repository repository = sessionFactory.getRepositories(parameters).get(0);

          // Se obtiene una sesión
          Session session = repository.createSession();
          
          // Se crean las propiedades básicas del tipo
          Map<String, Object> properties = new HashMap<String, Object>();
          properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
          properties.put(PropertyIds.NAME, "myNewDocument.txt");

          // Se asigna la lista de aspectos y sus propiedades
          // Los aspectos son almacenados en una lista!
          List<Object> aspects = new ArrayList<Object>();
          aspects.add("P:ds:aspectoDocumentoServicio");
          properties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, aspects);
          properties.put("ds:strTipoDocumento", "strTipoDocumento");
          properties.put("ds:intServicioId", 1);
          properties.put("ds:strNombreCliente", "strNombreCliente");
          properties.put("ds:strNombreServicio", "strNombreServicio");
          properties.put("ds:intTipoDocumentoId", 1);

          // Se crea el fichero contenido
          byte[] content = "Hello World!".getBytes();
          InputStream stream = new ByteArrayInputStream(content);
          ContentStream contentStream =
           new ContentStreamImpl("myNewDocument.txt", BigInteger.valueOf(content.length), "text/plain", stream);

          // Se crea el documento
          Folder parent = (Folder) session.getObjectByPath("/Shared");
          Document doc = parent.createDocument(properties, contentStream, VersioningState.MAJOR);
          
     }

}
Hyland Developer Evangelist

View answer in original post

11 REPLIES 11

adyp
Champ on-the-rise
Champ on-the-rise

Efectivamente funciona Smiley Happy, ahora si escribe en las propiedades creadas.

En si fueron varios pequeños errores mezclados:

si agrego los aspectos como este link lo indica

https://docs.alfresco.com/5.2/pra/1/concepts/opencmis-ext-creating-aspects.html

properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document,P:cm:titled");

me tira error,  es por eso que le agregaba la linea 

parameters.put(SessionParameter.OBJECT_FACTORY_CLASS, "org.alfresco.cmis.client.impl.AlfrescoObjectFactoryImpl"); para solucionarlo y también por que solucionaba un error de logeo pasado.

pero al agregar esa linea hacia que no se seteen las propiedades, por eso mi confusión ya que el link es la info oficial de alfresco y no me animaba a cambiarlo hasta que subiste este ultimo código.

Muchas gracias, 

angelborroy
Community Manager Community Manager
Community Manager

Esa documentación hace referencia a OpenCMIS 1.0.

Si usas CMIS 1.1, no aplica.

Hyland Developer Evangelist