Las búsquedas por Lucene están basadas en codificación ISO9075, por lo que hay ciertos caracteres en el inicio del nombre de un contenido que se deben tratar de forma espacial, entre ellos los números(http://forums.alfresco.com/es/viewtopic.php?f=6&t=974)
Puedes emplear la codificación ISO9075. Por ejemplo, los espacios se reemplazan por _x0020_, las cadenas que comienzan con números se codifica el primer numero de la siguiente forma: _x003Y_, donde Y es el número a codificar.
Por ejemplo, la cadena "1 2" sería "_x0031__x0020_2"
//reemplazamos el primer caracter por el formato ISO9075 de dicho caracter numerico
//teniendo en cuenta que todas estas carpetas destino empezaran por un numero
//en caso que no sea asi habra que meter una comprobacion previa de si empieza con numero
var nombre_carpeta=nombre.replace(nombre.substring(0,1),"_x003"+nombre.substring(0,1)+"_");
query += " +TYPE:\"cm:folder\" +@cm\:description:\""+ nombre_carpeta +"\"";
var documento = document.name; //obtengo el nombre del archivo que meto en Alfresco
var nombre = documento.substr(0,6); //extraigo los seis primeros dígitos del nombre del archivo
var pendientes = space.childByNamePath("pendientes");
var nombre_carpeta=nombre.replace(nombre.substring(0,1),"_x003"+nombre.substring (0,1)+"_");//Reemplazo primer dígito por _x003primerdigitonumero_
var query = "+PATH:\"/app:company_home/cm:User Homes/cm:Clientes/*\""; //ruta de la consulta: Empresa-User Homes-Clientes
query += " +TYPE:\"cm:folder\" +@cm\:description:\""+ nombre_carpeta +"\""; //la consulta busca una carpeta cuya descripción coincida con los seis primeros
//digitos del nombre del documento.
var carpetacliente = search.luceneSearch(query); //ejecutamos la consulta
var ruta = space.childByNamePath(carpetacliente);//trasladamos la consulta al nombre del espacio destino del documento.
if (ruta != null && ruta.hasPermission("CreateChildren")) //si la espacio destino no es nulo y tiene permiso (eso creo que significa)
{
var copy = document.move(ruta); //mueve el documento al espacio destino
if (copy != null) //si el movimiento no es nulo
{
document.name = documento; //nombro el documento con su nombre original
document.save(); //persistiendo el movimiento
}
}
else //en caso contrario
{
var copy = document.move(pendientes);//muevo el documento a la carpeta pendientes
if (copy != null)
{
document.name = carpetacliente; //pero en este caso lo nombro con el resultado de la consulta para comprobar que me arroja la consulta
document.save();
}
}
Por favor corrija los errores siguientes y haga clic en Aceptar.
* Ocurrió un error del sistema durante la operación: Failed to execute script 'workspace://SpacesStore/a741be7f-d2c4-11de-8a47-316241369f51':
Failed to execute script 'workspace://SpacesStore/a741be7f-d2c4-11de-8a47-316241369f51': Wrapped java.lang.IllegalArgumentException: Local name cannot be null or empty. (AlfrescoScript#27)
var documento = document.name; //obtengo el nombre del archivo que meto en Alfresco
var nombre = documento.substr(0,6); //extraigo los seis primeros dígitos del nombre del archivo
var pendientes = space.childByNamePath("pendientes");
var nombre_carpeta=nombre.replace(nombre.substring(0,1),"_x003"+nombre.substring (0,1)+"_");//Reemplazo primer dígito por _x003primerdigitonumero_
var query = "+PATH:\"/app:company_home/cm:User Homes/cm:Clientes/*\""; //ruta de la consulta: Empresa-User Homes-Clientes
//AHORA METEMOS BUSQUEDA CON COMODIN PUESTO QUE NO SABEMOS EL RESTO DE DATOS
query += " +TYPE:\"cm:folder\" +@cm\:description:"+ nombre_carpeta +"*"; //la consulta busca una carpeta cuya descripción coincida con los seis primeros
var carpetacliente = search.luceneSearch(query); //ejecutamos la consulta
//ESTO ES ERRONEO PUESTO QUE EL QUERY DEVUELVE UN ARRAY DE OBJETOS TIPO NODO
//var ruta = space.childByNamePath(carpetacliente);//trasladamos la consulta al nombre del espacio destino del documento.
//si nos devuelve algo
if (carpetacliente!= null)
{
//comprobamos si tenemos permisos sobre el primero objeto (y en teoria unico)
if(carpetacliente[0].hasPermission("CreateChildren"))
{
var copy = document.move(carpetacliente[0]); //mueve el documento al espacio destino
if (copy != null) //si el movimiento no es nulo
{
document.name = documento; //nombro el documento con su nombre original
document.save(); //persistiendo el movimiento
}
}
}
else //en caso contrario
{
var copy = document.move(pendientes);//muevo el documento a la carpeta pendientes
if (copy != null)
{
document.name = carpetacliente; //pero en este caso lo nombro con el resultado de la consulta para comprobar que me arroja la consulta
document.save();
}
}
Creo que no se me pasa nada .. Please correct the errors below then click OK.Hay que observar que me está identificando correctamente el primer dígito. [size=85](NOTA: he cambiado la carpeta clientes y la he subido un nivel, ahora la he puesto dentro de Company Home directamente, para evitar efectos colaterales ), y es en la carpeta clientes donde aplica la regla y desde la que subo los archivos.[/size]
A system error happened during the operation: 10160061 Failed to execute script 'workspace://SpacesStore/5f38585d-18a7-4fa7-9f65-cfbd0ea46f57': 10160060 Failed to execute search: +PATH:"/app:company_home/cm:Clientes/*" +TYPE:"cm:folder" +@cm:description:_x0030_00587*
Please correct the errors below then click OK.Algo me has hecho avanzar, ya no devuelve un valor nulo o vacío, aunque falla en la ejecución de la búsqueda (lo mismo es cualquier error de sintáxis, que el Lucene se las trae).
A system error happened during the operation: 10160063 Failed to execute script 'workspace://SpacesStore/5f38585d-18a7-4fa7-9f65-cfbd0ea46f57': 10160062 Failed to execute search: +PATH:"/app:company_home/cm:Clientes/*" +TYPE:"cm:folder" +@cm:description:_x003P_rueba*
TYPE:"cm:folder" +@cm\:description:"000090"
Me devuelve el resultado correcto:{http://www.alfresco.org/model/content/1.0}_x0030_00090López_x0020_Martínez_x002c__x0020_Manuel
Si en el explorador de nodos incluyo:"app:/company_home/cm:user_homes/cm:Clientes"+TYPE:"cm:folder" +@cm\:description:"000090"
Me devuelve el resultado correcto:{http://www.alfresco.org/model/content/1.0}_x0030_00090López_x0020_Martínez_x002c__x0020_Manuel
Por tanto, creo que no es necesario incluir la conversión del primer dígito (_x003_)Hola Javier.Hola Tini, parece que va mejorando la cosa ..
He hecho las pruebas. que me comentas, sin resultado. Está claro que el problema está en la búsqueda.
Los errores que me ha arrojado dicen que no se puede aplicar el método "haspermission" sobre indefinidos. Parece que algo avanzamos, porque parece que encontrar encuentra algo, pero es indefinido.
Te voy a comentar algunos resultados obtenidos con el explorador de nodos, a ver si así ves algo que me pueda dar pistas.
He incluido la carpeta Clientes de nuevo dentro de User Homes.
Si en el explorador de nodos introduzco la siguiente cadena:Me devuelve el resultado correcto:TYPE:"cm:folder" +@cm\:description:"000090"
Si en el explorador de nodos incluyo:{http://www.alfresco.org/model/content/1.0}_x0030_00090López_x0020_Martínez_x002c__x0020_Manuel
Me devuelve el resultado correcto:"app:/company_home/cm:user_homes/cm:Clientes"+TYPE:"cm:folder" +@cm\:description:"000090"
Por tanto, creo que no es necesario incluir la conversión del primer dígito (_x003_){http://www.alfresco.org/model/content/1.0}_x0030_00090López_x0020_Martínez_x002c__x0020_Manuel
Para empezar al incluir la ruta resulta que User Homes, es user_homes. Esto es como apuntar a un blanco invisible.
Mi pregunta es si en la declaración de la consulta del script: ¿puedo incluir directamente lo que incluyo en el explorador de nodos, en caso contrario cúal es la forma de construirlo conforme al resultado del explorador de nodos? (por favor no me remitáis a las wiki porque la documentación más que instruir, lia).
Y otra pregunta. En el explorador de nodos he metido un valor directamente, al construir la consulta en el script, ¿cómo incluyo en lugar de un valor una variable?
"app:/company_home/cm:user_homes/cm:Clientes"+TYPE:"cm:folder" +@cm\:description:"000090"
creo que le falta el termino PATH (supongo que sera un descuido .. no obstante confirmalo please).var docs = search.luceneSearch("PATH:\"/app:company_home/cm:EMPRESA//*\" AND ASPECT:\"{modelo.personalizado}relaciones\" AND NOT (@custom_model\\:relaciones:\"<entidad></entidad>\" AND @custom_model\\:expedientes:\"<entidad></entidad>\")");
Esto viene bien para entender la sintaxis .. Y COMPROBAR QUE HABIA UN FALLO EN EL PATH (app:/company_home) :var query = "PATH:\"/app:company_home/cm:user_homes/cm:Clientes//*\" +TYPE:\"cm:folder\" +@cm\\:description:\""+codigo_del_cliente+"\"";
Prueba y me dices.var documento = document.name;
var nombre = documento.substr(0,6);
var pendientes = space.childByNamePath("pendientes");
var carpetacliente = search.luceneSearch("PATH:\"/app:company_home/cm:user_homes/cm:Clientes//*\" +TYPE:\"cm:folder\" +@cm\\:description:\""+nombre+"\"");
//si nos devuelve algo
if (carpetacliente!= null)
{
//comprobamos si tenemos permisos sobre el primero objeto (y en teoria unico)
if(carpetacliente[0].hasPermission("CreateChildren"))
{
var copy = document.move(carpetacliente[0]);
if (copy != null)
{
document.name = documento;
document.save();
}
}
}
else
{
var copy = document.move(pendientes);
if (copy != null)
{
document.name = documento;
document.save();
}
}
var carpetacliente = search.luceneSearch("+PATH:\"/app:company_home/cm:user_homes/cm:Clientes//*\" +TYPE:\"cm:folder\" +@cm\\:description:\""+nombre+"\"");
o este otrovar carpetacliente = search.luceneSearch("+PATH:\"/app:company_home/cm:user_homes/cm:Clientes//*\" AND TYPE:\"cm:folder\" AND @cm\\:description:\""+nombre+"\"");
Lo mismo si no indicas el + antes de PATH inicial lo toma como un OR lógico .. ya me dices.Por favor corrija los errores siguientes y haga clic en Aceptar.Creo entender por el error que no ha encontrado el espacio, pero también me da que pensar que no pasa del primer y segundo "If" porque la búsqueda siempre arroja algo, aunque no sea una coincidencia de lo que buscamos, o simplemente un valor nulo.
Ocurrió un error del sistema durante la operación: Failed to execute script 'workspace://SpacesStore/42622f72-d387-11de-8a47-316241369f51': Failed to execute script 'workspace://SpacesStore/42622f72-d387-11de-8a47-316241369f51': TypeError: Cannot call method "hasPermission" of undefined (AlfrescoScript#10)
Content from pre 2016 and from language groups that have been closed.
Content is read-only.
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.