TN es un procedimiento almacenado en las bases de datos de SAP Business One en donde puede incluir validaciones para que se disparan al cumplir ciertas condiciones como ingresen datos erróneos o se les olvide llenar un campo obligatorio.
la ruta es la siguiente: en SQL sobre la base que deseamos realizar el TN \ [Programmability] \ [Stored Procedures] \ [SBO_SP_TransactionNotification].
/****** Object: StoredProcedure [dbo].[SBO_SP_TransactionNotification] Script Date: 10/12/2012 12:24:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[SBO_SP_TransactionNotification]
@object_type nvarchar(20), -- SBO Object Type
Devuelve el número del objeto de la transacción que se está ejecutando. En SAP B1 cada transacción tiene un número identificatorio como la huella digital, ejemplo, las facturas de cliente son el @object_type 13, las de proveedores @object_type 18
@transaction_type nchar(1), -- [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose
En SAP B1 existen 5 tipos de transacciones y la validacion dependera de las que seleccionemos
@num_of_cols_in_key int,
Devuelve el número de campos llave de la tabla que se está afectando.
@list_of_key_cols_tab_del nvarchar(255),
Devuelve el nombre de los campos llave de la tabla que se está afectando.
@list_of_cols_val_tab_del nvarchar(255)
Devuelve el valor del campo llave de la transacción que se está ejecutando en SAP B1, ejemplo, si estas agregando un cliente nuevo devolverá el código interno del ese cliente. Esta es la variable clave a la hora de hacer un script para validar en SAP B1
AS
begin
-- Return values
declare @error int -- Result (0 for no error)
declare @error_message nvarchar (200) -- Error string to be displayed
select @error = 0
Es una variable de salida, por defecto tiene el valor 0 lo que significa que no hay ningún error en la transacción que se está ejecutando. Para bloquear una transacción que no cumple ciertos parámetros hay que asignarle un valor numérico distinto a 0 a esta variable.
select @error_message = N'Ok'
Contiene el mensaje que se mostrará al usuario cuando la transacción que este ejecutando sea no cumpla con las condiciones establecidas
--------------------------------------------------------------------------------------------------------------
ADD YOUR CODE HERE :
incluir sentencias SQL para validar las transacciones en SAP B1.
EJEMPLO:
Que el nombre de un cliente y proveedor no pueda estar en blanco cuando lo ingresen o modifiquen.
lo primero es declarar cuales son los valores de la transacción para que se active la validación. Para este caso usamos el tipo de objeto 2 (socios de negocios) y las transacciones A y U, crear y modificar.
IF @object_type=2 AND @transaction_type IN ('A','U')
BEGIN
END
Luego agregamos dentro del BEGIN la validación. Usamos la tabla OCRD porque esta es la que contiene los socios de negocios (clientes y proveedores), el campo llave de esta tabla es el CardCode y como necesitamos que sea el que se está usando en la transacción le hacemos el match con la variable @list_of_cols_val_tab_del.
IF @object_type=2 AND @transaction_type IN ('A','U')
BEGIN
IF (SELECT ISNULL(T0.CardName,'') FROM OCRD T0 WHERE T0.CardCode=@list_of_cols_val_tab_del)=''
BEGIN
SELECT @error=200, @error_message='Nombre del socio de negocios no puede estar vacio'
END
END
EJEMPLO 2:
valida que el campo del proyecto no este vacio en un pedido de cliente
IF @transaction_type IN ('A', 'U') AND
(@Object_type = '22')
BEGIN
If EXISTS (SELECT T.Project
FROM POR1 T
WHERE T.docentry = @list_of_cols_val_tab_del and
(T.Project IS NULL or T.Project=''))
BEGIN
SET @error = 2
SET @error_message = 'Falta Proyecto'
End
END
--------------------------------------------------------------------------------------------------------------
-- Select the return values
select @error, @error_message
end