05-11-2018 02:02 PM
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,PocServ: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 ?
05-15-2018 03:41 AM
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);
}
}
05-15-2018 12:07 PM
Efectivamente funciona , 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,
05-15-2018 04:24 PM
Esa documentación hace referencia a OpenCMIS 1.0.
Si usas CMIS 1.1, no aplica.
Tags
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.