Menu

Controlador de guardado Personalizado

2024-07-20
2024-07-30
  • Saul Velecela

    Saul Velecela - 2024-07-20

    Estoy usando xava pro 7.3.3, y no se si sea algo de esta version, pero tengo una clase llamada SituacionEconomicaFinanciera, que muestra los datos obtenidos de una vista de la base de datos, lo que quiero lograr es obtener esos datos que se muestran en pantalla, y guardarlos en sus respectivas tablas de la base de datos cuando se cambie algun valor de estas.
    tengo esto en el archivo controllers.xml

    <controller name="SituacionEconomicaFinanciera">
    <extends controller="TypicalRealExcel">
    <action name="save" mode="detail" by-default="if-possible" class="ec.com.mundoweb.acciones.GrabarSituacionEconomicaFinanciera" image="save.gif" icon="content-save" keystroke="Control S">
    </action></extends></controller>
    lo probe y no reemplaza a la accion que define por defecto openxava e incluso lo defini en application.xml aunque se que no es necesario pero queria ver si solucionaba el problema

    <module name="SituacionEconomicaFinanciera">
    <env-var name="XAVA_SAVE_ACTION" value="SituacionEconomicaFinanciera">
    <model name="SituacionEconomicaFinanciera">
    <controller name="SituacionEconomicaFinanciera">
    </controller></model></env-var></module>

    ya le realice un clean an build para ejecutar el proyecto pero no se me cambia por el controlador personalizado:
    
    public class GrabarSituacionEconomicaFinanciera extends ViewBaseAction {
    @Override
    public void execute() throws Exception {
        System.out.println("Entro al grabar ");
        try {
            Map data = getView().getAllValues();
            System.out.println("Datos " + data.toString());
            addMessage("Successful");
        }
        catch (Exception ex) {
            addError("Error: " + ex.getMessage());
            throw ex;
        }
    }
    

    }
    y sigue ejecutandose el metodo de guardado por default y como es una vista logicamente no me permite guardar los datos.
    Que me falta o que estoy haciendo mal para que no se me ejecute la accion personalizada ya que me da este error por que no se cambia la accion
    Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: La vista o función 'dbo.v_situacion_economica_financiera_persona' no es actualizable porque la modificación afecta a varias tablas base.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:265)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1662)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:615)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:537)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7417)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:3488)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:262)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:237)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:483)

     

    Last edit: Saul Velecela 2024-07-20
    • Chungyen Tsai

      Chungyen Tsai - 2024-07-22

      Hola Saul,

      Generalmente las vistas se pueden usar para seleccionar datos, pero no siempre se pueden usar para alta, baja, modificación. Tendrías que ver si SQL Server permite hacer eso y si la vista creada esta configurada para eso.
      De lo contrario, no te queda otra que crear entidades que mapeen a esas tablas cuya información deseas actualizar y hacerlo manualmente.

      Saludos.

       
  • Saul Velecela

    Saul Velecela - 2024-07-22

    Lo que puedo acotar es que la clase cliente esta relacionada con la clase SituacionEconomicaFinanciera y como no mostraba el boton personalizado, le envie asi usando la anotacion @DetailAction permitiendome asi cargar la accion personalizada, talvez por alli va el tema pero como soy nuevo en openxava, no se si sea lo correcto, porque ahora necesitaria ocultar los botones por default que me carga la clase SituacionEconomicaFinanciera

    @OneToMany(mappedBy="cliente", cascade=CascadeType.ALL) @ListProperties("numeroOperación,fechaDeConcesión,actvidadRelación,lugarDeTrabajo,actividadEmpresa,antiguedadLaboral,ingresoFamiliar,gastoFamiliar,activos,pasivos,patrimonio,tipoVivienda")
    @DetailAction("SituacionEconomicaFinanciera.save")
    Collection<situacioneconomicafinanciera> situaciónEconómicaFinanciera;</situacioneconomicafinanciera>

     

    Last edit: Saul Velecela 2024-07-22
    • Chungyen Tsai

      Chungyen Tsai - 2024-07-24

      Hola Saul,

      Ahora que lo veo mejor, debería funcionar el guardado personalizado.
      Puedes adjuntarme tu application.xml y controllers.xml?

      Saludos.

       
  • Saul Velecela

    Saul Velecela - 2024-07-27

    esto es mi application.xml

    <?xml version = "1.0" encoding = "ISO-8859-1"?>
    
    <!DOCTYPE application SYSTEM "dtds/application.dtd">
    
    <application name="novacredit"> 
        <default-module>          
            <controller name="TypicalRealExcel"/>   
        </default-module>
        <module name="Proveedor">
            <env-var name="XAVA_SEARCH_ACTION" value="Proveedor.buscarProveedor"/>
            <model name="Proveedor"/>
            <controller name="Proveedor"/>
        </module>
        <module name="Cliente">
            <env-var
               name="XAVA_SEARCH_ACTION"
               value="Cliente.buscar"/>
            <model name="Cliente"/>
            <controller name="Cliente"/>
        </module>
    
        <module name="InventarioDeCartera">
            <env-var
               name="XAVA_SEARCH_ACTION"
               value="InventarioDeCartera.buscar"/>
            <model name="InventarioDeCartera"/>
            <controller name="InventarioDeCartera"/>
        </module>
    
    <module name="SituacionEconomicaFinanciera">
        <env-var name="XAVA_SEARCH_ACTION" value="SituacionEconomicaFinanciera.buscar"/>
        <model name="SituacionEconomicaFinanciera"/>
        <controller name="SituacionEconomicaFinanciera"/>
    </module>
    
    </application>
    

    y el controller.xml

    <?xml version = "1.0" encoding = "ISO-8859-1"?>
    
    <!DOCTYPE controllers SYSTEM "dtds/controllers.dtd">
    
    <controllers>
       <controller name="Cliente">
            <extends controller="TypicalRealExcel"/>
            <action name="certificado" mode="detail"
                by-default="if-possible"
                class="ec.com.mundoweb.acciones.GenerarPDFVigentesCanceladas"/>
            <action name="certificadoCompleto" mode="detail"
                by-default="if-possible"
                class="ec.com.mundoweb.acciones.GenerarPDFCompleto"/>
            <action name="buscar" hidden="true"            
                class="ec.com.mundoweb.acciones.BuscarDetalleCliente">
            </action>
        </controller>
    
        <controller name="SituacionEconomicaFinanciera">
            <extends controller="TypicalRealExcel"/>
            <action name="save" 
             class="ec.com.mundoweb.acciones.GrabarSituacionEconomicaFinanciera">
             </action>
        </controller>
        </controllers>
    
     

    Last edit: Saul Velecela 2024-07-27
    • Chungyen Tsai

      Chungyen Tsai - 2024-07-28

      Hola Saul,

      Estas declarando XAVA_SEARCH_ACTION inexistentes en los modulos, prueba sacando eso.

      Saludos.

       
  • Saul Velecela

    Saul Velecela - 2024-07-29

    Hola Chungyen Tsai, ya lo saque, he incluso probe eliminado de application.xml, le compile otra vez y sigue igual por el momento lo he solucionado definiendole @SaveAction sobre la coleccion

    @OneToMany(mappedBy="cliente", cascade=CascadeType.ALL)
    @ListProperties("numeroOperación,fechaDeConcesión,actividadRelación,lugarDeTrabajo,actividadEmpresa,antiguedadLaboral,ingresoFamiliar,gastoFamiliar,activos,pasivos,patrimonio,tipoVivienda")
        @SaveAction(value = "SituacionEconomicaFinanciera.save")
        Collection<SituacionEconomicaFinanciera> situaciónEconómicaFinanciera;
    

    alli si se reemplaza por la accion personalizada, pero no se como ocultar el boton de grabar y continuar ya que si le doy clic alli me sale este error

     

    Last edit: Saul Velecela 2024-07-29
    • Chungyen Tsai

      Chungyen Tsai - 2024-07-30

      Hola Saul,

      Si lo que buscas es ocultar el botón guardar y continuar de la aplicación. Puedes encontrar la solución aquí, que es añadir saveAndStayForCollections=false en xava.properties

      Saludos.

       

Log in to post a comment.