<html><head></head><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:10px"><div dir="ltr" id="yui_3_16_0_ym19_1_1461029038584_4782">Hi<br id="yui_3_16_0_ym19_1_1461029038584_6750"><br id="yui_3_16_0_ym19_1_1461029038584_6751">I am having trouble figuring out how do add events to a COM UI interface.<br id="yui_3_16_0_ym19_1_1461029038584_6752">So far all the things that I have tried after reading posts on many forums either result in an error, cause the interface to hang or do nothing at all.<br id="yui_3_16_0_ym19_1_1461029038584_6753"><br id="yui_3_16_0_ym19_1_1461029038584_6754">The UI in reference is the SAP Business One UI API Version 9.0 a.k.a. SAbouiCOM.exe<br id="yui_3_16_0_ym19_1_1461029038584_6755">The documentation has examples in VB and C# which I have copied below in case they help.<br id="yui_3_16_0_ym19_1_1461029038584_6756"><br id="yui_3_16_0_ym19_1_1461029038584_6757">I am not familiar with Windows programming, VB, or C# by any strectch of one's imagination so at this stage any help is appreciated and it will be promptly tried out.<br id="yui_3_16_0_ym19_1_1461029038584_6758">First some relevant parts from the makepy output, and when I say relevant it is what I imagine to be important, I can post the whole thing somewhere if required:<br id="yui_3_16_0_ym19_1_1461029038584_6759"><br id="yui_3_16_0_ym19_1_1461029038584_6760"># -*- coding: mbcs -*-<br id="yui_3_16_0_ym19_1_1461029038584_6761"># Created by makepy.py version 0.5.01<br id="yui_3_16_0_ym19_1_1461029038584_6762"># By python version 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:40:30) [MSC v.1500 64 bit (AMD64)]<br id="yui_3_16_0_ym19_1_1461029038584_6763"># >From type library 'SAPbouiCOM.exe'<br id="yui_3_16_0_ym19_1_1461029038584_6764"># On Sun Mar 06 18:20:27 2016<br id="yui_3_16_0_ym19_1_1461029038584_6765"><br id="yui_3_16_0_ym19_1_1461029038584_6766">class _IApplicationEvents:<br id="yui_3_16_0_ym19_1_1461029038584_6767"> '_IApplicationEvents Interface'<br id="yui_3_16_0_ym19_1_1461029038584_6768"> CLSID = CLSID_Sink = IID('{81B441CB-BB83-44B2-8A62-6DFBEB7B6217}')<br id="yui_3_16_0_ym19_1_1461029038584_6769"> coclass_clsid = IID('{49B5C554-9A6B-4530-A90D-2B51B27BCEDA}')<br id="yui_3_16_0_ym19_1_1461029038584_6770"> _public_methods_ = [] # For COM Server support<br id="yui_3_16_0_ym19_1_1461029038584_6771"> _dispid_to_func_ = {<br id="yui_3_16_0_ym19_1_1461029038584_6772"> 120 : "OnLayoutKeyEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6773"> 103 : "OnStatusBarEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6774"> 100 : "OnItemEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6775"> 109 : "OnWidgetEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6776"> 108 : "OnFormDataEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6777"> 106 : "OnReportDataEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6778"> 101 : "OnMenuEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6779"> 202 : "OnServerInvokeCompletedEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6780"> 201 : "OnUDOEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6781"> 102 : "OnAppEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6782"> 104 : "OnProgressBarEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6783"> 105 : "OnPrintEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6784"> 107 : "OnRightClickEvent",<br id="yui_3_16_0_ym19_1_1461029038584_6785"> }<br id="yui_3_16_0_ym19_1_1461029038584_6786"><br id="yui_3_16_0_ym19_1_1461029038584_6787"> def __init__(self, oobj = None):<br id="yui_3_16_0_ym19_1_1461029038584_6788"> if oobj is None:<br id="yui_3_16_0_ym19_1_1461029038584_6789"> self._olecp = None<br id="yui_3_16_0_ym19_1_1461029038584_6790"> else:<br id="yui_3_16_0_ym19_1_1461029038584_6791"> import win32com.server.util<br id="yui_3_16_0_ym19_1_1461029038584_6792"> from win32com.server.policy import EventHandlerPolicy<br id="yui_3_16_0_ym19_1_1461029038584_6793"> cpc=oobj._oleobj_.QueryInterface(pythoncom.IID_IConnectionPointContainer)<br id="yui_3_16_0_ym19_1_1461029038584_6794"> cp=cpc.FindConnectionPoint(self.CLSID_Sink)<br id="yui_3_16_0_ym19_1_1461029038584_6795"> cookie=cp.Advise(win32com.server.util.wrap(self, usePolicy=EventHandlerPolicy))<br id="yui_3_16_0_ym19_1_1461029038584_6796"> self._olecp,self._olecp_cookie = cp,cookie<br id="yui_3_16_0_ym19_1_1461029038584_6797"> def __del__(self):<br id="yui_3_16_0_ym19_1_1461029038584_6798"> try:<br id="yui_3_16_0_ym19_1_1461029038584_6799"> self.close()<br id="yui_3_16_0_ym19_1_1461029038584_6800"> except pythoncom.com_error:<br id="yui_3_16_0_ym19_1_1461029038584_6801"> pass<br id="yui_3_16_0_ym19_1_1461029038584_6802"> def close(self):<br id="yui_3_16_0_ym19_1_1461029038584_6803"> if self._olecp is not None:<br id="yui_3_16_0_ym19_1_1461029038584_6804"> cp,cookie,self._olecp,self._olecp_cookie = self._olecp,self._olecp_cookie,None,None<br id="yui_3_16_0_ym19_1_1461029038584_6805"> cp.Unadvise(cookie)<br id="yui_3_16_0_ym19_1_1461029038584_6806"> def _query_interface_(self, iid):<br id="yui_3_16_0_ym19_1_1461029038584_6807"> import win32com.server.util<br id="yui_3_16_0_ym19_1_1461029038584_6808"> if iid==self.CLSID_Sink: return win32com.server.util.wrap(self)<br id="yui_3_16_0_ym19_1_1461029038584_6809"><br id="yui_3_16_0_ym19_1_1461029038584_6810"> # Event Handlers<br id="yui_3_16_0_ym19_1_1461029038584_6811"> # If you create handlers, they should have the following prototypes:<br id="yui_3_16_0_ym19_1_1461029038584_6812"># def OnLayoutKeyEvent(self, eventInfo=defaultNamedNotOptArg, BubbleEvent=pythoncom.Missing):<br id="yui_3_16_0_ym19_1_1461029038584_6813"># 'method LayoutKeyEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6814"># def OnStatusBarEvent(self, Text=defaultNamedNotOptArg, messageType=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6815"># 'method StatusBarEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6816"># def OnItemEvent(self, FormUID=defaultNamedNotOptArg, pVal=defaultNamedNotOptArg, BubbleEvent=pythoncom.Missing):<br id="yui_3_16_0_ym19_1_1461029038584_6817"># 'ItemEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6818"># def OnWidgetEvent(self, pWidgetData=defaultNamedNotOptArg, BubbleEvent=pythoncom.Missing):<br id="yui_3_16_0_ym19_1_1461029038584_6819"># 'method WidgetEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6820"># def OnFormDataEvent(self, BusinessObjectInfo=defaultNamedNotOptArg, BubbleEvent=pythoncom.Missing):<br id="yui_3_16_0_ym19_1_1461029038584_6821"># 'method FormDataEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6822"># def OnReportDataEvent(self, eventInfo=defaultNamedNotOptArg, BubbleEvent=pythoncom.Missing):<br id="yui_3_16_0_ym19_1_1461029038584_6823"># 'method ReportDataEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6824"># def OnMenuEvent(self, pVal=defaultNamedNotOptArg, BubbleEvent=pythoncom.Missing):<br id="yui_3_16_0_ym19_1_1461029038584_6825"># 'MenuEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6826"># def OnServerInvokeCompletedEvent(self, b1iEventArgs=defaultNamedNotOptArg, BubbleEvent=pythoncom.Missing):<br id="yui_3_16_0_ym19_1_1461029038584_6827"># 'method ServerInvokeCompletedEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6828"># def OnUDOEvent(self, udoEventArgs=defaultNamedNotOptArg, BubbleEvent=pythoncom.Missing):<br id="yui_3_16_0_ym19_1_1461029038584_6829"># 'method UDOEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6830"># def OnAppEvent(self, EventType=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6831"># 'ApplicationEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6832"># def OnProgressBarEvent(self, pVal=defaultNamedNotOptArg, BubbleEvent=pythoncom.Missing):<br id="yui_3_16_0_ym19_1_1461029038584_6833"># 'method ProgressBarEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6834"># def OnPrintEvent(self, eventInfo=defaultNamedNotOptArg, BubbleEvent=pythoncom.Missing):<br id="yui_3_16_0_ym19_1_1461029038584_6835"># 'method PrintEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6836"># def OnRightClickEvent(self, eventInfo=defaultNamedNotOptArg, BubbleEvent=pythoncom.Missing):<br id="yui_3_16_0_ym19_1_1461029038584_6837"># 'method RightClickEvent'<br id="yui_3_16_0_ym19_1_1461029038584_6838"><br id="yui_3_16_0_ym19_1_1461029038584_6839"><br id="yui_3_16_0_ym19_1_1461029038584_6840"># This CoClass is known by the name 'SAPbouiCOM.Application.90.0'<br id="yui_3_16_0_ym19_1_1461029038584_6841">class Application(CoClassBaseClass): # A CoClass<br id="yui_3_16_0_ym19_1_1461029038584_6842"> # Application Class<br id="yui_3_16_0_ym19_1_1461029038584_6843"> CLSID = IID('{49B5C554-9A6B-4530-A90D-2B51B27BCEDA}')<br id="yui_3_16_0_ym19_1_1461029038584_6844"> coclass_sources = [<br id="yui_3_16_0_ym19_1_1461029038584_6845"> _IApplicationEvents,<br id="yui_3_16_0_ym19_1_1461029038584_6846"> ]<br id="yui_3_16_0_ym19_1_1461029038584_6847"> default_source = _IApplicationEvents<br id="yui_3_16_0_ym19_1_1461029038584_6848"> coclass_interfaces = [<br id="yui_3_16_0_ym19_1_1461029038584_6849"> IApplication,<br id="yui_3_16_0_ym19_1_1461029038584_6850"> ]<br id="yui_3_16_0_ym19_1_1461029038584_6851"> default_interface = IApplication<br id="yui_3_16_0_ym19_1_1461029038584_6852"><br id="yui_3_16_0_ym19_1_1461029038584_6853"><br id="yui_3_16_0_ym19_1_1461029038584_6854">class IApplication(DispatchBaseClass):<br id="yui_3_16_0_ym19_1_1461029038584_6855"> 'IApplication Interface'<br id="yui_3_16_0_ym19_1_1461029038584_6856"> CLSID = IID('{D1F75D47-137C-4335-AC2A-3FE209831B6A}')<br id="yui_3_16_0_ym19_1_1461029038584_6857"> coclass_clsid = IID('{49B5C554-9A6B-4530-A90D-2B51B27BCEDA}')<br id="yui_3_16_0_ym19_1_1461029038584_6858"><br id="yui_3_16_0_ym19_1_1461029038584_6859"> def ActivateMenuItem(self, MenuUID=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6860"> 'method ActivateMeunItem'<br id="yui_3_16_0_ym19_1_1461029038584_6861"> return self._oleobj_.InvokeTypes(52, LCID, 1, (24, 0), ((8, 1),),MenuUID<br id="yui_3_16_0_ym19_1_1461029038584_6862"> )<br id="yui_3_16_0_ym19_1_1461029038584_6863"><br id="yui_3_16_0_ym19_1_1461029038584_6864"> def ActivateToolbar(self, MenuUID=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6865"> 'method ActivateToolbar'<br id="yui_3_16_0_ym19_1_1461029038584_6866"> return self._oleobj_.InvokeTypes(86, LCID, 1, (24, 0), ((8, 1),),MenuUID<br id="yui_3_16_0_ym19_1_1461029038584_6867"> )<br id="yui_3_16_0_ym19_1_1461029038584_6868"><br id="yui_3_16_0_ym19_1_1461029038584_6869"> def CreateObject(self, Type=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6870"> 'Method CreateObject'<br id="yui_3_16_0_ym19_1_1461029038584_6871"> ret = self._oleobj_.InvokeTypes(65, LCID, 1, (9, 0), ((3, 1),),Type<br id="yui_3_16_0_ym19_1_1461029038584_6872"> )<br id="yui_3_16_0_ym19_1_1461029038584_6873"> if ret is not None:<br id="yui_3_16_0_ym19_1_1461029038584_6874"> ret = Dispatch(ret, u'CreateObject', None)<br id="yui_3_16_0_ym19_1_1461029038584_6875"> return ret<br id="yui_3_16_0_ym19_1_1461029038584_6876"><br id="yui_3_16_0_ym19_1_1461029038584_6877"> def ExportRptAsXML(self, rptPath=defaultNamedNotOptArg, params=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6878"> 'property ExportRptAsXML'<br id="yui_3_16_0_ym19_1_1461029038584_6879"> # Result is a Unicode object<br id="yui_3_16_0_ym19_1_1461029038584_6880"> return self._oleobj_.InvokeTypes(75, LCID, 1, (8, 0), ((8, 1), (8, 1)),rptPath<br id="yui_3_16_0_ym19_1_1461029038584_6881"> , params)<br id="yui_3_16_0_ym19_1_1461029038584_6882"><br id="yui_3_16_0_ym19_1_1461029038584_6883"> # Result is of type IEventFilters<br id="yui_3_16_0_ym19_1_1461029038584_6884"> def GetFilter(self):<br id="yui_3_16_0_ym19_1_1461029038584_6885"> 'GetFilter'<br id="yui_3_16_0_ym19_1_1461029038584_6886"> ret = self._oleobj_.InvokeTypes(56, LCID, 1, (9, 0), (),)<br id="yui_3_16_0_ym19_1_1461029038584_6887"> if ret is not None:<br id="yui_3_16_0_ym19_1_1461029038584_6888"> ret = Dispatch(ret, u'GetFilter', '{CE8A5ED3-BA2B-4CE1-932A-53F4E92994F0}')<br id="yui_3_16_0_ym19_1_1461029038584_6889"> return ret<br id="yui_3_16_0_ym19_1_1461029038584_6890"><br id="yui_3_16_0_ym19_1_1461029038584_6891"> def GetFormItemDefaultHeight(self, itemType=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6892"> 'GetFormItemDefaultHeight'<br id="yui_3_16_0_ym19_1_1461029038584_6893"> return self._oleobj_.InvokeTypes(81, LCID, 1, (3, 0), ((3, 1),),itemType<br id="yui_3_16_0_ym19_1_1461029038584_6894"> )<br id="yui_3_16_0_ym19_1_1461029038584_6895"><br id="yui_3_16_0_ym19_1_1461029038584_6896"> def GetFormItemDefaultWidth(self, itemType=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6897"> 'GetFormItemDefaultWidth'<br id="yui_3_16_0_ym19_1_1461029038584_6898"> return self._oleobj_.InvokeTypes(80, LCID, 1, (3, 0), ((3, 1),),itemType<br id="yui_3_16_0_ym19_1_1461029038584_6899"> )<br id="yui_3_16_0_ym19_1_1461029038584_6900"><br id="yui_3_16_0_ym19_1_1461029038584_6901"> def GetLastBatchResults(self):<br id="yui_3_16_0_ym19_1_1461029038584_6902"> 'GetLastBatchResults'<br id="yui_3_16_0_ym19_1_1461029038584_6903"> # Result is a Unicode object<br id="yui_3_16_0_ym19_1_1461029038584_6904"> return self._oleobj_.InvokeTypes(57, LCID, 1, (8, 0), (),)<br id="yui_3_16_0_ym19_1_1461029038584_6905"><br id="yui_3_16_0_ym19_1_1461029038584_6906"> def LoadBatchActions(self, XmlStr=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6907"> 'Batch Action'<br id="yui_3_16_0_ym19_1_1461029038584_6908"> return self._ApplyTypes_(54, 1, (24, 0), ((16392, 3),), u'LoadBatchActions', None,XmlStr<br id="yui_3_16_0_ym19_1_1461029038584_6909"> )<br id="yui_3_16_0_ym19_1_1461029038584_6910"><br id="yui_3_16_0_ym19_1_1461029038584_6911"> def MessageBox(self, Text=defaultNamedNotOptArg, DefaultBtn=1, Btn1Caption=u'Ok', Btn2Caption=u''<br id="yui_3_16_0_ym19_1_1461029038584_6912"> , Btn3Caption=u''):<br id="yui_3_16_0_ym19_1_1461029038584_6913"> 'method MessageBox'<br id="yui_3_16_0_ym19_1_1461029038584_6914"> return self._ApplyTypes_(50, 1, (3, 32), ((8, 1), (3, 49), (8, 49), (8, 49), (8, 49)), u'MessageBox', None,Text<br id="yui_3_16_0_ym19_1_1461029038584_6915"> , DefaultBtn, Btn1Caption, Btn2Caption, Btn3Caption)<br id="yui_3_16_0_ym19_1_1461029038584_6916"><br id="yui_3_16_0_ym19_1_1461029038584_6917"> # Result is of type IForm<br id="yui_3_16_0_ym19_1_1461029038584_6918"> def OpenForm(self, sysObjectType=defaultNamedNotOptArg, bstrUDOObjectType=defaultNamedNotOptArg, bstrObjectKey=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6919"> 'method OpenForm'<br id="yui_3_16_0_ym19_1_1461029038584_6920"> ret = self._oleobj_.InvokeTypes(84, LCID, 1, (9, 0), ((3, 1), (8, 1), (8, 1)),sysObjectType<br id="yui_3_16_0_ym19_1_1461029038584_6921"> , bstrUDOObjectType, bstrObjectKey)<br id="yui_3_16_0_ym19_1_1461029038584_6922"> if ret is not None:<br id="yui_3_16_0_ym19_1_1461029038584_6923"> ret = Dispatch(ret, u'OpenForm', '{50BA08F8-4392-4395-B35A-50C93CA91A0C}')<br id="yui_3_16_0_ym19_1_1461029038584_6924"> return ret<br id="yui_3_16_0_ym19_1_1461029038584_6925"><br id="yui_3_16_0_ym19_1_1461029038584_6926"> def RemoveWindowsMessage(self, messageType=defaultNamedNotOptArg, toProcess=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6927"> 'method RemoveWindowsMessage'<br id="yui_3_16_0_ym19_1_1461029038584_6928"> return self._oleobj_.InvokeTypes(105, LCID, 1, (24, 0), ((3, 1), (11, 1)),messageType<br id="yui_3_16_0_ym19_1_1461029038584_6929"> , toProcess)<br id="yui_3_16_0_ym19_1_1461029038584_6930"><br id="yui_3_16_0_ym19_1_1461029038584_6931"> def SendKeys(self, Text=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6932"> 'method SendKeys'<br id="yui_3_16_0_ym19_1_1461029038584_6933"> return self._oleobj_.InvokeTypes(53, LCID, 1, (24, 0), ((8, 1),),Text<br id="yui_3_16_0_ym19_1_1461029038584_6934"> )<br id="yui_3_16_0_ym19_1_1461029038584_6935"><br id="yui_3_16_0_ym19_1_1461029038584_6936"> def Serialize(self, inXML=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6937"> ' Serialize'<br id="yui_3_16_0_ym19_1_1461029038584_6938"> # Result is a Unicode object<br id="yui_3_16_0_ym19_1_1461029038584_6939"> return self._oleobj_.InvokeTypes(85, LCID, 1, (8, 0), ((8, 1),),inXML<br id="yui_3_16_0_ym19_1_1461029038584_6940"> )<br id="yui_3_16_0_ym19_1_1461029038584_6941"><br id="yui_3_16_0_ym19_1_1461029038584_6942"> def ServerInvoke(self, RequestUri=defaultNamedNotOptArg):<br id="yui_3_16_0_ym19_1_1461029038584_6943"> 'method ServerInvoke'<br id="yui_3_16_0_ym19_1_1461029038584_6944"> # Result is a Unicode object<br id="yui_3_16_0_ym19_1_1461029038584_6945"> return self._oleobj_.InvokeTypes(100, LCID, 1, (8, 0), ((8, 1),),RequestUri<br id="yui_3_16_0_ym19_1_1461029038584_6946"> )<br id="yui_3_16_0_ym19_1_1461029038584_6947"><br id="yui_3_16_0_ym19_1_1461029038584_6948"> def SetFilter(self, Filter=0):<br id="yui_3_16_0_ym19_1_1461029038584_6949"> 'SetFilter'<br id="yui_3_16_0_ym19_1_1461029038584_6950"> return self._oleobj_.InvokeTypes(55, LCID, 1, (24, 0), ((9, 49),),Filter<br id="yui_3_16_0_ym19_1_1461029038584_6951"> )<br id="yui_3_16_0_ym19_1_1461029038584_6952"><br id="yui_3_16_0_ym19_1_1461029038584_6953"> def SetStatusBarMessage(self, Text=defaultNamedNotOptArg, Seconds=20, IsError=True):<br id="yui_3_16_0_ym19_1_1461029038584_6954"> 'method SetStatusBarMessage'<br id="yui_3_16_0_ym19_1_1461029038584_6955"> return self._oleobj_.InvokeTypes(51, LCID, 1, (24, 0), ((8, 1), (3, 49), (11, 49)),Text<br id="yui_3_16_0_ym19_1_1461029038584_6956"> , Seconds, IsError)<br id="yui_3_16_0_ym19_1_1461029038584_6957"><br id="yui_3_16_0_ym19_1_1461029038584_6958"> _prop_map_get_ = {<br id="yui_3_16_0_ym19_1_1461029038584_6959"> "AppId": (20, 2, (3, 0), (), "AppId", None),<br id="yui_3_16_0_ym19_1_1461029038584_6960"> # Method 'Cockpits' returns object of type 'ICockpits'<br id="yui_3_16_0_ym19_1_1461029038584_6961"> "Cockpits": (70, 2, (9, 0), (), "Cockpits", '{49193AF4-562F-4E9A-82C6-9B79B6C66383}'),<br id="yui_3_16_0_ym19_1_1461029038584_6962"> # Method 'Company' returns object of type 'ICompany'<br id="yui_3_16_0_ym19_1_1461029038584_6963"> "Company": (11, 2, (9, 0), (), "Company", '{195BCB8E-4D2F-4950-947C-9E3523929229}'),<br id="yui_3_16_0_ym19_1_1461029038584_6964"> # Method 'Desktop' returns object of type 'IDesktop'<br id="yui_3_16_0_ym19_1_1461029038584_6965"> "Desktop": (10, 2, (9, 0), (), "Desktop", '{F88352F1-5027-41CF-861B-3D7FE6D40CCD}'),<br id="yui_3_16_0_ym19_1_1461029038584_6966"> "EventLevel": (110, 2, (3, 0), (), "EventLevel", None),<br id="yui_3_16_0_ym19_1_1461029038584_6967"> "FocusRestored": (106, 2, (11, 0), (), "FocusRestored", None),<br id="yui_3_16_0_ym19_1_1461029038584_6968"> "FontHeight": (83, 2, (3, 0), (), "FontHeight", None),<br id="yui_3_16_0_ym19_1_1461029038584_6969"> "FontName": (82, 2, (8, 0), (), "FontName", None),<br id="yui_3_16_0_ym19_1_1461029038584_6970"> # Method 'Forms' returns object of type 'IForms'<br id="yui_3_16_0_ym19_1_1461029038584_6971"> "Forms": (1, 2, (9, 0), (), "Forms", '{02B99871-8ACD-446E-A24F-7645E7DF4B70}'),<br id="yui_3_16_0_ym19_1_1461029038584_6972"> "IsHostedEnvironment": (107, 2, (11, 0), (), "IsHostedEnvironment", None),<br id="yui_3_16_0_ym19_1_1461029038584_6973"> "Language": (21, 2, (3, 0), (), "Language", None),<br id="yui_3_16_0_ym19_1_1461029038584_6974"> # Method 'Menus' returns object of type 'IMenus'<br id="yui_3_16_0_ym19_1_1461029038584_6975"> "Menus": (2, 2, (9, 0), (), "Menus", '{BD3E79E3-F688-47D6-9030-5714F3079FA0}'),<br id="yui_3_16_0_ym19_1_1461029038584_6976"> "MetadataAutoRefresh": (66, 2, (11, 0), (), "MetadataAutoRefresh", None),<br id="yui_3_16_0_ym19_1_1461029038584_6977"> # Method 'ResourceData' returns object of type 'IResourceData'<br id="yui_3_16_0_ym19_1_1461029038584_6978"> "ResourceData": (67, 2, (9, 0), (), "ResourceData", '{3C771B45-1C75-4AE7-B88E-D2D102D445BE}'),<br id="yui_3_16_0_ym19_1_1461029038584_6979"> "SkinStyle": (68, 2, (3, 0), (), "SkinStyle", None),<br id="yui_3_16_0_ym19_1_1461029038584_6980"> # Method 'StatusBar' returns object of type 'IStatusBar'<br id="yui_3_16_0_ym19_1_1461029038584_6981"> "StatusBar": (64, 2, (9, 0), (), "StatusBar", '{C1DC17AD-B039-4E27-87C2-84F7EC82313F}'),<br id="yui_3_16_0_ym19_1_1461029038584_6982"> "XSEngineBaseURL": (111, 2, (8, 0), (), "XSEngineBaseURL", None),<br id="yui_3_16_0_ym19_1_1461029038584_6983"> }<br id="yui_3_16_0_ym19_1_1461029038584_6984"> _prop_map_put_ = {<br id="yui_3_16_0_ym19_1_1461029038584_6985"> "EventLevel": ((110, LCID, 4, 0),()),<br id="yui_3_16_0_ym19_1_1461029038584_6986"> "FocusRestored": ((106, LCID, 4, 0),()),<br id="yui_3_16_0_ym19_1_1461029038584_6987"> "MetadataAutoRefresh": ((66, LCID, 4, 0),()),<br id="yui_3_16_0_ym19_1_1461029038584_6988"> }<br id="yui_3_16_0_ym19_1_1461029038584_6989"> def __iter__(self):<br id="yui_3_16_0_ym19_1_1461029038584_6990"> "Return a Python iterator for this object"<br id="yui_3_16_0_ym19_1_1461029038584_6991"> try:<br id="yui_3_16_0_ym19_1_1461029038584_6992"> ob = self._oleobj_.InvokeTypes(-4,LCID,3,(13, 10),())<br id="yui_3_16_0_ym19_1_1461029038584_6993"> except pythoncom.error:<br id="yui_3_16_0_ym19_1_1461029038584_6994"> raise TypeError("This object does not support enumeration")<br id="yui_3_16_0_ym19_1_1461029038584_6995"> return win32com.client.util.Iterator(ob, None)<br id="yui_3_16_0_ym19_1_1461029038584_6996"><br id="yui_3_16_0_ym19_1_1461029038584_6997"><br id="yui_3_16_0_ym19_1_1461029038584_6998"># This CoClass is known by the name 'SAPbouiCOM.SboGuiApi.90.0'<br id="yui_3_16_0_ym19_1_1461029038584_6999">class SboGuiApi(CoClassBaseClass): # A CoClass<br id="yui_3_16_0_ym19_1_1461029038584_7000"> # SboGuiApi Class<br id="yui_3_16_0_ym19_1_1461029038584_7001"> CLSID = IID('{6CF0D1E0-470B-4684-B9B5-70F9A5ACBB06}')<br id="yui_3_16_0_ym19_1_1461029038584_7002"> coclass_sources = [<br id="yui_3_16_0_ym19_1_1461029038584_7003"> ]<br id="yui_3_16_0_ym19_1_1461029038584_7004"> coclass_interfaces = [<br id="yui_3_16_0_ym19_1_1461029038584_7005"> ISboGuiApi,<br id="yui_3_16_0_ym19_1_1461029038584_7006"> ]<br id="yui_3_16_0_ym19_1_1461029038584_7007"> default_interface = ISboGuiApi<br id="yui_3_16_0_ym19_1_1461029038584_7008"><br id="yui_3_16_0_ym19_1_1461029038584_7009"><br id="yui_3_16_0_ym19_1_1461029038584_7010">To get the UI going:<br id="yui_3_16_0_ym19_1_1461029038584_7011"><br id="yui_3_16_0_ym19_1_1461029038584_7012">from win32com.client import Dispatch<br id="yui_3_16_0_ym19_1_1461029038584_7013">ui = Dispatch("SAPbouiCOM.SboGuiApi")<br id="yui_3_16_0_ym19_1_1461029038584_7014">ui.AddonIdentifier = "..."<br id="yui_3_16_0_ym19_1_1461029038584_7015">conn = ui.Connect("...")<br id="yui_3_16_0_ym19_1_1461029038584_7016">app = ui.GetApplication()<br id="yui_3_16_0_ym19_1_1461029038584_7017"># functions like create msg boxes, windows, grids, etc. work fine<br id="yui_3_16_0_ym19_1_1461029038584_7018"><br id="yui_3_16_0_ym19_1_1461029038584_7019"><br id="yui_3_16_0_ym19_1_1461029038584_7020">A sample program in C#:<br id="yui_3_16_0_ym19_1_1461029038584_7021"><br id="yui_3_16_0_ym19_1_1461029038584_7022">// ****************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7023">// BEFORE STARTING:<br id="yui_3_16_0_ym19_1_1461029038584_7024">// 1. Add reference to the "SAP Business One UI API"<br id="yui_3_16_0_ym19_1_1461029038584_7025">// 2. Insert the development connection string to the "Command line argument"<br id="yui_3_16_0_ym19_1_1461029038584_7026">// -----------------------------------------------------------------<br id="yui_3_16_0_ym19_1_1461029038584_7027">// 1.<br id="yui_3_16_0_ym19_1_1461029038584_7028">// a. Project->Add Reference...<br id="yui_3_16_0_ym19_1_1461029038584_7029">// b. select the "SAP Business One UI API 2007" From the COM folder<br id="yui_3_16_0_ym19_1_1461029038584_7030">//<br id="yui_3_16_0_ym19_1_1461029038584_7031">// 2.<br id="yui_3_16_0_ym19_1_1461029038584_7032">// a. Project->Properties...<br id="yui_3_16_0_ym19_1_1461029038584_7033">// b. choose Configuration Properties folder (place the arrow on Debugging)<br id="yui_3_16_0_ym19_1_1461029038584_7034">// c. place the connection string in the 'Command line arguments' field<br id="yui_3_16_0_ym19_1_1461029038584_7035">//<br id="yui_3_16_0_ym19_1_1461029038584_7036">// **************************************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7037"><br id="yui_3_16_0_ym19_1_1461029038584_7038"><br id="yui_3_16_0_ym19_1_1461029038584_7039">using Microsoft.VisualBasic;<br id="yui_3_16_0_ym19_1_1461029038584_7040">using System;<br id="yui_3_16_0_ym19_1_1461029038584_7041">namespace FilterEvents {<br id="yui_3_16_0_ym19_1_1461029038584_7042"> public class EventFilter {<br id="yui_3_16_0_ym19_1_1461029038584_7043"> private SAPbouiCOM.Application SBO_Application;<br id="yui_3_16_0_ym19_1_1461029038584_7044"><br id="yui_3_16_0_ym19_1_1461029038584_7045"> //**********************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7046"> // declaring an Event filters container object and an<br id="yui_3_16_0_ym19_1_1461029038584_7047"> // event filter object<br id="yui_3_16_0_ym19_1_1461029038584_7048"> //**********************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7049"><br id="yui_3_16_0_ym19_1_1461029038584_7050"> public SAPbouiCOM.EventFilters oFilters;<br id="yui_3_16_0_ym19_1_1461029038584_7051"><br id="yui_3_16_0_ym19_1_1461029038584_7052"> public SAPbouiCOM.EventFilter oFilter;<br id="yui_3_16_0_ym19_1_1461029038584_7053"><br id="yui_3_16_0_ym19_1_1461029038584_7054"><br id="yui_3_16_0_ym19_1_1461029038584_7055"> private void SetApplication() {<br id="yui_3_16_0_ym19_1_1461029038584_7056"><br id="yui_3_16_0_ym19_1_1461029038584_7057"> // *******************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7058"> // Use an SboGuiApi object to establish connection<br id="yui_3_16_0_ym19_1_1461029038584_7059"> // with the SAP Business One application and return an<br id="yui_3_16_0_ym19_1_1461029038584_7060"> // initialized appliction object<br id="yui_3_16_0_ym19_1_1461029038584_7061"> // *******************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7062"><br id="yui_3_16_0_ym19_1_1461029038584_7063"> SAPbouiCOM.SboGuiApi SboGuiApi = null;<br id="yui_3_16_0_ym19_1_1461029038584_7064"> string sConnectionString = null;<br id="yui_3_16_0_ym19_1_1461029038584_7065"><br id="yui_3_16_0_ym19_1_1461029038584_7066"> SboGuiApi = new SAPbouiCOM.SboGuiApi();<br id="yui_3_16_0_ym19_1_1461029038584_7067"><br id="yui_3_16_0_ym19_1_1461029038584_7068"> // by following the steped specified above the following<br id="yui_3_16_0_ym19_1_1461029038584_7069"> // statment should be suficient for either development or run mode<br id="yui_3_16_0_ym19_1_1461029038584_7070"><br id="yui_3_16_0_ym19_1_1461029038584_7071"> sConnectionString = Interaction.Command();<br id="yui_3_16_0_ym19_1_1461029038584_7072"><br id="yui_3_16_0_ym19_1_1461029038584_7073"> // connect to a running SBO Application<br id="yui_3_16_0_ym19_1_1461029038584_7074"><br id="yui_3_16_0_ym19_1_1461029038584_7075"> SboGuiApi.Connect( sConnectionString );<br id="yui_3_16_0_ym19_1_1461029038584_7076"><br id="yui_3_16_0_ym19_1_1461029038584_7077"> // get an initialized application object<br id="yui_3_16_0_ym19_1_1461029038584_7078"><br id="yui_3_16_0_ym19_1_1461029038584_7079"> SBO_Application = SboGuiApi.GetApplication( -1 );<br id="yui_3_16_0_ym19_1_1461029038584_7080"><br id="yui_3_16_0_ym19_1_1461029038584_7081"> }<br id="yui_3_16_0_ym19_1_1461029038584_7082"><br id="yui_3_16_0_ym19_1_1461029038584_7083"><br id="yui_3_16_0_ym19_1_1461029038584_7084"> private void SetFilters() {<br id="yui_3_16_0_ym19_1_1461029038584_7085"><br id="yui_3_16_0_ym19_1_1461029038584_7086"> // Create a new EventFilters object<br id="yui_3_16_0_ym19_1_1461029038584_7087"> oFilters = new SAPbouiCOM.EventFilters();<br id="yui_3_16_0_ym19_1_1461029038584_7088"><br id="yui_3_16_0_ym19_1_1461029038584_7089"> // add an event type to the container<br id="yui_3_16_0_ym19_1_1461029038584_7090"> // this method returns an EventFilter object<br id="yui_3_16_0_ym19_1_1461029038584_7091"> oFilter = oFilters.Add( SAPbouiCOM.BoEventTypes.et_CLICK );<br id="yui_3_16_0_ym19_1_1461029038584_7092"><br id="yui_3_16_0_ym19_1_1461029038584_7093"> // assign the form type on which the event would be processed<br id="yui_3_16_0_ym19_1_1461029038584_7094"> oFilter.AddEx( "139" ); // Orders Form<br id="yui_3_16_0_ym19_1_1461029038584_7095"> oFilter.AddEx( "142" ); // Purchase Form<br id="yui_3_16_0_ym19_1_1461029038584_7096"><br id="yui_3_16_0_ym19_1_1461029038584_7097"> oFilter = oFilters.Add( SAPbouiCOM.BoEventTypes.et_KEY_DOWN );<br id="yui_3_16_0_ym19_1_1461029038584_7098"><br id="yui_3_16_0_ym19_1_1461029038584_7099"> // assign the form type on which the event would be processed<br id="yui_3_16_0_ym19_1_1461029038584_7100"> oFilter.Add( 139 ); // Orders Form<br id="yui_3_16_0_ym19_1_1461029038584_7101"><br id="yui_3_16_0_ym19_1_1461029038584_7102"> // For a list of all form types see the help or use the<br id="yui_3_16_0_ym19_1_1461029038584_7103"> // Tools -> User Tools -> Display Debug Information option<br id="yui_3_16_0_ym19_1_1461029038584_7104"> // in the SBO application<br id="yui_3_16_0_ym19_1_1461029038584_7105"> // then open the desired form and hover over it with the mouse<br id="yui_3_16_0_ym19_1_1461029038584_7106"> // the form's type will apear in the lower left side of the screen<br id="yui_3_16_0_ym19_1_1461029038584_7107"><br id="yui_3_16_0_ym19_1_1461029038584_7108"><br id="yui_3_16_0_ym19_1_1461029038584_7109"> // Setting the application with the EventFilters object<br id="yui_3_16_0_ym19_1_1461029038584_7110"> // in this case we will process a click event for form types 142 and 139<br id="yui_3_16_0_ym19_1_1461029038584_7111"> // and we will process a key down event for for form type 139<br id="yui_3_16_0_ym19_1_1461029038584_7112"><br id="yui_3_16_0_ym19_1_1461029038584_7113"> SBO_Application.SetFilter( oFilters );<br id="yui_3_16_0_ym19_1_1461029038584_7114"><br id="yui_3_16_0_ym19_1_1461029038584_7115"> }<br id="yui_3_16_0_ym19_1_1461029038584_7116"><br id="yui_3_16_0_ym19_1_1461029038584_7117"> public EventFilter() {<br id="yui_3_16_0_ym19_1_1461029038584_7118"><br id="yui_3_16_0_ym19_1_1461029038584_7119"> //*************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7120"> // set SBO_Application with an initialized application object<br id="yui_3_16_0_ym19_1_1461029038584_7121"> //*************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7122"> SetApplication();<br id="yui_3_16_0_ym19_1_1461029038584_7123"><br id="yui_3_16_0_ym19_1_1461029038584_7124"> //*************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7125"> // set SBO_Application with an initialized EventFilters object<br id="yui_3_16_0_ym19_1_1461029038584_7126"> //*************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7127"><br id="yui_3_16_0_ym19_1_1461029038584_7128"> SetFilters();<br id="yui_3_16_0_ym19_1_1461029038584_7129"><br id="yui_3_16_0_ym19_1_1461029038584_7130"> // events handled by SBO_Application_AppEvent<br id="yui_3_16_0_ym19_1_1461029038584_7131"> SBO_Application.AppEvent += new SAPbouiCOM._IApplicationEvents_AppEventEventHandler( SBO_Application_AppEvent );<br id="yui_3_16_0_ym19_1_1461029038584_7132"> // events handled by SBO_Application_MenuEvent<br id="yui_3_16_0_ym19_1_1461029038584_7133"> SBO_Application.MenuEvent += new SAPbouiCOM._IApplicationEvents_MenuEventEventHandler( SBO_Application_MenuEvent );<br id="yui_3_16_0_ym19_1_1461029038584_7134"> // events handled by SBO_Application_ItemEvent<br id="yui_3_16_0_ym19_1_1461029038584_7135"> SBO_Application.ItemEvent += new SAPbouiCOM._IApplicationEvents_ItemEventEventHandler( SBO_Application_ItemEvent );<br id="yui_3_16_0_ym19_1_1461029038584_7136"> }<br id="yui_3_16_0_ym19_1_1461029038584_7137"><br id="yui_3_16_0_ym19_1_1461029038584_7138"> private void SBO_Application_AppEvent( SAPbouiCOM.BoAppEventTypes EventType ) {<br id="yui_3_16_0_ym19_1_1461029038584_7139"><br id="yui_3_16_0_ym19_1_1461029038584_7140"> //********************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7141"> // the following are the events sent by the application<br id="yui_3_16_0_ym19_1_1461029038584_7142"> // (Ignore aet_ServerTermination)<br id="yui_3_16_0_ym19_1_1461029038584_7143"> // in order to implement your own code upon each of the events<br id="yui_3_16_0_ym19_1_1461029038584_7144"> // place you code instead of the matching message box statement<br id="yui_3_16_0_ym19_1_1461029038584_7145"> //********************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7146"><br id="yui_3_16_0_ym19_1_1461029038584_7147"><br id="yui_3_16_0_ym19_1_1461029038584_7148"> switch ( EventType ) {<br id="yui_3_16_0_ym19_1_1461029038584_7149"> case SAPbouiCOM.BoAppEventTypes.aet_ShutDown:<br id="yui_3_16_0_ym19_1_1461029038584_7150"><br id="yui_3_16_0_ym19_1_1461029038584_7151"> SBO_Application.MessageBox( "A Shut Down Event has been caught" + Constants.vbNewLine + "Terminating Add On...", 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7152"><br id="yui_3_16_0_ym19_1_1461029038584_7153"> //**************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7154"> //<br id="yui_3_16_0_ym19_1_1461029038584_7155"> // Take care of terminating your AddOn application<br id="yui_3_16_0_ym19_1_1461029038584_7156"> //<br id="yui_3_16_0_ym19_1_1461029038584_7157"> //**************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7158"><br id="yui_3_16_0_ym19_1_1461029038584_7159"> System.Environment.Exit( 0 );<br id="yui_3_16_0_ym19_1_1461029038584_7160"><br id="yui_3_16_0_ym19_1_1461029038584_7161"><br id="yui_3_16_0_ym19_1_1461029038584_7162"><br id="yui_3_16_0_ym19_1_1461029038584_7163"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7164"> case SAPbouiCOM.BoAppEventTypes.aet_CompanyChanged:<br id="yui_3_16_0_ym19_1_1461029038584_7165"><br id="yui_3_16_0_ym19_1_1461029038584_7166"> SBO_Application.MessageBox( "A Company Change Event has been caught", 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7167"><br id="yui_3_16_0_ym19_1_1461029038584_7168"> //**************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7169"> // Check the new company name, if your add on was not meant for<br id="yui_3_16_0_ym19_1_1461029038584_7170"> // the new company terminate your AddOn<br id="yui_3_16_0_ym19_1_1461029038584_7171"> // If SBO_Application.Company.Name Is Not "Company1" then<br id="yui_3_16_0_ym19_1_1461029038584_7172"> // Close<br id="yui_3_16_0_ym19_1_1461029038584_7173"> // End If<br id="yui_3_16_0_ym19_1_1461029038584_7174"> //**************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7175"><br id="yui_3_16_0_ym19_1_1461029038584_7176"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7177"> case SAPbouiCOM.BoAppEventTypes.aet_LanguageChanged:<br id="yui_3_16_0_ym19_1_1461029038584_7178"><br id="yui_3_16_0_ym19_1_1461029038584_7179"> SBO_Application.MessageBox( "A Languge Change Event has been caught", 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7180"><br id="yui_3_16_0_ym19_1_1461029038584_7181"> //**************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7182"> // Check the new language name, if your AddOn's items needs<br id="yui_3_16_0_ym19_1_1461029038584_7183"> // to be changed, take care of it at this point<br id="yui_3_16_0_ym19_1_1461029038584_7184"> //<br id="yui_3_16_0_ym19_1_1461029038584_7185"> // Select Case SBO_Application.Language<br id="yui_3_16_0_ym19_1_1461029038584_7186"> // Case ln_English:<br id="yui_3_16_0_ym19_1_1461029038584_7187"> // Case ln_French:<br id="yui_3_16_0_ym19_1_1461029038584_7188"> // Case ln_German:<br id="yui_3_16_0_ym19_1_1461029038584_7189"> // End Select<br id="yui_3_16_0_ym19_1_1461029038584_7190"> //**************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7191"><br id="yui_3_16_0_ym19_1_1461029038584_7192"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7193"> }<br id="yui_3_16_0_ym19_1_1461029038584_7194"><br id="yui_3_16_0_ym19_1_1461029038584_7195"><br id="yui_3_16_0_ym19_1_1461029038584_7196"> }<br id="yui_3_16_0_ym19_1_1461029038584_7197"><br id="yui_3_16_0_ym19_1_1461029038584_7198"><br id="yui_3_16_0_ym19_1_1461029038584_7199"><br id="yui_3_16_0_ym19_1_1461029038584_7200"> private void SBO_Application_MenuEvent( ref SAPbouiCOM.MenuEvent pVal, out bool BubbleEvent ) {<br id="yui_3_16_0_ym19_1_1461029038584_7201"> BubbleEvent = true;<br id="yui_3_16_0_ym19_1_1461029038584_7202"> //********************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7203"> // in order to activate your own forms instead of SAP Business One system forms<br id="yui_3_16_0_ym19_1_1461029038584_7204"> // process the menu event by your self<br id="yui_3_16_0_ym19_1_1461029038584_7205"> // change BubbleEvent to True so that SAP Business One won't process it<br id="yui_3_16_0_ym19_1_1461029038584_7206"> //********************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7207"><br id="yui_3_16_0_ym19_1_1461029038584_7208"> if ( pVal.BeforeAction == true ) {<br id="yui_3_16_0_ym19_1_1461029038584_7209"><br id="yui_3_16_0_ym19_1_1461029038584_7210"> SBO_Application.SetStatusBarMessage( "Menu item: " + pVal.MenuUID + " sent an event BEFORE SAP Business One processes it.", SAPbouiCOM.BoMessageTime.bmt_Long, true );<br id="yui_3_16_0_ym19_1_1461029038584_7211"><br id="yui_3_16_0_ym19_1_1461029038584_7212"> // to stop SAP Business One from processing this event<br id="yui_3_16_0_ym19_1_1461029038584_7213"> // unmark the following statement<br id="yui_3_16_0_ym19_1_1461029038584_7214"><br id="yui_3_16_0_ym19_1_1461029038584_7215"> // BubbleEvent = True<br id="yui_3_16_0_ym19_1_1461029038584_7216"><br id="yui_3_16_0_ym19_1_1461029038584_7217"> }<br id="yui_3_16_0_ym19_1_1461029038584_7218"> else {<br id="yui_3_16_0_ym19_1_1461029038584_7219"><br id="yui_3_16_0_ym19_1_1461029038584_7220"> SBO_Application.SetStatusBarMessage( "Menu item: " + pVal.MenuUID + " sent an event AFTER SAP Business One processes it.", SAPbouiCOM.BoMessageTime.bmt_Long, true );<br id="yui_3_16_0_ym19_1_1461029038584_7221"><br id="yui_3_16_0_ym19_1_1461029038584_7222"> }<br id="yui_3_16_0_ym19_1_1461029038584_7223"><br id="yui_3_16_0_ym19_1_1461029038584_7224"> }<br id="yui_3_16_0_ym19_1_1461029038584_7225"><br id="yui_3_16_0_ym19_1_1461029038584_7226"><br id="yui_3_16_0_ym19_1_1461029038584_7227"> private void SBO_Application_ItemEvent( string FormUID, ref SAPbouiCOM.ItemEvent pVal, out bool BubbleEvent ) {<br id="yui_3_16_0_ym19_1_1461029038584_7228"><br id="yui_3_16_0_ym19_1_1461029038584_7229"> BubbleEvent = true;<br id="yui_3_16_0_ym19_1_1461029038584_7230"> //**************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7231"> // BubbleEvent sets the behavior of SAP Business One.<br id="yui_3_16_0_ym19_1_1461029038584_7232"> // False means that the application will not continue processing this event<br id="yui_3_16_0_ym19_1_1461029038584_7233"> // True is the default value<br id="yui_3_16_0_ym19_1_1461029038584_7234"> //**************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7235"><br id="yui_3_16_0_ym19_1_1461029038584_7236"> if ( pVal.FormType != 0 & pVal.Before_Action == true ) {<br id="yui_3_16_0_ym19_1_1461029038584_7237"><br id="yui_3_16_0_ym19_1_1461029038584_7238"> //************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7239"> // the message box form type is 0<br id="yui_3_16_0_ym19_1_1461029038584_7240"> // I chose not to deal with events triggered by a message box<br id="yui_3_16_0_ym19_1_1461029038584_7241"> //************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7242"><br id="yui_3_16_0_ym19_1_1461029038584_7243"> switch ( pVal.EventType ) {<br id="yui_3_16_0_ym19_1_1461029038584_7244"> case SAPbouiCOM.BoEventTypes.et_ITEM_PRESSED:<br id="yui_3_16_0_ym19_1_1461029038584_7245"><br id="yui_3_16_0_ym19_1_1461029038584_7246"> // Specifies a button release (After exit).<br id="yui_3_16_0_ym19_1_1461029038584_7247"><br id="yui_3_16_0_ym19_1_1461029038584_7248"> SBO_Application.MessageBox( "An et_ITEM_PRESSED has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7249"><br id="yui_3_16_0_ym19_1_1461029038584_7250"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7251"> case SAPbouiCOM.BoEventTypes.et_KEY_DOWN:<br id="yui_3_16_0_ym19_1_1461029038584_7252"><br id="yui_3_16_0_ym19_1_1461029038584_7253"> // Specifies a key down event.<br id="yui_3_16_0_ym19_1_1461029038584_7254"><br id="yui_3_16_0_ym19_1_1461029038584_7255"> SBO_Application.MessageBox( "An et_KEY_DOWN has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7256"><br id="yui_3_16_0_ym19_1_1461029038584_7257"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7258"> case SAPbouiCOM.BoEventTypes.et_GOT_FOCUS:<br id="yui_3_16_0_ym19_1_1461029038584_7259"><br id="yui_3_16_0_ym19_1_1461029038584_7260"> // Specifies an item got focus.<br id="yui_3_16_0_ym19_1_1461029038584_7261"><br id="yui_3_16_0_ym19_1_1461029038584_7262"> SBO_Application.MessageBox( "An et_GOT_FOCUS has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7263"><br id="yui_3_16_0_ym19_1_1461029038584_7264"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7265"> case SAPbouiCOM.BoEventTypes.et_LOST_FOCUS:<br id="yui_3_16_0_ym19_1_1461029038584_7266"><br id="yui_3_16_0_ym19_1_1461029038584_7267"> // Specifies an item lost focus.<br id="yui_3_16_0_ym19_1_1461029038584_7268"><br id="yui_3_16_0_ym19_1_1461029038584_7269"> SBO_Application.MessageBox( "An et_LOST_FOCUS has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7270"><br id="yui_3_16_0_ym19_1_1461029038584_7271"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7272"> case SAPbouiCOM.BoEventTypes.et_COMBO_SELECT:<br id="yui_3_16_0_ym19_1_1461029038584_7273"><br id="yui_3_16_0_ym19_1_1461029038584_7274"> // Specifies the selection of valid value in Combo Box.<br id="yui_3_16_0_ym19_1_1461029038584_7275"><br id="yui_3_16_0_ym19_1_1461029038584_7276"> SBO_Application.MessageBox( "An et_COMBO_SELECT has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7277"><br id="yui_3_16_0_ym19_1_1461029038584_7278"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7279"> case SAPbouiCOM.BoEventTypes.et_CLICK:<br id="yui_3_16_0_ym19_1_1461029038584_7280"> // Specifies Mouse Up on editable item.<br id="yui_3_16_0_ym19_1_1461029038584_7281"><br id="yui_3_16_0_ym19_1_1461029038584_7282"> SBO_Application.MessageBox( "An et_CLICK has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7283"><br id="yui_3_16_0_ym19_1_1461029038584_7284"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7285"> case SAPbouiCOM.BoEventTypes.et_DOUBLE_CLICK:<br id="yui_3_16_0_ym19_1_1461029038584_7286"> // Specifies Mouse Up on editable item in time interval define by<br id="yui_3_16_0_ym19_1_1461029038584_7287"> // SAP Business One as double-click.<br id="yui_3_16_0_ym19_1_1461029038584_7288"><br id="yui_3_16_0_ym19_1_1461029038584_7289"> SBO_Application.MessageBox( "An et_DOUBLE_CLICK has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7290"><br id="yui_3_16_0_ym19_1_1461029038584_7291"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7292"> case SAPbouiCOM.BoEventTypes.et_MATRIX_LINK_PRESSED:<br id="yui_3_16_0_ym19_1_1461029038584_7293"> // Specifies a link arrow within a matrix was pressed.<br id="yui_3_16_0_ym19_1_1461029038584_7294"><br id="yui_3_16_0_ym19_1_1461029038584_7295"> SBO_Application.MessageBox( "An et_MATRIX_LINK_PRESSED has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7296"><br id="yui_3_16_0_ym19_1_1461029038584_7297"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7298"> case SAPbouiCOM.BoEventTypes.et_MATRIX_COLLAPSE_PRESSED:<br id="yui_3_16_0_ym19_1_1461029038584_7299"> // Specifies collapsed or expanded list within a matrix.<br id="yui_3_16_0_ym19_1_1461029038584_7300"><br id="yui_3_16_0_ym19_1_1461029038584_7301"> SBO_Application.MessageBox( "An et_MATRIX_COLLAPSE_PRESSED has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7302"><br id="yui_3_16_0_ym19_1_1461029038584_7303"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7304"> case SAPbouiCOM.BoEventTypes.et_VALIDATE:<br id="yui_3_16_0_ym19_1_1461029038584_7305"> //Specifies an item validation event.<br id="yui_3_16_0_ym19_1_1461029038584_7306"><br id="yui_3_16_0_ym19_1_1461029038584_7307"> SBO_Application.MessageBox( "An et_VALIDATE has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7308"><br id="yui_3_16_0_ym19_1_1461029038584_7309"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7310"> case SAPbouiCOM.BoEventTypes.et_FORM_LOAD:<br id="yui_3_16_0_ym19_1_1461029038584_7311"> // Specifies that SAP Business One application opened a form.<br id="yui_3_16_0_ym19_1_1461029038584_7312"><br id="yui_3_16_0_ym19_1_1461029038584_7313"> SBO_Application.MessageBox( "An et_FORM_LOAD has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7314"><br id="yui_3_16_0_ym19_1_1461029038584_7315"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7316"> case SAPbouiCOM.BoEventTypes.et_FORM_UNLOAD:<br id="yui_3_16_0_ym19_1_1461029038584_7317"> // Specifies that SAP Business One application closed a form.<br id="yui_3_16_0_ym19_1_1461029038584_7318"><br id="yui_3_16_0_ym19_1_1461029038584_7319"> SBO_Application.MessageBox( "An et_FORM_UNLOAD has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7320"><br id="yui_3_16_0_ym19_1_1461029038584_7321"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7322"> case SAPbouiCOM.BoEventTypes.et_FORM_ACTIVATE:<br id="yui_3_16_0_ym19_1_1461029038584_7323"> // Specifies that the focus is set on the form.<br id="yui_3_16_0_ym19_1_1461029038584_7324"><br id="yui_3_16_0_ym19_1_1461029038584_7325"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7326"> case SAPbouiCOM.BoEventTypes.et_FORM_DEACTIVATE:<br id="yui_3_16_0_ym19_1_1461029038584_7327"> // Specifies that the form lost focus.<br id="yui_3_16_0_ym19_1_1461029038584_7328"><br id="yui_3_16_0_ym19_1_1461029038584_7329"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7330"> case SAPbouiCOM.BoEventTypes.et_FORM_CLOSE:<br id="yui_3_16_0_ym19_1_1461029038584_7331"> // Specifies that the form was closed by calling the Close event.<br id="yui_3_16_0_ym19_1_1461029038584_7332"><br id="yui_3_16_0_ym19_1_1461029038584_7333"> SBO_Application.MessageBox( "An et_FORM_CLOSE has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7334"><br id="yui_3_16_0_ym19_1_1461029038584_7335"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7336"> case SAPbouiCOM.BoEventTypes.et_FORM_RESIZE:<br id="yui_3_16_0_ym19_1_1461029038584_7337"> // Specifies resizing of the form.<br id="yui_3_16_0_ym19_1_1461029038584_7338"><br id="yui_3_16_0_ym19_1_1461029038584_7339"> SBO_Application.MessageBox( "An et_FORM_RESIZE has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7340"><br id="yui_3_16_0_ym19_1_1461029038584_7341"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7342"> case SAPbouiCOM.BoEventTypes.et_FORM_KEY_DOWN:<br id="yui_3_16_0_ym19_1_1461029038584_7343"> // Specifies a key press on an area which is not item of the form.<br id="yui_3_16_0_ym19_1_1461029038584_7344"><br id="yui_3_16_0_ym19_1_1461029038584_7345"> SBO_Application.MessageBox( "An et_FORM_KEY_DOWN has been sent by a form with the unique ID: " + FormUID, 1, "Ok", "", "" );<br id="yui_3_16_0_ym19_1_1461029038584_7346"><br id="yui_3_16_0_ym19_1_1461029038584_7347"> break;<br id="yui_3_16_0_ym19_1_1461029038584_7348"> }<br id="yui_3_16_0_ym19_1_1461029038584_7349"> }<br id="yui_3_16_0_ym19_1_1461029038584_7350"> }<br id="yui_3_16_0_ym19_1_1461029038584_7351"> }<br id="yui_3_16_0_ym19_1_1461029038584_7352">}<br id="yui_3_16_0_ym19_1_1461029038584_7353"><br id="yui_3_16_0_ym19_1_1461029038584_7354"><br id="yui_3_16_0_ym19_1_1461029038584_7355">And the same sample program in Visual Basic:<br id="yui_3_16_0_ym19_1_1461029038584_7356"><br id="yui_3_16_0_ym19_1_1461029038584_7357">'****************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7358">' BEFORE STARTING:<br id="yui_3_16_0_ym19_1_1461029038584_7359">' 1. Add reference to the "SAP Business One UI API"<br id="yui_3_16_0_ym19_1_1461029038584_7360">' 2. Insert the development connection string to the "Command line argument"<br id="yui_3_16_0_ym19_1_1461029038584_7361">'-----------------------------------------------------------------<br id="yui_3_16_0_ym19_1_1461029038584_7362">' 1.<br id="yui_3_16_0_ym19_1_1461029038584_7363">' a. Project->Add Reference...<br id="yui_3_16_0_ym19_1_1461029038584_7364">' b. select the "SAP Business One UI API 2007" From the COM folder<br id="yui_3_16_0_ym19_1_1461029038584_7365">'<br id="yui_3_16_0_ym19_1_1461029038584_7366">' 2.<br id="yui_3_16_0_ym19_1_1461029038584_7367">' a. Project->Properties...<br id="yui_3_16_0_ym19_1_1461029038584_7368">' b. choose Configuration Properties folder (place the arrow on Debugging)<br id="yui_3_16_0_ym19_1_1461029038584_7369">' c. place the connection string in the 'Command line arguments' field<br id="yui_3_16_0_ym19_1_1461029038584_7370">'<br id="yui_3_16_0_ym19_1_1461029038584_7371">'**************************************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7372"><br id="yui_3_16_0_ym19_1_1461029038584_7373">Option Strict Off<br id="yui_3_16_0_ym19_1_1461029038584_7374">Option Explicit On<br id="yui_3_16_0_ym19_1_1461029038584_7375"><br id="yui_3_16_0_ym19_1_1461029038584_7376">Public Class EventFilter<br id="yui_3_16_0_ym19_1_1461029038584_7377"> Private WithEvents SBO_Application As SAPbouiCOM.Application<br id="yui_3_16_0_ym19_1_1461029038584_7378"><br id="yui_3_16_0_ym19_1_1461029038584_7379"> '//**********************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7380"> '// declaring an Event filters container object and an<br id="yui_3_16_0_ym19_1_1461029038584_7381"> '// event filter object<br id="yui_3_16_0_ym19_1_1461029038584_7382"> '//**********************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7383"><br id="yui_3_16_0_ym19_1_1461029038584_7384"> Public oFilters As SAPbouiCOM.EventFilters<br id="yui_3_16_0_ym19_1_1461029038584_7385"><br id="yui_3_16_0_ym19_1_1461029038584_7386"> Public oFilter As SAPbouiCOM.EventFilter<br id="yui_3_16_0_ym19_1_1461029038584_7387"><br id="yui_3_16_0_ym19_1_1461029038584_7388"><br id="yui_3_16_0_ym19_1_1461029038584_7389"> Private Sub SetApplication()<br id="yui_3_16_0_ym19_1_1461029038584_7390"><br id="yui_3_16_0_ym19_1_1461029038584_7391"> '*******************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7392"> '// Use an SboGuiApi object to establish connection<br id="yui_3_16_0_ym19_1_1461029038584_7393"> '// with the SAP Business One application and return an<br id="yui_3_16_0_ym19_1_1461029038584_7394"> '// initialized appliction object<br id="yui_3_16_0_ym19_1_1461029038584_7395"> '*******************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7396"><br id="yui_3_16_0_ym19_1_1461029038584_7397"> Dim SboGuiApi As SAPbouiCOM.SboGuiApi<br id="yui_3_16_0_ym19_1_1461029038584_7398"> Dim sConnectionString As String<br id="yui_3_16_0_ym19_1_1461029038584_7399"><br id="yui_3_16_0_ym19_1_1461029038584_7400"> SboGuiApi = New SAPbouiCOM.SboGuiApi()<br id="yui_3_16_0_ym19_1_1461029038584_7401"><br id="yui_3_16_0_ym19_1_1461029038584_7402"> '// by following the steped specified above the following<br id="yui_3_16_0_ym19_1_1461029038584_7403"> '// statment should be suficient for either development or run mode<br id="yui_3_16_0_ym19_1_1461029038584_7404"><br id="yui_3_16_0_ym19_1_1461029038584_7405"> sConnectionString = Command()<br id="yui_3_16_0_ym19_1_1461029038584_7406"><br id="yui_3_16_0_ym19_1_1461029038584_7407"> '// connect to a running SBO Application<br id="yui_3_16_0_ym19_1_1461029038584_7408"><br id="yui_3_16_0_ym19_1_1461029038584_7409"> SboGuiApi.Connect(sConnectionString)<br id="yui_3_16_0_ym19_1_1461029038584_7410"><br id="yui_3_16_0_ym19_1_1461029038584_7411"> '// get an initialized application object<br id="yui_3_16_0_ym19_1_1461029038584_7412"><br id="yui_3_16_0_ym19_1_1461029038584_7413"> SBO_Application = SboGuiApi.GetApplication()<br id="yui_3_16_0_ym19_1_1461029038584_7414"><br id="yui_3_16_0_ym19_1_1461029038584_7415"> End Sub<br id="yui_3_16_0_ym19_1_1461029038584_7416"><br id="yui_3_16_0_ym19_1_1461029038584_7417"> Private Sub SetFilters()<br id="yui_3_16_0_ym19_1_1461029038584_7418"><br id="yui_3_16_0_ym19_1_1461029038584_7419"> '// Create a new EventFilters object<br id="yui_3_16_0_ym19_1_1461029038584_7420"> oFilters = New SAPbouiCOM.EventFilters()<br id="yui_3_16_0_ym19_1_1461029038584_7421"><br id="yui_3_16_0_ym19_1_1461029038584_7422"> '// add an event type to the container<br id="yui_3_16_0_ym19_1_1461029038584_7423"> '// this method returns an EventFilter object<br id="yui_3_16_0_ym19_1_1461029038584_7424"> oFilter = oFilters.Add(SAPbouiCOM.BoEventTypes.et_CLICK)<br id="yui_3_16_0_ym19_1_1461029038584_7425"><br id="yui_3_16_0_ym19_1_1461029038584_7426"> '// assign the form type on which the event would be processed<br id="yui_3_16_0_ym19_1_1461029038584_7427"> oFilter.AddEx("139") 'Orders Form<br id="yui_3_16_0_ym19_1_1461029038584_7428"> oFilter.AddEx("142") 'Purchase Form<br id="yui_3_16_0_ym19_1_1461029038584_7429"><br id="yui_3_16_0_ym19_1_1461029038584_7430"> oFilter = oFilters.Add(SAPbouiCOM.BoEventTypes.et_KEY_DOWN)<br id="yui_3_16_0_ym19_1_1461029038584_7431"><br id="yui_3_16_0_ym19_1_1461029038584_7432"> '// assign the form type on which the event would be processed<br id="yui_3_16_0_ym19_1_1461029038584_7433"> oFilter.Add(139) 'Orders Form<br id="yui_3_16_0_ym19_1_1461029038584_7434"><br id="yui_3_16_0_ym19_1_1461029038584_7435"> '// For a list of all form types see the help or use the<br id="yui_3_16_0_ym19_1_1461029038584_7436"> '// Tools -> User Tools -> Display Debug Information option<br id="yui_3_16_0_ym19_1_1461029038584_7437"> '// in the SBO application<br id="yui_3_16_0_ym19_1_1461029038584_7438"> '// then open the desired form and hover over it with the mouse<br id="yui_3_16_0_ym19_1_1461029038584_7439"> '// the form's type will apear in the lower left side of the screen<br id="yui_3_16_0_ym19_1_1461029038584_7440"><br id="yui_3_16_0_ym19_1_1461029038584_7441"><br id="yui_3_16_0_ym19_1_1461029038584_7442"> '// Setting the application with the EventFilters object<br id="yui_3_16_0_ym19_1_1461029038584_7443"> '// in this case we will process a click event for form types 142 and 139<br id="yui_3_16_0_ym19_1_1461029038584_7444"> '// and we will process a key down event for for form type 139<br id="yui_3_16_0_ym19_1_1461029038584_7445"><br id="yui_3_16_0_ym19_1_1461029038584_7446"> SBO_Application.SetFilter(oFilters)<br id="yui_3_16_0_ym19_1_1461029038584_7447"><br id="yui_3_16_0_ym19_1_1461029038584_7448"> End Sub<br id="yui_3_16_0_ym19_1_1461029038584_7449"> Public Sub New()<br id="yui_3_16_0_ym19_1_1461029038584_7450"><br id="yui_3_16_0_ym19_1_1461029038584_7451"> '//*************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7452"> '// set SBO_Application with an initialized application object<br id="yui_3_16_0_ym19_1_1461029038584_7453"> '//*************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7454"> SetApplication()<br id="yui_3_16_0_ym19_1_1461029038584_7455"><br id="yui_3_16_0_ym19_1_1461029038584_7456"> '//*************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7457"> '// set SBO_Application with an initialized EventFilters object<br id="yui_3_16_0_ym19_1_1461029038584_7458"> '//*************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7459"><br id="yui_3_16_0_ym19_1_1461029038584_7460"> SetFilters()<br id="yui_3_16_0_ym19_1_1461029038584_7461"><br id="yui_3_16_0_ym19_1_1461029038584_7462"> End Sub<br id="yui_3_16_0_ym19_1_1461029038584_7463"><br id="yui_3_16_0_ym19_1_1461029038584_7464"> Private Sub SBO_Application_AppEvent(ByVal EventType As SAPbouiCOM.BoAppEventTypes) Handles SBO_Application.AppEvent<br id="yui_3_16_0_ym19_1_1461029038584_7465"><br id="yui_3_16_0_ym19_1_1461029038584_7466"> '//********************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7467"> '// the following are the events sent by the application<br id="yui_3_16_0_ym19_1_1461029038584_7468"> '// (Ignore aet_ServerTermination)<br id="yui_3_16_0_ym19_1_1461029038584_7469"> '// in order to implement your own code upon each of the events<br id="yui_3_16_0_ym19_1_1461029038584_7470"> '// place you code instead of the matching message box statement<br id="yui_3_16_0_ym19_1_1461029038584_7471"> '//********************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7472"><br id="yui_3_16_0_ym19_1_1461029038584_7473"><br id="yui_3_16_0_ym19_1_1461029038584_7474"> Select Case EventType<br id="yui_3_16_0_ym19_1_1461029038584_7475"><br id="yui_3_16_0_ym19_1_1461029038584_7476"> Case SAPbouiCOM.BoAppEventTypes.aet_ShutDown<br id="yui_3_16_0_ym19_1_1461029038584_7477"><br id="yui_3_16_0_ym19_1_1461029038584_7478"> SBO_Application.MessageBox("A Shut Down Event has been caught" _<br id="yui_3_16_0_ym19_1_1461029038584_7479"> & vbNewLine & "Terminating Add On...")<br id="yui_3_16_0_ym19_1_1461029038584_7480"><br id="yui_3_16_0_ym19_1_1461029038584_7481"> '//**************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7482"> '//<br id="yui_3_16_0_ym19_1_1461029038584_7483"> '// Take care of terminating your AddOn application<br id="yui_3_16_0_ym19_1_1461029038584_7484"> '//<br id="yui_3_16_0_ym19_1_1461029038584_7485"> '//**************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7486"><br id="yui_3_16_0_ym19_1_1461029038584_7487"> End<br id="yui_3_16_0_ym19_1_1461029038584_7488"><br id="yui_3_16_0_ym19_1_1461029038584_7489"><br id="yui_3_16_0_ym19_1_1461029038584_7490"><br id="yui_3_16_0_ym19_1_1461029038584_7491"> Case SAPbouiCOM.BoAppEventTypes.aet_CompanyChanged<br id="yui_3_16_0_ym19_1_1461029038584_7492"><br id="yui_3_16_0_ym19_1_1461029038584_7493"> SBO_Application.MessageBox("A Company Change Event has been caught")<br id="yui_3_16_0_ym19_1_1461029038584_7494"><br id="yui_3_16_0_ym19_1_1461029038584_7495"> '//**************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7496"> '// Check the new company name, if your add on was not meant for<br id="yui_3_16_0_ym19_1_1461029038584_7497"> '// the new company terminate your AddOn<br id="yui_3_16_0_ym19_1_1461029038584_7498"> '// If SBO_Application.Company.Name Is Not "Company1" then<br id="yui_3_16_0_ym19_1_1461029038584_7499"> '// Close<br id="yui_3_16_0_ym19_1_1461029038584_7500"> '// End If<br id="yui_3_16_0_ym19_1_1461029038584_7501"> '//**************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7502"><br id="yui_3_16_0_ym19_1_1461029038584_7503"> Case SAPbouiCOM.BoAppEventTypes.aet_LanguageChanged<br id="yui_3_16_0_ym19_1_1461029038584_7504"><br id="yui_3_16_0_ym19_1_1461029038584_7505"> SBO_Application.MessageBox("A Languge Change Event has been caught")<br id="yui_3_16_0_ym19_1_1461029038584_7506"><br id="yui_3_16_0_ym19_1_1461029038584_7507"> '//**************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7508"> '// Check the new language name, if your AddOn's items needs<br id="yui_3_16_0_ym19_1_1461029038584_7509"> '// to be changed, take care of it at this point<br id="yui_3_16_0_ym19_1_1461029038584_7510"> '//<br id="yui_3_16_0_ym19_1_1461029038584_7511"> '// Select Case SBO_Application.Language<br id="yui_3_16_0_ym19_1_1461029038584_7512"> '// Case ln_English:<br id="yui_3_16_0_ym19_1_1461029038584_7513"> '// Case ln_French:<br id="yui_3_16_0_ym19_1_1461029038584_7514"> '// Case ln_German:<br id="yui_3_16_0_ym19_1_1461029038584_7515"> '// End Select<br id="yui_3_16_0_ym19_1_1461029038584_7516"> '//**************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7517"><br id="yui_3_16_0_ym19_1_1461029038584_7518"> End Select<br id="yui_3_16_0_ym19_1_1461029038584_7519"><br id="yui_3_16_0_ym19_1_1461029038584_7520"> End Sub<br id="yui_3_16_0_ym19_1_1461029038584_7521"><br id="yui_3_16_0_ym19_1_1461029038584_7522"><br id="yui_3_16_0_ym19_1_1461029038584_7523"> Private Sub SBO_Application_MenuEvent(ByRef pVal As SAPbouiCOM.MenuEvent, ByRef BubbleEvent As Boolean) Handles SBO_Application.MenuEvent<br id="yui_3_16_0_ym19_1_1461029038584_7524"><br id="yui_3_16_0_ym19_1_1461029038584_7525"> '//********************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7526"> '// in order to activate your own forms instead of SAP Business One system forms<br id="yui_3_16_0_ym19_1_1461029038584_7527"> '// process the menu event by your self<br id="yui_3_16_0_ym19_1_1461029038584_7528"> '// change BubbleEvent to True so that SAP Business One won't process it<br id="yui_3_16_0_ym19_1_1461029038584_7529"> '//********************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7530"><br id="yui_3_16_0_ym19_1_1461029038584_7531"> If pVal.beforeAction = True Then<br id="yui_3_16_0_ym19_1_1461029038584_7532"><br id="yui_3_16_0_ym19_1_1461029038584_7533"> SBO_Application.SetStatusBarMessage( _<br id="yui_3_16_0_ym19_1_1461029038584_7534"> "Menu item: " + pVal.menuUID + " sent an event BEFORE SAP Business One processes it.", SAPbouiCOM.BoMessageTime.bmt_Long, True)<br id="yui_3_16_0_ym19_1_1461029038584_7535"><br id="yui_3_16_0_ym19_1_1461029038584_7536"> '// to stop SAP Business One from processing this event<br id="yui_3_16_0_ym19_1_1461029038584_7537"> '// unmark the following statement<br id="yui_3_16_0_ym19_1_1461029038584_7538"><br id="yui_3_16_0_ym19_1_1461029038584_7539"> '// BubbleEvent = True<br id="yui_3_16_0_ym19_1_1461029038584_7540"><br id="yui_3_16_0_ym19_1_1461029038584_7541"> Else<br id="yui_3_16_0_ym19_1_1461029038584_7542"><br id="yui_3_16_0_ym19_1_1461029038584_7543"> SBO_Application.SetStatusBarMessage( _<br id="yui_3_16_0_ym19_1_1461029038584_7544"> "Menu item: " & pVal.menuUID & " sent an event AFTER SAP Business One processes it.", SAPbouiCOM.BoMessageTime.bmt_Long, True)<br id="yui_3_16_0_ym19_1_1461029038584_7545"><br id="yui_3_16_0_ym19_1_1461029038584_7546"> End If<br id="yui_3_16_0_ym19_1_1461029038584_7547"><br id="yui_3_16_0_ym19_1_1461029038584_7548"> End Sub<br id="yui_3_16_0_ym19_1_1461029038584_7549"><br id="yui_3_16_0_ym19_1_1461029038584_7550"> Private Sub SBO_Application_ItemEvent(ByVal FormUID As String, ByRef pVal As SAPbouiCOM.ItemEvent, ByRef BubbleEvent As Boolean) Handles SBO_Application.ItemEvent<br id="yui_3_16_0_ym19_1_1461029038584_7551"><br id="yui_3_16_0_ym19_1_1461029038584_7552"><br id="yui_3_16_0_ym19_1_1461029038584_7553"> '//**************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7554"> '// BubbleEvent sets the behavior of SAP Business One.<br id="yui_3_16_0_ym19_1_1461029038584_7555"> '// False means that the application will not continue processing this event<br id="yui_3_16_0_ym19_1_1461029038584_7556"> '// True is the default value<br id="yui_3_16_0_ym19_1_1461029038584_7557"> '//**************************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7558"><br id="yui_3_16_0_ym19_1_1461029038584_7559"> If pVal.formType <> 0 And pVal.Before_Action = True Then<br id="yui_3_16_0_ym19_1_1461029038584_7560"><br id="yui_3_16_0_ym19_1_1461029038584_7561"> '//************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7562"> '// the message box form type is 0<br id="yui_3_16_0_ym19_1_1461029038584_7563"> '// I chose not to deal with events triggered by a message box<br id="yui_3_16_0_ym19_1_1461029038584_7564"> '//************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7565"><br id="yui_3_16_0_ym19_1_1461029038584_7566"> Select Case pVal.EventType<br id="yui_3_16_0_ym19_1_1461029038584_7567"><br id="yui_3_16_0_ym19_1_1461029038584_7568"> '//************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7569"> '// every event will open a message box with the event<br id="yui_3_16_0_ym19_1_1461029038584_7570"> '// name and the form UID how sent it<br id="yui_3_16_0_ym19_1_1461029038584_7571"> '//************************************************************<br id="yui_3_16_0_ym19_1_1461029038584_7572"><br id="yui_3_16_0_ym19_1_1461029038584_7573"> Case SAPbouiCOM.BoEventTypes.et_ITEM_PRESSED<br id="yui_3_16_0_ym19_1_1461029038584_7574"><br id="yui_3_16_0_ym19_1_1461029038584_7575"> '// Specifies a button release (After exit).<br id="yui_3_16_0_ym19_1_1461029038584_7576"><br id="yui_3_16_0_ym19_1_1461029038584_7577"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7578"> "An et_ITEM_PRESSED has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7579"><br id="yui_3_16_0_ym19_1_1461029038584_7580"> Case SAPbouiCOM.BoEventTypes.et_KEY_DOWN<br id="yui_3_16_0_ym19_1_1461029038584_7581"><br id="yui_3_16_0_ym19_1_1461029038584_7582"> '// Specifies a key down event.<br id="yui_3_16_0_ym19_1_1461029038584_7583"><br id="yui_3_16_0_ym19_1_1461029038584_7584"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7585"> "An et_KEY_DOWN has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7586"><br id="yui_3_16_0_ym19_1_1461029038584_7587"> Case SAPbouiCOM.BoEventTypes.et_GOT_FOCUS<br id="yui_3_16_0_ym19_1_1461029038584_7588"><br id="yui_3_16_0_ym19_1_1461029038584_7589"> '// Specifies an item got focus.<br id="yui_3_16_0_ym19_1_1461029038584_7590"><br id="yui_3_16_0_ym19_1_1461029038584_7591"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7592"> "An et_GOT_FOCUS has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7593"><br id="yui_3_16_0_ym19_1_1461029038584_7594"> Case SAPbouiCOM.BoEventTypes.et_LOST_FOCUS<br id="yui_3_16_0_ym19_1_1461029038584_7595"><br id="yui_3_16_0_ym19_1_1461029038584_7596"> '// Specifies an item lost focus.<br id="yui_3_16_0_ym19_1_1461029038584_7597"><br id="yui_3_16_0_ym19_1_1461029038584_7598"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7599"> "An et_LOST_FOCUS has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7600"><br id="yui_3_16_0_ym19_1_1461029038584_7601"> Case SAPbouiCOM.BoEventTypes.et_COMBO_SELECT<br id="yui_3_16_0_ym19_1_1461029038584_7602"><br id="yui_3_16_0_ym19_1_1461029038584_7603"> '// Specifies the selection of valid value in Combo Box.<br id="yui_3_16_0_ym19_1_1461029038584_7604"><br id="yui_3_16_0_ym19_1_1461029038584_7605"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7606"> "An et_COMBO_SELECT has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7607"><br id="yui_3_16_0_ym19_1_1461029038584_7608"> Case SAPbouiCOM.BoEventTypes.et_CLICK<br id="yui_3_16_0_ym19_1_1461029038584_7609"> '// Specifies Mouse Up on editable item.<br id="yui_3_16_0_ym19_1_1461029038584_7610"><br id="yui_3_16_0_ym19_1_1461029038584_7611"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7612"> "An et_CLICK has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7613"><br id="yui_3_16_0_ym19_1_1461029038584_7614"> Case SAPbouiCOM.BoEventTypes.et_DOUBLE_CLICK<br id="yui_3_16_0_ym19_1_1461029038584_7615"> '// Specifies Mouse Up on editable item in time interval define by<br id="yui_3_16_0_ym19_1_1461029038584_7616"> '// SAP Business One as double-click.<br id="yui_3_16_0_ym19_1_1461029038584_7617"><br id="yui_3_16_0_ym19_1_1461029038584_7618"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7619"> "An et_DOUBLE_CLICK has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7620"><br id="yui_3_16_0_ym19_1_1461029038584_7621"> Case SAPbouiCOM.BoEventTypes.et_MATRIX_LINK_PRESSED<br id="yui_3_16_0_ym19_1_1461029038584_7622"> '// Specifies a link arrow within a matrix was pressed.<br id="yui_3_16_0_ym19_1_1461029038584_7623"><br id="yui_3_16_0_ym19_1_1461029038584_7624"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7625"> "An et_MATRIX_LINK_PRESSED has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7626"><br id="yui_3_16_0_ym19_1_1461029038584_7627"> Case SAPbouiCOM.BoEventTypes.et_MATRIX_COLLAPSE_PRESSED<br id="yui_3_16_0_ym19_1_1461029038584_7628"> '// Specifies collapsed or expanded list within a matrix.<br id="yui_3_16_0_ym19_1_1461029038584_7629"><br id="yui_3_16_0_ym19_1_1461029038584_7630"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7631"> "An et_MATRIX_COLLAPSE_PRESSED has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7632"><br id="yui_3_16_0_ym19_1_1461029038584_7633"> Case SAPbouiCOM.BoEventTypes.et_VALIDATE<br id="yui_3_16_0_ym19_1_1461029038584_7634"> '//Specifies an item validation event.<br id="yui_3_16_0_ym19_1_1461029038584_7635"><br id="yui_3_16_0_ym19_1_1461029038584_7636"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7637"> "An et_VALIDATE has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7638"><br id="yui_3_16_0_ym19_1_1461029038584_7639"> Case SAPbouiCOM.BoEventTypes.et_FORM_LOAD<br id="yui_3_16_0_ym19_1_1461029038584_7640"> '// Specifies that SAP Business One application opened a form.<br id="yui_3_16_0_ym19_1_1461029038584_7641"><br id="yui_3_16_0_ym19_1_1461029038584_7642"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7643"> "An et_FORM_LOAD has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7644"><br id="yui_3_16_0_ym19_1_1461029038584_7645"> Case SAPbouiCOM.BoEventTypes.et_FORM_UNLOAD<br id="yui_3_16_0_ym19_1_1461029038584_7646"> '// Specifies that SAP Business One application closed a form.<br id="yui_3_16_0_ym19_1_1461029038584_7647"><br id="yui_3_16_0_ym19_1_1461029038584_7648"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7649"> "An et_FORM_UNLOAD has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7650"><br id="yui_3_16_0_ym19_1_1461029038584_7651"> Case SAPbouiCOM.BoEventTypes.et_FORM_ACTIVATE<br id="yui_3_16_0_ym19_1_1461029038584_7652"> '// Specifies that the focus is set on the form.<br id="yui_3_16_0_ym19_1_1461029038584_7653"><br id="yui_3_16_0_ym19_1_1461029038584_7654"> Case SAPbouiCOM.BoEventTypes.et_FORM_DEACTIVATE<br id="yui_3_16_0_ym19_1_1461029038584_7655"> '// Specifies that the form lost focus.<br id="yui_3_16_0_ym19_1_1461029038584_7656"><br id="yui_3_16_0_ym19_1_1461029038584_7657"> Case SAPbouiCOM.BoEventTypes.et_FORM_CLOSE<br id="yui_3_16_0_ym19_1_1461029038584_7658"> '// Specifies that the form was closed by calling the Close event.<br id="yui_3_16_0_ym19_1_1461029038584_7659"><br id="yui_3_16_0_ym19_1_1461029038584_7660"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7661"> "An et_FORM_CLOSE has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7662"><br id="yui_3_16_0_ym19_1_1461029038584_7663"> Case SAPbouiCOM.BoEventTypes.et_FORM_RESIZE<br id="yui_3_16_0_ym19_1_1461029038584_7664"> '// Specifies resizing of the form.<br id="yui_3_16_0_ym19_1_1461029038584_7665"><br id="yui_3_16_0_ym19_1_1461029038584_7666"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7667"> "An et_FORM_RESIZE has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7668"><br id="yui_3_16_0_ym19_1_1461029038584_7669"> Case SAPbouiCOM.BoEventTypes.et_FORM_KEY_DOWN<br id="yui_3_16_0_ym19_1_1461029038584_7670"> '// Specifies a key press on an area which is not item of the form.<br id="yui_3_16_0_ym19_1_1461029038584_7671"><br id="yui_3_16_0_ym19_1_1461029038584_7672"> SBO_Application.MessageBox( _<br id="yui_3_16_0_ym19_1_1461029038584_7673"> "An et_FORM_KEY_DOWN has been sent by a form with the unique ID: " + FormUID)<br id="yui_3_16_0_ym19_1_1461029038584_7674"><br id="yui_3_16_0_ym19_1_1461029038584_7675"> End Select<br id="yui_3_16_0_ym19_1_1461029038584_7676"> End If<br id="yui_3_16_0_ym19_1_1461029038584_7677"> End Sub<br id="yui_3_16_0_ym19_1_1461029038584_7678">End Class<br id="yui_3_16_0_ym19_1_1461029038584_7679"><br id="yui_3_16_0_ym19_1_1461029038584_7680"><br id="yui_3_16_0_ym19_1_1461029038584_7681">Thanks,<br id="yui_3_16_0_ym19_1_1461029038584_7682">Denes<br></div></div></body></html>