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.
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.
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.
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
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.
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.