cancel
Showing results for 
Search instead for 
Did you mean: 

Duda con campos mltext como title o description

ruben_arjonilla
Champ in-the-making
Champ in-the-making
Buenas a todos.

Tengo dudas acerca del funcionamiento de los campos mltext y su comportamiento con los webscripts.

Para empezar, estoy usando alfresco 4.0-e.

Entiendo que un campo mltext, si lo modificas con un usuario que tiene por defecto español, solo modificas el campo en su versión de español, y que si lo hace un usuario con el idioma definido en inglés, este cambia los valores del idioma inglés.

En los webscripts:
Si ejecutas un webscript usando la url /alfresco/service/xxx, este ejecuta el webscript y te retorna los datos según el idioma definido en el navegador.
Si ejecutas un webscript usando la url /alfresco/wcs/xxx, este ejecuta el script con el idioma del usuario logueado (pero siempre tiene que haber un usuario loginado para que funcione, sinos te lleva a la página de login)

Hasta aquí lo entiendo.

Mis dudas vienen ahora.
1-
Por ejemplo, si uso un webscript según navegador (/alfresco/service/xxx), si el idioma del navegador no ha estado definido en la propiedad (pongamos que nos viene un alemán), si ningún usuario alemán ha modificado el texto, que texto se muestra? cuál es el idioma por defecto y como se define?


2-
Como hago para cambiar el texto de una propiedad por defecto?
Imaginad que creo un documento, y le pongo "Patatas", viene el ingles y le pone "Potatoes", pero luego veo que me he equivocado, y que en vez de "Patatas", quería poner "Patata", puedo entrar y modificar el castellano, y puede entrar el inglés para modificarlo, pero el por defecto me seguirá siendo "Patatas"


3-
Este es otro problema con el que me he encontrado.
Tengo distintos webscripts que me devuelven unos documentos según el tipo y la búsqueda. Me los devuelve en formato JSON.
Y tengo una aplicación externa, que consulta estos webscripts, y muestra la información en una web.

Para realizar dichas consultas, primero hago un login con unas url, /alfresco/service/api/login.json?u=usuarioWeb&pw=passwordUsarioWeb
Y obtengo el ticket.

Después hago las llamadas a estos webscripts pasándoles el ticket obtenido
/alfresco/service/xxx?alf_ticket=yyy

Esto me devuelve el json según el idioma en que se ejecuta el tomcat del servidor, y no tiene en cuenta el idioma del navegador.
Me encuentro de que para mostrar la página en español, tengo que ejecutar el tomcat en español, esto me limita mucho el multi-idioma, ya que quería aprovechar la misma aplicación para distintos idiomas.
Probé intentado usar la url /alfresco/wcs/xxx, llamando a un usuario distinto, ej: usando el usuarioWebEs, usuarioWebEN, …
pero esto me da un error, ya que usando /alfresco/wcs/, no admite tickets, ya que has de tener el login del navegador.

Hay alguna manera de poder ejecutar una url con wcs y que coja el idioma del usuario que yo le diga? o sea, alguna manera de hacer login desde la aplicación externa?
O como se debería hacer para usar los webscripts desde aplicaciones externas a alfresco usando /alfresco/service y poder usar el multiidioma del propio navegador en vez del del tomcat?


4-
Otra solución que estoy barajando, es la de que al webscript le pase el locale del navegador, recoger la variable y coger el campo title/description con el idioma del locale que me llegue, asi me aseguro de que el json devuelto sea correcto.
Pero no se como se puede llegar a coger.

Yo uso los webscripts con la api, no uso JAVA, uso la api de javascript.

un ejemplo de webscript seria este:
prueba1.get.desc.xml
prueba1.get.js
prueba1.get.json.ftl

se podria hacer lo que yo digo? ya sea en el .ftl o en .js
ejemplo en prueba1.get.js:
//meto el node en una variable
var node = cogerNodo();
//cojo el title
var title = node.properties["cm:title"];
model.title=title;


como seria para coger el title en el idioma que yo quiera?



Para cualquier cosa que no haya quedado clara me lo decís e intento explicarlo mejor Smiley Wink

Muchas gracias de antemano.
8 REPLIES 8

cristinamr
World-Class Innovator
World-Class Innovator
Buenas Ruben.

El tema que planteas no es para nada sencillo y me parece que partes de la que has descrito (planteamientos como la de los webscripts, por ejemplo) no son correctos. Hasta donde llego, solo Share y wqs cogen del browser el locale del lenguage, pero ésto no ocurre con alfresco porque cuando te logas eliges el lenguage (en el login.jsp).

Antes de nada, has leído este artículo?

Vamos poco a poco site parece bien porque sino de verdad que es un caos.

Un saludo.

--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc

Si que lo he leído

Precisamente de ahí he sacado el funcionamiento de los webscripts:
http://wiki.alfresco.com/wiki/Multilingual_Document_Support#Web_Scripts_and_Templates

ahi es donde dice que si llamas a un webscript usando: /alfresco/service/xxx, coge el idioma del navegador, y que si usas /alfresco/wcs/xxx, coge el del usuario.

Yo hasta ahora usaba el primer método, ya que el webscript necesita autenticación para poder acceder a la carpeta donde están los documentos.
Y para poder hacer una llamada externa, lo que hacia era coger el ticket (que es una especie de login), y llamar a la url usando el alf_ticket.

Por eso me encuentro con el problema de que si quiero usar /wcs (que no es wqs como dices), no puedo usar el ticket, ya que no me lo coge (necesita autenticación via web)

