Transaction Notification SAP B1 HANA (Hana Studio)

Hola muy buenas tardes.
Por favor su ayuda con lo siguiente.
Para entrar en contexto, tenemos una base productiva y una base de pruebas (Copia).
Por alguna razón todos los TRANSACTION NOTIFICATION que se han elaborado, funcionan en la base productiva, pero dejaron de funcionar en la base de pruebas (que es una copia de la Productiva).

Queremos añadir un TRANSACTION NOTIFICATION, y lo queríamos hacer primero en la de PRUEBAS, antes de colocarlo en la PRODUCTIVA.

Cuál sería podría ser tal vez uno de los motivos por los que los TRANSACTION NOTIFICATION en la base PRUEBAS no se estén ejecutando. ?

Coloco el el código que tenemos en el Store Procedure

CREATE PROCEDURE SBO_SP_TransactionNotification
(
	in object_type nvarchar(30), 				-- SBO Object Type
	in transaction_type nchar(1),			-- [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose
	in num_of_cols_in_key int,
	in list_of_key_cols_tab_del nvarchar(255),
	in list_of_cols_val_tab_del nvarchar(255)
)
LANGUAGE SQLSCRIPT
AS
-- Return values
error  int;				-- Result (0 for no error)
error_message nvarchar (200); 		-- Error string to be displayed
begin

error := 0;
error_message := N'Ok';

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

CALL "HBT_SP_TRANSACTIONNOTIFICATION" (object_type, transaction_type, num_of_cols_in_key, list_of_key_cols_tab_del, list_of_cols_val_tab_del,error, error_message);

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

-- Select the return values
select :error, :error_message FROM dummy;

end;

Este es el código principal, si nos damos cuenta el TRANSACTION NOTIFICATION hace un llamado a otro Store Procedure que en sí es donde se almacenan las SP

Y este es uno de los ejemplos que tenemos de SP

Cita

CREATE PROCEDURE HBT_SP_TRANSACTIONNOTIFICATION
 ( in object_type nvarchar(50),
 -- SBO Object Type
in transaction_type nchar(1),
	 -- [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose
in num_of_cols_in_key int,
	 in list_of_key_cols_tab_del nvarchar(255),
	 in list_of_cols_val_tab_del nvarchar(255),
	 inout error int,
	 -- Result (0 for no error)
 inout error_message nvarchar (200) -- Error string to be displayed
 ) LANGUAGE SQLSCRIPT AS -- Return values
 --Variables procesos HBT
 cnt int;

 
BEGIN
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
-- SP:Validar que no cree un articulo sin que el campo  :  U_PROV_SUBRUPO   no se encuentran llenos
-- FECHA: 22/12/2021
-- USUARIOS: Christian Arguello
--------------------------------------------------------------------------------------------------------------------------------
IF :object_type='4' AND (:transaction_type='A' OR :transaction_type='U') THEN
	cnt := 0;
	
	SELECT COUNT(*) 
	FROM "OITM" T0 
	WHERE T0."ItemCode"=:list_of_cols_val_tab_del
	AND(	T0."U_PROV_SUBRUPO"='' OR T0."U_PROV_SUBRUPO" IS NULL);
		
		   	IF :cnt>0 THEN
			error := -1;
       		error_message := 'No se puede crear el articulo debe llenar el campo SUBGRUPO DE ART ';
			END IF;
END IF;

Recalco que no es un ERROR de código, ya que si los ejecutamos, SQL (de HANA STUDIO) nos dice que se ha ejucatado correctamente.

De antemano muchas gracias por su ayuda.

Eso es que te falta algo… una llamada a la base de datos en algún trozo del código.
O el sp tienes que recrearlo con otro nombre o en su código sql está mencionando la base de datos donde se usa.

Hola @meqs muchas gracias por el tiempo.
Te comento que copie el mismo código de la base en que sí funcionan los SP, en la base de pruebas ( que No funcionan), mediante el ALTER PROCEDURE haciendo referencia a la respectiva base de datos pero igualmente no los ejecuta. :frowning:

He visto en algunos tutoriales que en vez de usar ALTER usan la el DROP. Al recreear el SP lo mejor sería usar el DROP verdad ? y posteriormente CREARLO con un nuevo nombre. ?

La verdad es la 1era vez que estoy ejecutando código en HANA STUDIO y en una base productiva.
Por lo que antes de hacer cualquier cosa en la BASE PRODUCTIVA, deseo hacer las respectivas pruebas en la otra base.

Muchas gracias de antemano.

Si el SP está en la propia base de datos, no deberías tener problema salvo revisar el código.
A lo que me refiero es que tienes que repasar el código sql entero, por si está haciendo referencia a la base de datos de ejecución en su código y tendrías que actualizarlo.
Si el SP está en otra base de datos deberías tener un SP de pruebas.

que tal @JoseLopez ,

Por lo que entiendo, ambas bases de datos son iguales, incluyendo los transaction, sin embargo en una no te funciona. de pura casualidad haz revisado las parametrizaciones generales, revisa si en la BD que no te funciona el transaction tienes activada la opcion de “Habilitar notificaciones de operaciones” en la pestaña de servicios. Con ese check habilitas o deshabilitas que entre el transaction Notification.

Saludos.

3 Me gusta

Hola @JoseLopez

Yo si veo un detalle en la consulta, estas asignado 0 a tu variable cnt y en el IF preguntas si es mayor a 0 , siempre será cero ya que así le signaste el valor y por lo tanto no entrará la validación, intenta así:

IF :object_type='4' AND (:transaction_type='A' OR :transaction_type='U') 
THEN	
	SELECT Count (T0."ItemCode") into  cnt 
	FROM OITM T0 
	WHERE T0."ItemCode" = list_of_cols_val_tab_del
	AND (T0."U_PROV_SUBRUPO" = '' OR T0."U_PROV_SUBRUPO" IS NULL);
		   	IF :cnt>0
       THEN
			error := -1;
       		error_message := 'No se puede crear el articulo debe llenar el campo SUBGRUPO DE ART ';
      END IF;
END IF;

@JoSeVc Amigo eres un genio, un PRO.
Muchas gracias por el tiempo y por la respuesta, efectivamente eso ha sido, no estaba activada esa opción.
La active y ya empezaron a correr los TN :slight_smile:

Te agradezco millón.

1 me gusta

Hola @pcarrasco gracias por la observación, es algo que me di cuenta después.
Y ese era uno de los muchos TN que no se ejecutaban en la base de pruebas.
:slight_smile: