Skip to Content
avatar image
Former Member

How to handle C# events in ABAP

I have an ActiveX user control what is displayed in the sapgui. This works fine.

Now I want to handle an event from the control to the ABAP code what was instantiating the control.

I know the handling with VB6 and the event id but how do it work with C#?

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

4 Answers

  • Best Answer
    avatar image
    Former Member
    Aug 07, 2013 at 01:46 PM

    OK, I found the solution by my self with hints from codeproject.com and stackoverflow.com. The main thing is the interface of type dispatch and the connection of it to the class.

    Here is the code:

    using System;

    using System.Text;

    using System.Runtime.InteropServices;

    namespace SceSapGui

    {

        public delegate void SceEventHandler(object text, EventArgs e);     // Definition of the event handler body (parameters)

        // Interface 1 (Dispatch)

        [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] // This interface is for the event handler (dispatch)

        [GuidAttribute("00000000-0000-0000-0000-000000000001")] // Anyone needs a different guid

        [ComVisible(true)] // Make it visible

        public interface ISceSapGuiDispatch

        {

            [DispId(1)] // Define the eventid

            void SceClicked(object text, EventArgs e); // Event definition

        }

        // Interface 2 (Methode and properties)

        [GuidAttribute("00000000-0000-0000-0000-000000000002")] // Anyone needs a different guid

        [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)] // This interface is for data in/out

        [ComVisible(true)] // Make it visible

        public interface ISceSapGui

        {

            void Init(string @URI); // definition of a methode

            string R3ReturnCode { get; } // definition of a readonly property

        }

        [GuidAttribute("00000000-0000-0000-0000-000000000003")] // Anyone needs a different guid

        [ClassInterface(ClassInterfaceType.None)] // Prevent compiler to build automaticaly a default interface

        [ComSourceInterfaces(typeof(ISceSapGuiDispatch))] // Attach the dispatch interface (don't know why in this way and not by inheritance like interface2)

        [ComVisible(true)] // Make it visible

        public partial class SceSapGui : ISceSapGui // Main class derived by interface 2

        {

    #region Interface member ISceSapGuiDispatch

            public event SceEventHandler SceClicked; // Event handler variable

            protected virtual void OnSceClicked(EventArgs e, string text)   // Call this if you want to raise the event

            {

    if (this.SceClicked != null) // but make it only if someone attached to it

    this.SceClicked((object)text, new EventArgs()); // Raise the event

            }

    #endregion

    #region Interface member ISceSapGui

            [ComVisible(true)]

            public void Init(string @URI)

            {

    // ...

            }

            [ComVisible(true)]

            public string R3ReturnCode

            {

    get { return "0"; }

    }

    #endregion

        }

    }

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Jul 17, 2013 at 03:32 PM

    I found two other entries in the forum about this theme but no one was answered.

    Is this the wrong forum? I thought this is a main point in SAP intoroperability - .NET!

    Or is the knowledge in vacation and i am impatient?

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Jan 10, 2014 at 02:44 PM

    Hi Hans,

    I have to do the same for a specific user control, is it possible if you can provide sample example from c# code and abap code?

    Thanks and regards

    Jonathan

    Add comment
    10|10000 characters needed characters exceeded

    • Former Member Former Member

      Yes, it is the same. But this is only if you install your project. If you want to debug your application without install you need to run regasm.

  • avatar image
    Former Member
    Jan 13, 2014 at 12:55 PM

    Thanks Hans It's work now with the abap stack tanks for your help!!!

    Add comment
    10|10000 characters needed characters exceeded