Procedimientos Almacenados en SAP Business One – Parte 4
Post-Transaction Notification (PTN)
Este procedimiento almacenado es ejecutado por SAP B1 luego de cada transacción de alta, baja, modificación, cancelación o cierre de un registro o una operación.
Dentro de este procedimiento podremos incluir sentencias SQL para realizar diferentes acciones que se ejecutaran posteriormente a la transacción ocurrida.
Las posibilidades de acciones no son muchas, solamente se utiliza en casos específicos y adaptándose a las reglas de seguridad de SAP (No se puede realizar INSERTS o UPDATES a tablas o campos del sistema), algunos ejemplos claros de la utilización del PTN:
• Realizar un update en un campo de usuarios luego de que termina una transacción.
• Realizar un Insert a una tabla de usuarios luego de finalizada una transacción.
El PTN utiliza los mismos parámetros y las mismas variables que el TN.
El procedimiento PTN estándar de SAP Business ONE es el siguiente:
PTN – Ejemplos
• Ejemplo 1: Actualiza un campo de usuarios de los asientos luego de registrar una factura de proveedores.
IF ((:object_type = ’18’) AND (:transaction_type = ‘A’)) THEN
–obtengo el Nro de asiento.
SELECT (SELECT “TransId” FROM OPCH WHERE “DocEntry” = :list_of_cols_val_tab_deL) INTO TransId FROM DUMMY;
SELECT (SELECT “Number” FROM OJDT WHERE “TransId” = :TransId and “CreatedBy” = :list_of_cols_val_tab_deL Order By “Number” desc) INTO Number FROM DUMMY;
–obtengo y guardo en una variable el campo a insertar en el asiento.
SELECT (SELECT “CardCode” FROM OPCH WHERE “DocEntry” = :list_of_cols_val_tab_deL) INTO BPCode FROM DUMMY;
–Hago el UPDATE
UPDATE T0 SET T0.”U_BPCode” = :BPCode FROM JDT1 T0 INNER JOIN OJDT T1 ON T0.”TransId” = T1.”TransId” WHERE T1.”Number” = :Number and T0.”Account” IN (SELECT TX.”AcctCode” FROM OACT TX WHERE TX.”U_CardType” <> ‘NP’);
END IF;
• Ejemplo 2: Inserta el código y nombre de un Interlocutor Comercial en una tabla de usuario luego de crearlo.
IF ((:object_type = ‘2’) AND (:transaction_type = ‘A’)) THEN
–obtengo los datos del cliente.
SELECT (SELECT “CardCode” FROM OCRD WHERE “CardCode” = :list_of_cols_val_tab_deL) INTO CardCode FROM DUMMY;
SELECT (SELECT “CardName” FROM OCRD WHERE “CardCode” = :list_of_cols_val_tab_deL) INTO CardName FROM DUMMY;
–obtengo el ultimo código de la tabla +1
SELECT (SELECT MAX(“Code”)+1 FROM “@NIN_OBJ_AUTO”) INTO Code FROM DUMMY;
–Hago el INSERT
INSERT INTO “@NIN_OBJ_AUTO” (“Code”,”Name”,”U_CardCode”, “U_CardName”) VALUES (:Code,:CardName,:CardCode,:CardName);
END IF;
Curso SQL desde cero básico para SAP Business One - SQL / HANA
Accede al curso en Udemy…
Sintaxis de consultas - SAP Business One
Aprende las particularidades de como escribir query’s en SAP B1. Sintaxis de consultas en SAP Business One.