Especializar un contenido

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

Especializar un contenido

Hola,

He creado un 'content model' para mi proyecto, quisiera que al subir contenidos ya los suba con esa especializacion, y ademas que tambien le pueda pasar las propiedades correspondientes.

Es posible hacer esto con Java Web Services?

Un ejemplillo?

Gracias.
12 Replies
pjcaracuel_2349
Active Member II

Re: Especializar un contenido

Buenas,

Este post te puede servir como guia.
http://forums.alfresco.com/en/viewtopic.php?t=7346

Saludos
uridium
Member II

Re: Especializar un contenido

Ok,  muchas gracias, me lo miro.

Me descuidaba un pequeño detalle, una de las propiedades del Content Model es un campo tipo 'Observaciones' y no veo la forma de especificarlo en el modelo, de momento he usado el tipo d:text pero se muestra como un campo normal de texto.

Como hay que indicar para que aparezca en la forma de campo de texto mas amplio?

gracias.
pjcaracuel_2349
Active Member II

Re: Especializar un contenido

Si no te he entendido mal, en este enlace de la wiki, tienes la solucion
http://wiki.alfresco.com/wiki/Simple_Customisations#Using_A_TextArea

Saludos
uridium
Member II

Re: Especializar un contenido

Hola,

Si, me has entendido bien, y me ha funcionado, aunque he tenido que cambiar algo, pero finalmente he conseguido lo que buscaba. Me refiero al tema del campo de observaciones.

En cuanto al tema de especializar el contenido, no me funciona el ejemplo que me comentas, pero quiero trabajarlo un poco mas todavia.

Puse esta misma consulta en el foro en Ingles pero nadie me ha constestado, mi pregunta sería si existe alguna documentación sobre WS API completita y con ejemplos, o alguna manera de obtener respuestas concretas a temas concretos aparte del foro?
Comento esto porque el tema de especializar contenidos no debe ser tan extraño como para que nadie se haya encontrado con el, por otro lado necesito la solucion a este problema pues es un desarrollo que tengo comprometido. He buscado sobre la especializacion pero no encuento nada, quizas el problema esté en los terminos de busqueda pero no se ocurre como hacerlo de otra forma.  Ofrece Alfresco algun servicio de consulta que pueda yo utilizar (sin ser partner) al fin y al cabo el problema se deberia resolver con 4 lineas de codigo.

Enfin, darte las gracias de nuevo por tu efectiva ayuda y por aguantar este rollo mio existencial.
Saludos.
pablo_zapico
Member II

Re: Especializar un contenido

Buenos dias

Para el tema del campo observaciones que comentas te indico dos ficheros que pueden serte de ayuda.

dictionaryModel.xml
contentModel.xml

su path es: \alfresco\tomcat\webapps\alfresco\WEB-INF\classes\alfresco\model

En el fichero dictionaryModel se definen los tipados que estan permitidos. El campo descripcion que es multilinea lo tiene puesto

 <property name="cm:description">
               <title>Description</title>
               <type>d:mltext</type>
            <index enabled="true">
              <atomic>true</atomic>
              <stored>false</stored>
                  <tokenised>both</tokenised>
               </index>
            </property>

Sobre el tema de Servicios Web, no se si entendi muy bien lo que buscas.. yo estoy pegando ahora cn SW, quieres que un nuevo contenido se cree ya con el tipo definido por ti?. Si es eso no es nada complicado

Estoy haciendo pruebas sobre el campo observaciones pero no acabo de dar con ello..

http://wiki.alfresco.com/wiki/Data_Dictionary_Guide

Lo mas probable es que se tenga que crear una constraint… seguire mirando
pablo_zapico
Member II

Re: Especializar un contenido

Vale ya di con ello… No se debe de cambier en el modelo definido si no en web-client-config-custom.xml.


                  <show-property name="miModelo:nombre" component-generator="TextAreaGenerator"/>

De esta forma mostrara un textarea. Encontre tb por la wiki que se puede definir el numero de columnas y filas

http://wiki.alfresco.com/wiki/Simple_Customisations


Para definir el numero de columnas y filas seria en el fichero faces-config-custom.xml

