¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como lidar com eventos a partir de um controle personalizado em C# no ABAP: Guia passo a passo

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

Olá a todos,

Existe alguma maneira de lidar com eventos a partir de um controle personalizado em C# no ABAP?

Quando eu usava controles ActiveX, era fácil: apenas verificava o EventID em DISPATCH e RAISE EVENT que então seria tratado...

Mas agora, com controles em C#, os eventos são funções "delegadas", e simplesmente não consigo entender como fazer o ABAP se inscrever nesse tipo de evento complicado...

Por favor, ajuda!

Obrigado,

Arnaldo.

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

2 Respuestas

0
Cargando...

°Obrigado, Giridhar!

Mas meu problema ainda persiste... Eu sei como declarar um evento em C# - e até mesmo meu componente está ativando-o ao ser instanciado no IExplore, por exemplo.

O problema principal é que, ao criar uma classe proxy em ABAP (herdando de CL_GUI_CONTROL), meu controle em C# simplesmente não ativa o evento, pois não há inscritos para ele.

Explicando melhor:

Tenho um componente chamado MYCOMP.Component, e ele tem um evento chamado Selected. Este evento tem o número de DispatchID 16.

Se eu o uso em uma página da web, assim


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

...°funciona perfeitamente! Acredito que o Internet Explorer se inscreve no evento da forma correta.

Agora em ABAP, digamos que eu criei um ZCL_GUI_MYCOMP, que está sendo instanciado corretamente dentro de um contêiner... Consigo ver e usar meu componente dentro do SAP. Mas mesmo depois de chamar SET_REGISTERED_EVENTS passando o eventid = 16 (meu DispID, lembra?), °o método DISPATCH nunca é chamado! E quando depuro o componente dentro do Visual Studio, quando o evento deveria ser ativado, ele me diz que o evento Select é nulo.

Parece que preciso fazer com que o ABAP se inscreva na função delegada do meu componente, ou algo assim. Estou ficando louco depois de três noites sem dormir?

°Obrigado!

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