Optimizar el Transaction Notification

Hace mucho que no escribo un articulo, no por falta de tiempo o ganas de escribir, si no que por no saber sobre que escribir.

Hoy les voy a enseñar como evitar demoras en el SP Transaction Notification, evitando que ejecute codigo adicional cuando ya encontró un error.

Este es un ejemplo con 2 validaciones en el Transaction Notification

--------------------------------------------------------------------------------------------------------------------------------

--  ADD YOUR    CODE    HERE
if @object_type='18' and @transaction_type in ('A','U')
begin
    if (Select T0.CardName from OPCH T0 where T0.DocEntry=@list_of_cols_val_tab_del) like '%Banco%'
    begin
        set @error=4
        set @error_message = 'NO PUEDE CREAR FACTURAS A ESE PROVEEDOR'
    end
    
    if (select T0.DocDate from OPCH T0 where T0.DocEntry=@list_of_cols_val_tab_del) < '20150201'
    begin
        set @error=5
        set @error_message = 'NO PUEDE CREAR FACTURAS CON ESA FECHA'
    end
end

--------------------------------------------------------------------------------------------------------------------------------

-- Select the return values
select @error, @error_message

A medida que vayamos ingresando validaciones, el codigo va creciendo, lo cual puede acarrear demoras cada vez que entra a cada validacion.
Para evitar eso, se utiliza la instruccion GoTo y se define una etiqueta al final del Transaction, la instruccion GoTo se agrega despues de setear las variables @error y @error_message, quedando de la siguiente manera

--------------------------------------------------------------------------------------------------------------------------------

--  ADD YOUR    CODE    HERE
if @object_type='18' and @transaction_type in ('A','U')
begin
    if (Select T0.CardName from OPCH T0 where T0.DocEntry=@list_of_cols_val_tab_del) like '%Banco%'
    begin
        set @error=4
        set @error_message = 'NO PUEDE CREAR FACTURAS A ESE PROVEEDOR'
        goto FinTN
    end
    
    if (select T0.DocDate from OPCH T0 where T0.DocEntry=@list_of_cols_val_tab_del) < '20150201'
    begin
        set @error=5
        set @error_message = 'NO PUEDE CREAR FACTURAS CON ESA FECHA'
        goto FinTN

    end
end

--------------------------------------------------------------------------------------------------------------------------------
FinTN:
-- Select the return values
select @error, @error_message

En ese caso, cuando la validacion detecte que se cumplen las condiciones y setea las variables con el error y la descripcion correspondiente, se dirigirá automaticamente al final del TN (donde se encuentra la etiqueta con el nombre FinTN) y no procesará todo el codigo que siga (porque ya encontramos un error, para que seguir validando si el usuario debe corregir ese error primero).

Por lo tanto, es recomendable colocar un goto despues de cada seteo de error.

Saludos

También te podría gustar...

5 Respuestas

  1. cristian dice:

    se puede agregar un hipervinculo a ese mensaje?

  2. Carlos Ochoa dice:

    Buenas tardes Felipe, quisiera realizar la siguiente consulta. Como puedo evitar por transaction que los usuarios creen un factura de proveedores sin antes haber ingresado un valor a dos campos consecutivos.

    De antemano agradezco la ayuda.

    Saludos,

    • Carlos Ochoa dice:

      Felipe, te comento que en base al ejemplo que has dejado al principio logre realizar ya lo que necesitaba. Sin embargo si quisiera consultarte algo similar, tengo que hacer prácticamente la misma restricción solo que en pagos efectuados a nivel de cuenta. ¿Podría indicarme como sería?

  3. Manuel dice:

    Para SAP Business One Hana, es el mismo comando ?

Deja una respuesta

Tu dirección de correo electrónico no será publicada.