<managed-bean>
   <managed-bean-name>TextAreaGenerator</managed-bean-name>
   <managed-bean-class>org.alfresco.web.bean.generator.TextAreaGenerator</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
   <managed-property>
      <property-name>rows</property-name>
      <value>10</value>
   </managed-property>
   <managed-property>
      <property-name>columns</property-name>
      <value>75</value>
   </managed-property>
</managed-bean>


Espero que esto te sirva
uridium
Member II

Re: Especializar un contenido

Hola,

El tema del "texArea" ya lo tengo resuelto, el problema que mas me preocupa y no he podido resolver aun es el de la especializacion de un contenido cuando lo subo.

He definido un modelo "efacturaModel", para subir documentos a Alfresco que son facturas electronicas y para ello he definido el modelo pues les asocio unos atributos especiales como numero de factura, proveedor, tipo de firma digital si ha sido validada o no etc.

El modelo funciona perfectamente pues desde Alfresco una vez he subido un contenido puedo ir a la opcion 'run action' y selecciono 'specialise the type of an item' me aparece el model que yo he definido 'efacturaModel' y seguidamente puedo modificar los nuevos atributos que ya he comentado.

Mirando en el node browser (una vez cambiado el tipo) veo que en el campo type del contenido indica:

{http://www.ccsagresso.com/model/content/1.0}efacturaModel

Que es obviamente es el que yo he definido. Cuando intento subir un contenido desde el WS con el siguiente codigo:

NamedValue[] contentProps = new NamedValue[1];
contentProps[0]= Utils.createNamedValue(Constants.PROP_NAME, name);            
CMLCreate create = new CMLCreate(
         "1",
         companyHomeParent,
         null,
         null,
         null,
         "{http://www.ccsagresso.com/model/content/1.0}efacturaModel",
         contentProps);

Al ejecutar el CML me dice que "{http://www.ccsagresso.com/model/content/1.0}efacturaModel" no está definido en el data dictionary. lo cual me confunde.
Tambien necesitaria informar los valores de los nuevos atributos (imagino que a traves del CMLAddAspect) pero tampoco estoy seguro.

Bueno si tienes algo ya me contarás.

Muchisimas gracias.
pablo_zapico
Member II

Re: Especializar un contenido

Buenas, tngo que buscar el servicio web donde creo documentos, pero mira tngo uno que actualiza contenidos y es mas que probable el que funcionamiento sea practicamente el mismo. Te pego el codigo.


String aspectString = Constants.createQNameString("modelo.regasoc", "aspectRegasoc");  // Mi tipo de contenido
NamedValue[] titledProps = this.cargaPropiedades(content, nombre);

CMLAddAspect addAspect = new CMLAddAspect();
addAspect.setAspect(aspectString);
addAspect.setWhere(predicate);
addAspect.setProperty(titledProps);


/ Se prepara el objeto que se enviara al webService
CMLUpdate update = new CMLUpdate();
CML cml = new CML();      
cml.setUpdate(new CMLUpdate[] {update});
update.setWhere(predicate);
cml.setAddAspect(new CMLAddAspect[] {addAspect});
      
UpdateResult[] results = WebServiceFactory.getRepositoryService().update(cml);      


Te pego el metodo que carga tb las propiedades

   /**
    * cargarPropiedades
    * @param content - VO con las propiedades de cada elemento
    * @return NamedValue[] - Propiedades cargadas en array
    */
   private NamedValue[] cargaPropiedades(ContentVO content, String nombre){
      NamedValue[] titledProps = new NamedValue[3];
      titledProps[0] = Utils.createNamedValue(Constants.createQNameString("modelo.regasoc", "nombre"), nombre);
      titledProps[1] = Utils.createNamedValue(Constants.PROP_TITLE, nombre);
      titledProps[2] = Utils.createNamedValue(Constants.PROP_DESCRIPTION, nombre);
      return titledProps;
   }

Si necesitas más codigo o ayuda sobre esto codigo me dices… si pones create en vez de update te deberia de funcionar.

Saludos
uridium
Member II

Re: Especializar un contenido

Hola,

Muchas gracias a todos !!!,

ya me funciona, el codigo que habia escrito era correcto, pero en lugar de "efacturaModel" que es el modelo, tenia que indicar "efacturaRecord", y ya funciona, incluso pasa los datos especificos de la factura etc.

No me lo puedo creer.

Lo dicho, muchas gracias a todos.