• Este debate tiene 6 respuestas, 2 mensajes y ha sido actualizado por última vez el hace 6 meses, 1 semana por juanjo.mauriz.
Viendo 7 entradas - de la 1 a la 7 (de un total de 7)

INICIAR UNA PÁGINA AUTOMÁTICAMENTE AL INICIO DEL SISTEMA ( VERSIÓN WEB)



  • juanjo.mauriz
    Participante
    juanjo.mauriz

    Buenos días a todos.

    Tengo que iniciar una página justo al terminar el inicio del sistema y he hecho una unidad de código donde pongo la apertura de la página, justo despues del inicio del sistema, pero da error y no inicia el sistema sino quito la línea del RunModal… sin ella funciona perfectamente toda la carga de datos, etc.

    Adjunto el código…

    codeunit 50100 “Iniciar_Sistema”
    {
    [EventSubscriber(ObjectType::Codeunit, Codeunit::”System Initialization”, ‘OnAfterLogin’, ”, false, false)]
    local procedure OnAfterLogin();
    var
    Comprobar: page “Customer Ledger Entries”;
    Notificacion: record Customer;
    UserSetup: record TablaUsuarios;
    Filtro: Text;
    Posicion: Integer;
    begin
    Clear(Filtro);
    Posicion := 1;
    if (UserSetup.Get(UserID) = true) then begin
    UserSetup.SetFilter(CodigoUser, UserID);
    if (UserSetup.Contabilidad = true) then begin
    Notificacion.SetFilter(Seguimiento, format(true));
    if Notificacion.FindSet(false) then begin
    repeat
    if Posicion = 1 then
    Filtro := Notificacion.”No.”
    else
    Filtro += ‘|’ + Notificacion.”No.”;
    Posicion += 1;
    until Notificacion.Next() = 0;
    end;

    Comprobar.RecibirDatos(Filtro);
    Comprobar.RunModal();  <- Esto hace que falle (las dos primeras veces si que me entró, pero ahora no lo consigo)
    end;
    end;

    end;

    }

    El error que arroja es…

    …se produjo el siguiente error: “Se produjo un error y la transacción se detuvo. Póngase en contacto con el administrador o con el socio para obtener más ayuda.”

    Seguimiento pila AL:
    Iniciar_Sistema(CodeUnit 50100).OnAfterLogin line 24 – Extensiones Plus
    “System Initialization”(CodeUnit 150).OnAfterLogin(Event) line 2 – System Application by Microsoft
    “System Initialization Impl.”(CodeUnit 151).InitCompany line 5 – System Application by Microsoft
    “Company Triggers”(CodeUnit 2000000003).OnCompanyOpenCompleted(Event) line 2
    ” y seguimiento de la pila de AL:
    Iniciar_Sistema(CodeUnit 50100).OnAfterLogin line 24 – Extensiones Plus
    “System Initialization”(CodeUnit 150).OnAfterLogin(Event) line 2 – System Application by Microsoft
    “System Initialization Impl.”(CodeUnit 151).InitCompany line 5 – System Application by Microsoft
    “Company Triggers”(CodeUnit 2000000003).OnCompanyOpenCompleted(Event) line 2

    A ver si podéis orientarme a que puede ser debido, porque no lo entiendo, ya que en principio debería funcionar.

    Saludos y muchas gracias!!!

    #1025181

    oscarmingte
    Participante
    oscarmingte

    Hola Juanjo ,

    Un par de cosas antes por simplificar tu código:

    if (UserSetup.Get(UserID) = true) then begin

    Pueds hacer esto:

    if UserSetup.Get(UserID)  then begin

    no necesitas poner = true

    y lo que seguramente te este fallando es que si ejecutas runmodal el sistema se queda esperando a que el usuario interactúe , por eso el sistema para la transación , prueba usando  Comprobar.run.

    Un saludo Óscar.

    #1025182

    juanjo.mauriz
    Participante
    juanjo.mauriz

    Buenos días oscarmingte.

    Muchas gracias por la respuesta y por la sugerencia, que efectivamente es mucho mas estética y que para mas INRI, la tenía puesta como comentas, en otras partes del código jeje

    Por otro lado, también probé con Run y con RunModal, ya que efectivamente es la diferencia entre ellas lo que me has comentado, pero sigue quedandose anclado, igualmente.

    No tengo ni idea del motivo…

    Saludos!!!

    #1025184

    oscarmingte
    Participante
    oscarmingte

    Hola , te paso la solución:

     

    [EventSubscriber(ObjectType::Codeunit, Codeunit::”System Initialization”, ‘OnAfterLogin’, ”, false, false)]
    local procedure MyProcedure()
    var
    Comprobar: page “Customer Ledger Entries”;
    begin
    if Session.CurrentClientType in [ClientType::Web, ClientType::Desktop, ClientType::Windows, ClientType::Tablet, ClientType::Phone] then begin
    Commit();
    Comprobar.RunModal();
    end;

    end;

     

    Aquí tienes la clave:

    Dynamics 365 Business Central: be careful when using the OnCompanyOpen trigger

    Si no lo controlas con el session type no funciona.

    ya me cuentas.

    Un saludo Óscar.

    #1025185

    juanjo.mauriz
    Participante
    juanjo.mauriz

    Buenos días, de nuevo.

    ¡¡¡PERFECTO!!!

    Ahora si que funciona, por lo que el problema era del “type” porque lo de commit() también lo había puesto en una ocasión, incluso con sleep para que tardara un poco mas, pero fallaba igualmente.

    Saludos y muchisimas gracias!!!

    #1025186

    oscarmingte
    Participante
    oscarmingte

    Hola , si así es el commit lo metí yo y esta mal hecho los commit hay que usarlos con limitación.

    Un saludo Óscar.

    #1025190

    juanjo.mauriz
    Participante
    juanjo.mauriz

    Hola Oscarmingte.

    Si, se que es problematico porque mata los procesos activos y pueden haber pérdida de integridad de datos. Intento no utilizarlo.

    Muchisimas gracias de verdad.

    Saludos!!!

    #1025191
Viendo 7 entradas - de la 1 a la 7 (de un total de 7)

Debe iniciar sesión para responder a este tema.