cristinamr
World-Class Innovator
World-Class Innovator
Vale me pierdo un poco porque no conozco el contexto. Me puedes describir qué entorno tienes? Es decir, es una app externa que ataca al alfresco?
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc

Si, se puede decir que es una app externa que ataca alfresco.
Pero realmente lo que tengo es esto:

Una aplicacion Web con JAVA i struts 2.

Basicamente, lo que tengo es una classe JAVA, que lo que hace es llamadas a los webscripts que tengo creados.
Cada webscript me devuelve información en JSON, que me ocupo de mostrarla de una manera "bonita" en la web.

Las llamadas las hago asi:

<java>
public static final String URL_TICKET = "http://www.yyy.es/alfresco/service/api/login.json?u=userweb&pw=passwordweb";
public static final String URL_DOC1 = "http://www.yyy.es/alfresco/service/xxx/search";


//esto me devuelve un JSON con el ticket necesario para recoger la información de alfresco
JSONObject json = getUrl(URL_TICKET);
String ticket = json.getJSONObject("data").getString("ticket");

//esto me devuelve la información que necesito
//tengo los webscripts con muchisimas mas variables, para mostrar unas u otras cosas, según categoria, búsqueda, tags… pero lo pongo así para simplificar
String urlDoc1 = URL_DOC1 + "?alf_ticket="+ticket;
JSONObject datos = getUrl(urlDoc1)


//y esta es la funciona getUrl
public JSONObject getUrl(String urlStr) throws IOException
  {
//     System.out.println(Locale.getDefault());
//     Locale.setDefault(new Locale("en","US"));
//     System.out.println(Locale.getDefault());
     URL url = new URL(urlStr);

     BufferedReader in = null;
    
     try {
        // Volcamos lo recibido al buffer
        in = new BufferedReader(new InputStreamReader(url.openStream()));
     } catch(Throwable t){}

     String inputLine = "";
     String inputText = "";
    
//     System.out.println("abans if null");
     if(in != null)
     {
//        System.out.println("not null");
//        System.out.println(in.toString());
        while ((inputLine = in.readLine()) != null) {
           inputText = inputText + inputLine;
        }
     }
     else
        inputText = "{}";
    
//     System.out.println("inputText: "+inputText);
    
     if(inputText.equals("")) inputText = "{}";
      
     return (JSONObject) JSONSerializer.toJSON(inputText);
  }
</java>

Como ves, hago las consultas por url del webscript, pero para eso, primero tengo que hacer un "login" para conseguir el ticket, y una vez tengo el ticket, puedo "atacar alfresco".

Pero como te comentaba, de este modo estoy "obligado" a usar el webscript con /alfresco/service/xxx, y me coge el idioma de la aplicación (y no la del navegador), ya que si pongo /alresco/wcs/xxx, me da un error puesto que la aplicación no esta logueada en alfresco.

A mi me interesa poder ejecutar el webscript con distintos usuarios, y que el idioma que me coja sea el del usuario, y no el del navegador o el de la aplicación externa.

cristinamr
World-Class Innovator
World-Class Innovator
Muchas gracias por la info. Lo comprendo todo exepto una cosa: Cuando dices que lo coja dle usuario, a qué propiedad o de dónde quieres sacar el valor del usuario concretamente? Creo que el objeto user no tiene ninguna propiedad qcon la que tu puedas saber el lenguaje por defecto.
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc

Me refiero al idioma del usuario.

Llamando a un webscript usando /alfresco/service coge el idioma que tengas definido en el navegador (o en mi caso del Java).
Llamando a un webscript usando /alfresco/wcs coge el idioma que tenga definido el usuario que este logueado.

El problema es lo que decía antes, que usando wcs hay que estar logueado y no se como hacerlo desde el JAVA externo.
En cambio con el /alfresco/service, consigo hacer "login" gracias a los ticket, pero me devuelve el JSON con el idioma que me coge del JAVA externo

Puedes hacer la llamada al webscript de las 2 maneras:
http://www.yyy.es/alfresco/service/xxx/search
http://www.yyy.es/alfresco/wcs/xxx/search

El resultado es el mismo, la diferencia esta en el idioma devuelto para los campos mltext.

cristinamr
World-Class Innovator
World-Class Innovator
Llamando a un webscript usando /alfresco/wcs coge el idioma que tenga definido el usuario que este logueado.

Según leo en la wiki:

Accessing a web script via /alfresco/wcs returns content in whatever language is selected by the user's profile in Alfresco Explorer. 
Por eso necesitas el login, porque de otra forma no podrías obtener ese dato.

Pues estamos apañaos. Dejame darle mañana algunas vueltas a ver si veo algo y te comento pero a priori ni idea Smiley Frustrated Vamos no se me ocurre cómo hacerlo.

A ver si alguien puede echar un cable (vendría de perlas!).

Un saludo.
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc

cristinamr
World-Class Innovator
World-Class Innovator
Uhmmm, estaba pensando que lo mismo sería buen comienzo indagar cómo lo hace Alfresco. Porque si te vas a la wiki te pone esto:

/alfresco/wcservice or /alfresco/wcs     mapped to Web Client Authenticator 

Si sabemos de antemano que esta clase toma del perfil del usuario el lenguaje a lo mejor mirando qué hace esa clase o cómo la implementa alfresco podríamos dar con la clave. Seguiré mirando y te iré contando si encuentro avances.
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc