cancel
Showing results for 
Search instead for 
Did you mean: 

SBO_SP_TransactionNotification

Former Member
0 Kudos

Hola buen día compañeros

He creado dos notificaciones dentro del  TransactionNotification el problema que tengo es el siguiente coloco uno sobre el código y funciona, coloco el segundo de igual modo funciona al momento de meter los dos juntos no funciona, no he encontrado de meter dos códigos dentro del mismo transac realmente desconozco donde dividirlos y si existe algún comando de sql para separa uno del otro.

Agradezco su atencion de antemano

Accepted Solutions (1)

Accepted Solutions (1)

rjovel
Active Participant
0 Kudos

podrias subir el codigo para entender mejor?

Former Member
0 Kudos

El código que tengo funcionado es el siguiente:

GO

ALTER proc [dbo].[SBO_SP_TransactionNotification]

@object_type nvarchar(20),                                         -- SBO Object Type

@transaction_type nchar(1),                              -- [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose

@num_of_cols_in_key int,

@list_of_key_cols_tab_del nvarchar(255),

@list_of_cols_val_tab_del nvarchar(255)

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

select @error_message = N'Ok'

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

****OBJETIVO: El no de autorización del banco no exista mas de una vez en la orden de venta

declare @u_folio varchar(20)

set @u_folio = ''

if @object_type = '17' and @transaction_type = 'A'

begin

select @u_folio = isnull(u_folio,'') from ORDR where DocEntry = @list_of_cols_val_tab_del

if (select count(u_folio) from ordr where U_Folio = @u_folio) > 1

begin

set @error = -5002

set @error_message = N'Error Critico Número de folio no valido, Favor de verificar'

end

end

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

-- Select the return values

select @error, @error_message

end

Y QUIERO AGREGAR DE UN EJEMPLO QUE VI EN INTERNET EL SIGUIENTE DENTRO DE ESE STORE PROCEDURE DEL TRANSACTIONOTIFICATION :

IF @object_type = 23 and @transaction_type in ('A','U') -- Aqui le decimos que actue solo cuando el tipo de objeto sea 23 (Ventana de Oferta de Ventas, y cuando este en modo Crear y Actualizar

BEGIN

declare @referencia varchar(100) -- Declaramos una variable que guarde el valor de la referencia de SN

-- Agregamos nuestra consulta que nos traera el valor de el numero de referencia , y dicho valor lo asignara a la variable @referencia

SELECT @referencia = OQUT.NumAtCard

FROM OQUT

WHERE @list_of_cols_val_tab_del=OQUT.DocEntry -- @list_of_cols_val_tab_del lo utilizamos para que nos tome el numero de documento actual o que estara en pantalla

if @referencia is null -- Si la consulta nos trae un valor nulo asignara el valor 1 al error y el mensaje de error personalizado, lo cual bloqueara la accion, en caso contrario dejara avanzar

begin

set @error = 1

set @error_message = 'Falta referencia'

end

END

rjovel
Active Participant
0 Kudos

intenta esto:

set @u_folio = (select isnull(u_folio,'') from ORDR where DocEntry = @list_of_cols_val_tab_del

if (select count(u_folio) from ordr where U_Folio = @u_folio) >= 1

---***  >= porque si le pones solo > te dejaria repetirlo dos veces.

intenta y me comentas.

Former Member
0 Kudos

Hola

Creo que hay una confusión ambos querys funcionan y están validados el problema es que quiero meter los dos en el store procedure del transanc no he podido hacer funcionar a ambos.

Saludos

rjovel
Active Participant
0 Kudos

cada vez que hagas eso tenes que cambiar los nombres de las variables, no podes usar dos veces el mismo nombre de variable, o intentar usar una en otro procedure que ya este declarada, quizas por ahi viene el problema

en este ejemplo la variable fue @u_folio

para usar la misma sintaxis tendrias que declarar una nueva @u_folio2

sera ese el problema???

saludos.

former_member210784
Active Contributor
0 Kudos

Hola.

Puedes colocar ambos uno debajo del otro dentro del SP (TN), deben funcionar. Colócalos debajo de:

"Add your code here"         

y/o antes de:

"-- Select the return values

select

@error, @error_message

end

"

Saludos.

Former Member
0 Kudos

Lo tengo de la siguiente manera pero el segundo código deja de funcionar por alguna razón no se  si se deba poner algún comando para indicar que es otro código o declarar nuevamente las variables.

Nota el código no marca error solo que cuando ejecuto la acción en el SAP es como si no funcionara y no hace la validación.

Saludos

ALTER proc [dbo].[SBO_SP_TransactionNotification]

@object_type nvarchar(20),                     -- SBO Object Type

@transaction_type nchar(1),              -- [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose

@num_of_cols_in_key int,

@list_of_key_cols_tab_del nvarchar(255),

@list_of_cols_val_tab_del nvarchar(255)

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

select @error_message = N'Ok'

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

****OBJETIVO: El no de autorizacion del banco no exista mas de una vez en la orden de venta

****/

declare @u_folio varchar(20)

set @u_folio = ''

if @object_type = '17' and @transaction_type = 'A'

begin

select @u_folio = isnull(u_folio,'') from ORDR where DocEntry = @list_of_cols_val_tab_del

if (select count(u_folio) from ordr where U_Folio = @u_folio) > 1

begin

set @error = -5002

set @error_message = N'Error Critico Número de folio no valido, Favor de verificar'

end

end

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

IF @object_type = 23 and @transaction_type in ('A','U') -- BEGIN

declare @referencia varchar(100) --

SELECT @referencia = OQUT.NumAtCard

FROM OQUT

WHERE @list_of_cols_val_tab_del=OQUT.DocEntry --

if (select @referencia) <

begin

set @error = 1

set @error_message = 'Falta referencia'

end

END

-- Select the return values

select @error, @error_message

end

former_member203638
Active Contributor
0 Kudos

Angel, pega esto y quita los tuyos, y prueba,

If @object_type = '17' and @transaction_type in ( 'A','U')

BEGIN

declare @folioV nvarchar(16)

set @FolioV=(Select isnull(I.U_Folio,'') From ORDR I Where I.DocEntry=@list_of_cols_val_tab_del)

If (@FolioV!='') and exists (Select I.U_Folio From ORDR I Where I.U_FOlio=@FolioV and I.DocEntry!=@list_of_cols_val_tab_del)

Select @error =12,

          @error_message = 'Error Critico Número de folio no valido, Favor de verificar'

END

IF @object_type = 23 and @transaction_type in ('A','U')

BEGIN

declare @referenciaC varchar(100)

SELECT @referenciaC = OQUT.NumAtCard

FROM OQUT

WHERE @list_of_cols_val_tab_del=OQUT.DocEntry

if (select @referenciaC) IS null

begin

select @error = 1,

          @error_message = 'Falta referencia'

end End

Saludos

Alessandro.

rjovel
Active Participant
0 Kudos

en la linea 5 estas haciendo on loop al mismo documento que se esta creando, y deberia buscar en toda la tabla si ya existe.

solo eso cambie en tu codigo como sugerencia.

  1. If @object_type = '17' and @transaction_type in ( 'A','U'
  2. BEGIN 
  3. declare @folioV nvarchar(16) 
  4. set @FolioV=(Select isnull(I.U_Folio,'') From ORDR I Where I.DocEntry=@list_of_cols_val_tab_del) 
  5. If (@FolioV!='') and exists (Select I.U_Folio From ORDR I Where I.U_FOlio=@FolioV
  6. Select @error =12,  
  7.           @error_message = 'Error Critico Número de folio no valido, Favor de verificar' 
  8. END 
  9.  
  10.  
  11. IF @object_type = 23 and @transaction_type in ('A','U')  
  12. BEGIN 
  13. declare @referenciaC varchar(100)  
  14. SELECT @referenciaC = OQUT.NumAtCard 
  15. FROM OQUT 
  16. WHERE @list_of_cols_val_tab_del=OQUT.DocEntry  
  17. if (select @referenciaC) IS null 
  18. begin 
  19. select @error = 1, 
  20.           @erro
  21. r_message = 'Falta referencia' 
  22. end End 
former_member203638
Active Contributor
0 Kudos

La condicion es que sea diferente al documento actual !=.

DocEntry!=@list_of_cols_val_tab_del

Answers (1)

Answers (1)

Former Member
0 Kudos

Agradezco a todos por la solución efectivamente estaba mal la consulta inicial, pero no lo había notado por que en teoría el patner fue quien la dejo establecido y no había puesto atención.

Saludos y gracias por su aportacion