Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.

Close

Campos editables según valor FechaNac

Ayuda
Borja
2012-04-19
2013-05-06
  • Borja
    Borja
    2012-04-19

    Hola, buenos días.

    En primer lugar, deciros que soy muy novato en OX pero estoy aprendiendo mucho con la cantidad de documentación e información que hay en el foro. Disculpadme si los nombres o conceptos que utilizo no son correctos.

    Estoy probando con un módulo (básicamente un formulario) en el que el usuario se debe inscribir en una actividad, completando sus datos personales. Entre ellos tengo un atributo para que se introduzca la fecha de nacimiento del mismo.

    Pues bien, si el usuario marca en ese campo FechaNac que es menor de edad se deben habilitar (y ser requeridos) una serie de atributos nuevos.

    ¿Cuál creéis que es la mejor forma para hacerlo?

    Estoy probando con un @OnChange en FechaNac llamando a una clase AlCambiarFechaNac.class. En esta clase calculo la edad.
    A su vez, en esta clase he intentado llamar a otra vista en la que estén esos nuevos campos pero no funciona como quiero.

    He probado también poniendo esos atributos nuevos con @Hidden para luego en la clase del @OnChange habilitarlos (y que sean requeridos) pero no me funciona, se me muestran desde el principio (he consultado en la documentación y parece que efectivamente no es ese el uso que tiene).

    Otra forma que había pensado (parecida a Hidden) sería la de mostrar estos nuevos campos en la vista por defecto, sin que sean editables al principio y que en función de la fecha de nacimiento introducida, los pueda poner editables (getView().setEditable("nombrePropiedad", true)) y además con Required. Supongo que en ese caso sería necesario refrescar la vista.

    ¿Cuál puede ser la mejor forma? ¿Cómo podría hacer que los campos no sean editables en un principio?

    Muchas gracias, un saludo.

     
  • Saludos Borja:

    sería la de mostrar estos nuevos campos en la vista por defecto, sin que sean editables al principio

    Me parece que esta es la mejor forma. Puedes probar anotando los cambios con @ReadOnly y luego, dentro de la acción utilizas setEditable para cada elemento que quieras cambiar su estado. No necesitas refrescar.

    Espero te sea útil,

    Federico

     
  • Borja
    Borja
    2012-04-20

    Hola Federico, gracias por la respuesta.

    He intentado de esa forma pero no funciona. He puesto los campos con @ReadOnly pero aunque pongo editables las propiedades dentro de la clase del OnChange no me deja escribir en ellos.

    Voy a seguir investigando.

    Gracias, un saludo.

     
  • Saludos Borja:

    pero aunque pongo editables las propiedades dentro de la clase del OnChange no me deja escribir en ellos

    Has probado si quitando la anotación @ReadOnly puedes cambiar el estado de editable. Puedes probar haciendo que en cada onchange ponga el campo editable si no lo estaba y viceversa (sólo para probar si estas haciendolo en el punto correcto). Debes recordar que el OnChange dentro de un campo de referencia realmente estas sobre la vista de la referencia no sobre la vista del módulo. Por eso trata con este código:

    getView().getRoot().setEditable(
    

    Espero te sea util,

    Federico

     
  • Borja
    Borja
    2012-04-23

    Hola Federico.

    Al final lo que he hecho es utilizar

    getView().setHidden("propiedad", true)
    

    y de esa forma oculto los campos (o no) en función de la edad.

    Muchas gracias por tu atención, un saludo.

     
  • ivan.svi
    ivan.svi
    2013-05-02

    Hola Borja/Federico

    Yo tengo la misma situacion y no lo he podido resolver aun.
    Yo lo hice no editable con un OnChange. El problema es que lo hace bien cuando modifico la propiedad pero no cuando la entidad se abre y el valor es el correcto para ponerlo no editable dado que no lo modifico.

    Con que anotacion estas poniendo getView().setHidden("propiedad", true) ?

    Podrias poner una entidad para ver como se aplica?

    muchas gracias, Ivan