¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo manejar eventos desde un control personalizado de C# en ABAP: Guía paso a paso

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 14 Vistas
0
Cargando...

Hola a todos,

¿Existe alguna manera de manejar eventos desde un control personalizado de C# en ABAP?

Cuando usaba controles ActiveX, era fácil: solo verificaba por EventID en DISPATCH y RAISE EVENT que luego se manejaría...

Pero ahora, con controles de C#, los eventos son funciones "delegadas", y simplemente no logro entender cómo hacer que ABAP se suscriba a este tipo de evento complicado...

¡Por favor, ayuda!

Gracias,

Arnaldo.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

2 Respuestas

0
Cargando...

¡Gracias, Giridhar!

Pero mi problema aún persiste... Sé cómo declarar un evento en C# - e incluso mi componente lo está activando al ser instanciado en IExplore, por ejemplo.

El problema principal es que, al crear una clase proxy en ABAP (heredando de CL_GUI_CONTROL), mi control en C# simplemente no activa el evento, porque no hay suscriptores para él.

Explicando mejor:

Tengo un componente llamado MYCOMP.Component, y tiene un evento llamado Selected. Este evento tiene el número de DispatchID 16.

Si lo uso en una página web, así


<object id="comp" ClassID="clsid:my-big-clsid"</object> 
<script for="comp" event="Selected">
alert("¡Activado!");
</script>

...¡funciona perfectamente! Creo que Internet Explorer suscribe al evento de la forma correcta.

Ahora en ABAP, digamos que creé un ZCL_GUI_MYCOMP, que está siendo instanciado correctamente dentro de un contenedor... Puedo ver y usar mi componente dentro de SAP. Pero incluso después de llamar a SET_REGISTERED_EVENTS pasando el eventid = 16 (mi DispID, ¿recuerdas?), <b>¡el método DISPATCH nunca es llamado!</b> Y cuando depuro el componente dentro de Visual Studio, cuando el evento debería activarse, me dice que el evento Select es nulo.

Parece que necesito hacer que ABAP se suscriba a la función delegada de mi componente, o algo así. ¿O me estoy volviendo loco después de tres noches sin dormir?

¡Gracias!

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Este artículo explicará cómo declarar y usar los eventos de C# en tu aplicación como Control de Evento. Puedes diseñar tu control de evento en un par de minutos, lo que facilitará a los desarrolladores de GUI implementar eventos en el lado del cliente.

Aquí están los pasos:

Crea un Proyecto de Aplicación de Windows.

Agrega una "Clase de Componente" usando "Agregar Nuevo Elemento". Esta será tu Control de Evento.

Declara tu delegado en tu Control de Evento bajo tu espacio de nombres.

Ahora declara tu evento dentro de la clase de tu Control de Evento.

También agrega el método FireTheEvent para disparar el evento.

Construye el proyecto.

Ve a Formulario, luego a la Caja de Herramientas, agrega el Control de Evento usando el menú "Agregar/Quitar Elementos" haciendo clic derecho en la caja de herramientas.

Arrastra y suelta el nuevo control. Usando la ventana de propiedades del control, puedes implementar fácilmente el método de Evento en tu aplicación.

Llama al método FireTheEvent en el clic de tu botón después de agregar un nuevo botón a tu formulario.

Ejecuta la aplicación y haz clic en tu botón, deberías ver tu Evento disparándose.

Aquí tienes una lista de todos los eventos para el control DataGrid:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebUIWebContr... .

Después de consultar la información del Controlador de Eventos de DataGrid (http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolsdatagriditemeventhandlerclasstopic.asp), creo que querrás que tu código se vea algo así:

<%@ Page Language="C#" AutoEventWireup="True" %>

<%@ Import Namespace="System.Data" %>

<script language="C#" runat="server">

void Page_Load(Object sender, EventArgs e)

{

// Configurar las cosas...

}

void Item_Data_Bound(Object sender, DataGridItemEventArgs e)

{

// Tu código de evento

}

</script>

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?