/// <summary>
        /// Constructor
        /// </summary>
        public SBOAddon()
        {
            try
            {
                //Application forms
                Forms = eCommon.CollectFormsAttribute();

                //--------------- remove and load menus -----------
                // Change if needed ---------------------------
                if (eCommon.SBO_Application.Menus.Exists(SBOAddon.gcAddOnName))
                {
                    eCommon.SBO_Application.Menus.RemoveEx(SBOAddon.gcAddOnName);
                }

                eCommon.SBO_Application.Menus.Item("43520").SubMenus.Add(SBOAddon.gcAddOnName, gcAddonText, BoMenuType.mt_POPUP, 99);
                // Change if needed ---------------------------

                foreach (string Key in Forms.Keys)
                {
                    FormAttribute oAttr = (FormAttribute)Forms[Key];
                    if (oAttr.HasMenu)
                    {
                        if (eCommon.SBO_Application.Menus.Exists(oAttr.FormType))
                        {
                            eCommon.SBO_Application.Menus.RemoveEx(oAttr.FormType);
                        }
                        eCommon.SBO_Application.Menus.Item(oAttr.ParentMenu).SubMenus.Add(oAttr.FormType, oAttr.MenuName, BoMenuType.mt_STRING, oAttr.Position);
                    }
                }

                try
                {
                    eCommon.SBO_Application.Menus.Item(SBOAddon.gcAddOnName).Image = Environment.CurrentDirectory + "\\Logo.JPG";
                }
                catch { }

                //Register Events
                RegisterAppEvents();
                RegisterFormEvents();

                //Register currently opened forms - initialized opened forms so it is ready to use.
                RegisterForms();

                //Create Authorization
                AddAuthorizationTree();

                //Notify the users the addon is ready to use.
                eCommon.SBO_Application.StatusBar.SetText("Addon " + SBOAddon.gcAddOnName + " is ready.", BoMessageTime.bmt_Short, BoStatusBarMessageType.smt_Success);
            }
            catch (Exception ex)
            {
                Connected = false;
                MessageBox.Show("Failed initializing addon. " + ex.Message);
            }
            finally
            {
            }
        }
        public void OnMenuEvent(ref SAPbouiCOM.MenuEvent pVal, out bool Bubble)
        {
            Bubble = true;
            try
            {
                if (pVal.BeforeAction == true)
                {
                    SAPbouiCOM.Form oForm = null;

                    oForm = eCommon.SBO_Application.Forms.ActiveForm;
                    String sXML = oForm.GetAsXML();
                    switch (pVal.MenuUID)
                    {
                    case "1293":
                        break;

                    case "1285":
                        break;
                    }
                }
                else
                {
                    switch (pVal.MenuUID)
                    {
                    default:
                        FormAttribute oAttrib = Forms[pVal.MenuUID] as FormAttribute;
                        if (oAttrib != null)
                        {
                            try
                            {
                                //Execute the constructor
                                System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
                                Type oType = asm.GetType(oAttrib.TypeName);
                                System.Reflection.ConstructorInfo ctor = oType.GetConstructor(new Type[0]);
                                if (ctor != null)
                                {
                                    object oForm = ctor.Invoke(new Object[0]);
                                }
                                else
                                {
                                    throw new Exception("No default constructor found for form type - " + oAttrib.FormType);
                                }
                            }
                            catch (Exception Ex)
                            {
                                eCommon.SBO_Application.MessageBox(Ex.Message);
                            }
                        }
                        break;
                    }
                }
            }
            catch (Exception Ex)
            {
                eCommon.SBO_Application.StatusBar.SetText(Ex.Message, BoMessageTime.bmt_Short, BoStatusBarMessageType.smt_Error);
            }
        }
 private void RegisterForms()
 {
     for (int i = 0; i < eCommon.SBO_Application.Forms.Count; i++)
     {
         if (!oOpenForms.Contains(eCommon.SBO_Application.Forms.Item(i).UniqueID))
         {
             FormAttribute oAttrib = Forms[eCommon.SBO_Application.Forms.Item(i).TypeEx] as FormAttribute;
             if (oAttrib != null)
             {
                 try
                 {
                     //Execute the constructor
                     System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
                     Type oType = asm.GetType(oAttrib.TypeName);
                     System.Reflection.ConstructorInfo ctor = oType.GetConstructor(new Type[1] {
                         typeof(String)
                     });
                     if (ctor != null)
                     {
                         object oForm = ctor.Invoke(new Object[1] {
                             eCommon.SBO_Application.Forms.Item(i).UniqueID
                         });
                     }
                     else
                     {
                         throw new Exception("No constructor which accepts the formUID found for form type - " + oAttrib.FormType);
                     }
                 }
                 catch (Exception ex)
                 {
                     eCommon.SBO_Application.MessageBox(ex.Message);
                 }
             }
         }
     }
 }