Acción cuando se guarde un pedido UI API SDK

Hola muchachos, espero que todos se encuentren bien, resulta que siempre he trabajado con DI API haciendo programas que se conectan a SAP para hacer algo en especial, pero en este momento necesito trabajar con UI API, para crear un add-on que cuando esté activo y creen satisfactoriamente una Orden de Venta, el add-on se lleve el DocNum, DocEntry, DocTotal y tal vez algunos campos más del pedido a una UDT.

Ya he visto los ejemplos del SDK pero en ninguno veo como hacer una acción inmediatamente después de que SAP logre guardar la orden de venta.

Muchas gracias a todos, Dios los bendiga.

El addon va crear las ordenes?
El addon solo sera un monitor de detección de creación de ordenes de venta?

Yo pensaría que puedes hacerlo hasta con un POST TRANSACTION y no dejo lejos la idea de hacerlo tambien por DI API.

1 me gusta

Julian gracias por tomarte el tiempo de escribir, el add-on no va a crear las ordenes, más bien va a monitorear que apenas se guarde la orden de venta en el programa; el mismo add-on luego guarde en unas tablas de usuario unos datos, luego envíe por correo electrónico los datos del pedido y estoy pensando en que más adelante se comunique con un webservice para enviar de una vez estos datos.

Gracias.

Sino te quieres complicar puedes hacerlo con el POST TRANSACTION. sin problema alguno, tomando los datos que necesitas y haciendo un UPDATE a la tabla de usuario.

1 me gusta

que pena Julian más o menos que podría hacer si quisiera enviar inmediatamente la información a un webservice?

Si es por desarrollo tienes que detectar el evento del documento creado y tomar los datos que necesitas para poder enviarselo al webservices.

Hay un método GetNewKey sino mal recuerdo, con ese obtienes el DocEntry del documento creado, teniendo ese dato ya puedes traerte lo que necesites para enviar al WS

1 me gusta

tienes idea de como se llama el evento cuando se crea el documento?

El método se llama GetNewObjectKey() y devuelve el campo llave del último registro grabado, solo que funciona directamente cuando desde el mismo proceso se crea el registro.

Leonardo, me parece que lo que te menciona Julián es lo que ocupas. Al utilizar el SBO_SP_PostTransactionNotice, estás accesando la información en el preciso momento que se almacena. Por ejemplo, yo tengo un proceso de autorización externo en dicho SP, el cual se activa una vez que se graba la orden de venta:

DECLARE @RC int
 ---***** Proc: AutorizaOV *****
 --- Graba los datos para las autorizaciones de las OV -- Creado por:  - CRNS - 21/02/2019
IF (@Object_type = N'18' AND @transaction_type='L') 
BEGIN
	INSERT INTO [InComSAP].[dbo].[AUT_Solicitudes]
	SELECT TU.[Empresa]
      ,T0.CreateDate [FechaMov]
	  ,T0.ObjType [TipoMov]
	  ,T0.DocNum [NumDocumentoSAP]
	  ,T1.USER_CODE [CodUsuarioSAP]
	  ,TP.[CodTipoAutoriz]
	  ,TP.[CodAutorizador]
      ,CASE WHEN TP.[PreAutorizado] = 1 THEN 'A' ELSE 'P' END [Estatus]
      ,T0.CreateDate [FechaEstatus]
	  ,CASE WHEN TP.[PreAutorizado] = 1 THEN 'Pre-autorizado' ELSE 'Favor Autorizar' END [Comentario]
  FROM [SBO_CIA].[dbo].[OPOR] T0 INNER JOIN 
       [SBO_CIA].[dbo].[OUSR] T1 ON T0.UserSign = T1.[USERID] INNER JOIN
	   [InComSAP].[dbo].[AUT_TiposUsuarios] TU ON  T1.[USER_CODE]  =  TU.[CodUsuarioSAP] COLLATE SQL_Latin1_General_CP1_CI_AS INNER JOIN 
	   [InComSAP].[dbo].[AUT_Tipos] TP ON (TP.[Empresa] = TU.[Empresa] AND TP.[CodTipoAutoriz] = TU.[CodTipoAutoriz])
  WHERE TU.[Empresa] = '01' AND TP.[Activo] = 1 AND TU.[Activo] = 1 AND TP.[TipoMov] = '18	    AND T0.DocEntry = CAST(@list_of_cols_val_tab_del AS NVARCHAR(20))

--- *** Llama el SP que envía el correo ***
EXEC @RC = InComSAP.[dbo].[SP_EnviaCorreoOV]  '01',  @list_of_cols_val_tab_del  

END


--- ***** Fin Proc: AutorizaOV *****

Con este código grabo la información que ocupo en una tabla que está en otra base y llamo un SP que envía los correos.

Como te menciono es inmediato.

Hola amigos, ya logré hacer lo que quería, tal vez no me di a entender mucho, pero hice lo siguiente, capturé el evento SAPbouiCOM.BoEventTypes.et_FORM_DATA_ADD y en un if puse lo siguiente (BusinessObjectInfo.BeforeAction == false && BusinessObjectInfo.ActionSuccess == true) por tanto la acción que ponga se ejecutará después de guardada la factura o pedido, pero ahora lo que sucede es que al guardar la factura, estoy llamando un webservice para enviar esos datos del pedido y necesito guardar la respuesta del webservice en unos campos de usuario.

Mi pregunta es: se pueden actualizar campos de usuario con UI API? o debo usar DI API.

Gracias a todos.

Este tema se cerró automáticamente 7 días después de la última publicación. No se permiten nuevas respuestas.