Error en operaciones con objeto predicado
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-20-2010 02:27 AM
Hola,
estoy trabajando en una integración con Alfresco desde una aplicación de escritorio con tecnología .net, en concreto c#
En general el desarrollo está marchando bien pero tengo un problema con operaciones en las que uso un predicado para el objeto cml. Monto todos los objetos, predicado, cml y al llamar a update me devuelve una excepción y no sé cómo atacarla.
Os pongo un ejemplo de un método que he preparado para cambiarle un nombre a una carpeta utilizando un ejemplo de está página
http://wiki.alfresco.com/wiki/IngresTutorial_Alfresco_Web_Service_API_for_Java#Move_a_space
Mi código sería:
ConvertirAPadre: crea un objeto ParentReference de la referencia destino (carpeta en la que queremos dejar el nuevo directorio)
Además, ¿hay algún sito de dónde pueda sacar código en c# de ejemplo?
Gracias por vuestra ayuda
estoy trabajando en una integración con Alfresco desde una aplicación de escritorio con tecnología .net, en concreto c#
En general el desarrollo está marchando bien pero tengo un problema con operaciones en las que uso un predicado para el objeto cml. Monto todos los objetos, predicado, cml y al llamar a update me devuelve una excepción y no sé cómo atacarla.
Os pongo un ejemplo de un método que he preparado para cambiarle un nombre a una carpeta utilizando un ejemplo de está página
http://wiki.alfresco.com/wiki/IngresTutorial_Alfresco_Web_Service_API_for_Java#Move_a_space
Mi código sería:
ConvertirAPadre: crea un objeto ParentReference de la referencia destino (carpeta en la que queremos dejar el nuevo directorio)
private void MoverDirectorio(Reference directorio, Reference destino, string nombreNuevo, string nombreViejo) { ParentReference padreDestino = ConvertirAPadre(destino); padreDestino.childName = Constantes.crearQNameString(Constantes.NAMESPACE_CONTENT_MODEL, Constantes.normaliza(nombreNuevo)); CMLMove cmlMover = new CMLMove(); cmlMover.childName = Constantes.crearQNameString(Constantes.NAMESPACE_CONTENT_MODEL, nombreViejo); cmlMover.associationType = Constantes.ASSOC_CONTAINS; cmlMover.to = padreDestino; Predicate pred = new Predicate(); pred.Items = new Reference[]{directorio}; cmlMover.where = pred; //move.setWhere(new Predicate(new Reference[] {space},STORE,null)); NamedValue nvalue = new NamedValue(); nvalue.name = Constantes.PROP_NAME; nvalue.value = nombreNuevo; CMLUpdate cmlActualizar = new CMLUpdate(); cmlActualizar.property = new NamedValue[] { nvalue }; cmlActualizar.where = pred; //cmlActualizar.where_id = this.contenedorCarpetas.address; //update.setWhere(new Predicate(new Reference[]{space},STORE,null)); CML cml = new CML(); cml.move = new CMLMove[]{cmlMover}; cml.update = new CMLUpdate[]{cmlActualizar}; //Execute the CML move and Update statement try { servicioRepository.update(cml); } catch (Exception e2) { throw e2; } }
En el ejemplo de la página construyen el objeto predicado pasándole un store general, pero el constructor del predicado no tiene parámetros, así que no sé cómo hacerlo.Además, ¿hay algún sito de dónde pueda sacar código en c# de ejemplo?
Gracias por vuestra ayuda
Labels:
- Labels:
-
Archive
6 REPLIES 6
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-20-2010 01:32 PM
Se que no es tu caso concreto, pero por si te vale, ahí te dejo un ejemplo de función que genera una subcarpeta con el año actual en el "pReference" que le pases :
(espero que no se haya colado ninguna errata :mrgreen
Saludos,
//crear la estructura por defecto para cada usuario nuevo private bool gfCrearSubcarpetaAnno(Alfresco.RepositoryWebService.Reference pReference, string NombreEmpleado) { if (pReference != null)//comprobamos que el parentreference no es nulo { Alfresco.RepositoryWebService.ParentReference parentReference = new Alfresco.RepositoryWebService.ParentReference(); parentReference.store = shell.spacesStore; try { parentReference.uuid = pReference.uuid; //creamos la ruta codificada parentReference.associationType = Constants.ASSOC_CONTAINS; parentReference.childName = Constants.createQNameString(Constants.NAMESPACE_CONTENT_MODEL, DateTime.Now.Year.ToString()); Alfresco.RepositoryWebService.NamedValue[] properties = new Alfresco.RepositoryWebService.NamedValue[3]; // Creamos la lista de propiedades Alfresco.RepositoryWebService.NamedValue nameProperty = new Alfresco.RepositoryWebService.NamedValue(); nameProperty.name = Constants.PROP_NAME; nameProperty.value = DateTime.Now.Year.ToString(); nameProperty.isMultiValue = false; properties[0] = nameProperty; nameProperty = new Alfresco.RepositoryWebService.NamedValue(); nameProperty.name = Constants.PROP_TITLE; nameProperty.value = DateTime.Now.Year.ToString(); nameProperty.isMultiValue = false; properties[1] = nameProperty; nameProperty = new Alfresco.RepositoryWebService.NamedValue(); nameProperty.name = Constants.PROP_DESCRIPTION; nameProperty.value = "Documentos del año " + DateTime.Now.Year.ToString(); nameProperty.isMultiValue = false; properties[2] = nameProperty; // Creamos el objeto CMLCreate CMLCreate create = new CMLCreate(); create.parent = parentReference; create.id = "1"; create.type = Constants.TYPE_FOLDER; create.property = properties; // Creamos y ejecutamos la sentencia CML cml = new CML(); cml.create = new CMLCreate[] { create }; UpdateResult[] updateResult = shell.repoService.update(cml); return true; } //error al crear espacio catch (Exception ex) { return false; } } }
Espero que te sirva .. y si tienes dudas pregunta sin miedo .. te echaré una mano en lo que pueda :wink:.(espero que no se haya colado ninguna errata :mrgreen

Saludos,
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-21-2010 03:26 AM
Hola,
gracias por el ejemplo, pero no es exactamente lo que busco.
Tengo una serie de objetos y métodos que me permiten crear directorios (de forma similar al código que has posteado), buscar directorios y/o ficheros, subir y bajar ficheros tirando contra los webservice Content y Repository. Con esto "integro" la gestión documental de Alfresco con la aplicación de escritorio. El caso es que necesito cambiar el nombre de la carpeta asociada a un expediente debido a acciones que realiza el usuario desde la aplicación de escritorio.
¿Cómo renombro el store? ¿Se puede hacer con un comando cml sin utlizar un objeto predicado? Y ya que estamos, como comenté en el anterior post, al utilizar un comado update con un objeto predicado me salta una excepción sin texto ¿cómo puedo saber qué me está fallando? Mi experencia trabajando con tomcat y similares es cero pelotero asi que lo de mirar logs de catalina y tal se me da bastante mal
Gracias por tu ayuda
gracias por el ejemplo, pero no es exactamente lo que busco.
Tengo una serie de objetos y métodos que me permiten crear directorios (de forma similar al código que has posteado), buscar directorios y/o ficheros, subir y bajar ficheros tirando contra los webservice Content y Repository. Con esto "integro" la gestión documental de Alfresco con la aplicación de escritorio. El caso es que necesito cambiar el nombre de la carpeta asociada a un expediente debido a acciones que realiza el usuario desde la aplicación de escritorio.
¿Cómo renombro el store? ¿Se puede hacer con un comando cml sin utlizar un objeto predicado? Y ya que estamos, como comenté en el anterior post, al utilizar un comado update con un objeto predicado me salta una excepción sin texto ¿cómo puedo saber qué me está fallando? Mi experencia trabajando con tomcat y similares es cero pelotero asi que lo de mirar logs de catalina y tal se me da bastante mal
Gracias por tu ayuda
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-21-2010 04:01 AM
Hola de nuevo, siento no tener tiempo ahora mismo para explicarte lo que comentas. Espero, al menos, que con el siguiente ejemplo de modificación de contenido (documento) tengas para resolver tu problema :
Saludos y suerte!
public bool gfModificarRegistro(cRegistro registro) { Cursor.Current = Cursors.WaitCursor; MensajeBarraEstado("Actualizando los metadatos del Registro " + registro.nombre); try { Alfresco.RepositoryWebService.Reference reference = new Alfresco.RepositoryWebService.Reference(); reference.store = spacesStore; //la definicion del store la explico mas abajo reference.uuid = registro.id; Alfresco.RepositoryWebService.Predicate predicate = new Alfresco.RepositoryWebService.Predicate(); predicate.Items = new Object[]{reference}; Alfresco.RepositoryWebService.NamedValue[] properties = new Alfresco.RepositoryWebService.NamedValue[6]; // Create the properties list Alfresco.RepositoryWebService.NamedValue nameProperty = new Alfresco.RepositoryWebService.NamedValue(); nameProperty.name = Constants.PROP_ENT_REF1; nameProperty.value = registro.ref1;//referencia 1 nameProperty.isMultiValue = false; properties[0] = nameProperty; nameProperty = new Alfresco.RepositoryWebService.NamedValue(); nameProperty.name = Constants.PROP_ENT_REF2; nameProperty.value = registro.ref2;//referencia 2 nameProperty.isMultiValue = false; properties[1] = nameProperty; nameProperty = new Alfresco.RepositoryWebService.NamedValue(); nameProperty.name = Constants.PROP_ENT_REF3; nameProperty.value = registro.ref3;//referencia 3 nameProperty.isMultiValue = false; properties[2] = nameProperty; nameProperty = new Alfresco.RepositoryWebService.NamedValue(); nameProperty.name = Constants.PROP_ENT_REF4; nameProperty.value = registro.ref4;//referencia 4 nameProperty.isMultiValue = false; properties[3] = nameProperty; nameProperty = new Alfresco.RepositoryWebService.NamedValue(); nameProperty.name = Constants.PROP_ENT_FECHADOC; nameProperty.value = formatFecha(Convert.ToDateTime(registro.fechadoc));//fecha de documento nameProperty.isMultiValue = false; properties[4] = nameProperty; nameProperty = new Alfresco.RepositoryWebService.NamedValue(); nameProperty.name = Constants.PROP_ENT_FECHAREG; nameProperty.value = formatFecha(Convert.ToDateTime(registro.fechareg));//fecha de registro nameProperty.isMultiValue = false; properties[5] = nameProperty; // Create the CML update object CMLUpdate update = new CMLUpdate(); update.where = predicate; update.where_id = registro.id; update.property = properties; // Create and execute the cml statement CML cml = new CML(); cml.update = new CMLUpdate[] { update }; UpdateResult[] updateResult = this.repoService.update(cml); Cursor.Current = Cursors.Default; if (updateResult.Length > 0) { MensajeBarraEstado("Registro " + registro.nombre + " actualizado correctamente…"); return true; } else//si no se obtienen datos de actualizacion { MessageBox.Show("El registro " + registro.nombre + " no se ha podido actualizar …", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } } catch (Exception ex) { MessageBox.Show("El registro " + registro.nombre + " no se ha podido actualizar …\r\n(" + ex.Message + ")", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } }
La definición de spaceStore global es la siguiente : //inicializamos el Store sobre el que realizaremos operaciones this.spacesStore = new Alfresco.RepositoryWebService.Store(); this.spacesStore.scheme = Alfresco.RepositoryWebService.StoreEnum.workspace; this.spacesStore.address = "SpacesStore";
En caso que no te funcione lo podemos ver.Saludos y suerte!
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-21-2010 04:30 AM
Muchas gracias Javier,
gracias a tu código me he dado cuenta que no le establecía correctamente el uuid en la referencia que utilizaba como item del objeto predicado. Ya funciona correctamente
gracias a tu código me he dado cuenta que no le establecía correctamente el uuid en la referencia que utilizaba como item del objeto predicado. Ya funciona correctamente
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-21-2010 04:58 AM
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-17-2012 03:14 PM
Javier,
Muchas gracias por el ejemplo que subiste, lo encontré en el momento justo después de muchas horas y diferentes intentos por hacer algo parecido.
(Y)
Saludos
Fernando.
Muchas gracias por el ejemplo que subiste, lo encontré en el momento justo después de muchas horas y diferentes intentos por hacer algo parecido.
(Y)





Saludos
Fernando.
