Hirdetés
 

SAP Business One e-kurzus: Testreszabási lehetõségek 2.: Programozás (DI és UI API)

PDF
Nyomtatás

Elérekeztünk az utolsó, az úgynevezett AddOn alkalmazások készítésének témaköréhez. Ha idáig eljutottál, akkor megismerhetted, hogy miként működik a program, milyen funkciókat valósítottak meg a fejlesztők és mi az, ami hiányzik belőle. A mai alkalommal megismerheted, hogy a hiányzó dolgokkal milyen módon egészíthető ki a rendszer.

 

A fejlesztés eszközei

Az SAP Business One rendszer forráskódjai nem elérhetők a külsős fejlesztők számára, így maga az alkalmazás fejlesztés az úgy nevezett User Interface API-n (UI API) és Data Interface API-n (DI API) keresztül történik. Ezek az API-k COM interfészen keresztül elérhető objektumok gyűjteményét jelentik, melyek egyrészt SBO rendszer felhasználói felületébe való integrálódást, másrészt az alkalmazás adatkezelő funkcióit teszik elérhetővé, külső fejlesztő eszközökből.

Az fejlesztés elsősorban a Microsoft Visual Studio valamely verziójával történik Visual Basic, C, C++ vagy C# nyelven. Természetesen minden egyéb eszköz vagy nyelv számításba jöhet, amely képes együttműködni a fenti API-kal. Korábban én is próbálkoztam Delphi-vel, de mivel az együttműködés nem volt zökkenőmentes, végülis áttértem először VS 2003-ra, majd 2005-ös, később 2008-as verziókra. Ezekkel a rendszerekkel gyakorlatilag problémamentesen lehet külső alkalmazásokat fejleszteni a rendszerhez.

UI API


Az interfész segítségével lehetőségünk van saját ablakokat és/vagy mezőket, gombokat, grid-eket integrálni az alaprendszerbe. Az ilyen módon létrehozott ablakokhoz menüpontot rendelhetünk, amelyet bárhol elhelyezhetünk az alap menü struktúrában. A létrehozott alkalmazások megjelenésükben teljes egészében megegyeznek az alaprendszeri ablakokkal, így szinte eldönthetetlen, hogy mikor használjuk az alaprendszer és mikor az AddOn ablakait.

Programozási szempontból elmondható, hogy több lehetőségünk is van az ablakok létrehozására. Egyrészt felépíthetjük őket futás közben, az elemi komponensekből (címke, mező, gomb, stb.), másrészt lehetőség van xml állományból betölteni az ablak definícióját. Ez a módszer sokkal gyorsabb és a legtöbb esetben célszerű is ezt használni.
Az ablakok megjelenésének megtervezéséhez, összeállításához - az előbb említett xml elkészítéséhez - biztosít az SAP egy Screen Painter nevű AddOn-t, amellyel "összehúzogathatjuk" a különféle ablak építőelemekből a saját céljainknak megfelelő ablakot. Ha ezzel megvagyunk, már csak az esemény vezérlését kell leprogramozni.

Az API biztosít néhány eljárást, melyek a program futása közben létrejövő felhasználói események kezelésére szolgálnak (alkalmazás, menü, elem). Ezen eljárásokon keresztül értesül az alkalmazásunk gyakorlatilag az összes programeseményről és reagálhat azokra a céljainknak megfelelően. Például, ha szeretnénk a számla létrehozására még egy figyelmeztető ablakot rátenni, akkor el kell kapnunk az "OK" gomb megnyomásának eseményét, persze csak abban az esetben, ha "hozzáadás" üzemmódban van az ablak, majd megjeleníteni a felhasználónak egy kérdés ablakot, ahol megerősítheti a szándékát. Ha a válasza esetleg nemleges, akkor értesítjük az eseménykezelőt, hogy a korábban megkapott eseményt ne vegye figyelembe; ha a felhasználó igennel felelt, akkor pedig nem avatkozunk be az esemény további lefolyásába.

Az előző alkalommal említett felhasználói objektumok alkalmasak arra, hogy összekapcsoljuk őket a kezelésükre létrehozott ablakokkal, így - elég sok programozási feladatot levéve a fejlesztők válláról - automatikusan a rendszer kezeli őket. Ennek következtében nem kell gondoskodni az adatkeresési, mentési funkciók kézi kialakításával.

Az SAP által a felhasználói interfész kezelésére létrehozott eszközök alapvetően alkalmasak a feladatuk ellátására, de nem nevezném egy fejlesztőbarát megoldásoknak. Néha az az érzése az embernek, hogy a megvalósítás mikéntje nem végiggondolt és egy "örülj neki, hogy legalább ezt kaptad" hozzáállást sugall a részükről. Ennek persze a legfőbb oka, hogy az alaprendszer fejlesztése nem ezekkel az eszközökkel zajlik, így ők nem ütköznek bele a létrehozott eszközök használhatósági (használhatatlansági) problémáiba. Annak a fejlesztőnek viszont, aki valami használhatót is szeretne a segítségükkel létrehozni, néha keményen meg kell küzdenie a siker érdekében.

Az alábbiakban egy kis VB program részletet mutatok arról, hogy miként lehet egy egyszerű ablakot létrehozni programból:

    Private Sub CreateMySimpleForm()
        Dim oItem As SAPbouiCOM.Item
        Dim oButton As SAPbouiCOM.Button
        Dim oStaticText As SAPbouiCOM.StaticText
        Dim oEditText As SAPbouiCOM.EditText
        Dim oComboBox As SAPbouiCOM.ComboBox

        'ablak létrehozása
        Dim oCreationParams As SAPbouiCOM.FormCreationParams

        oCreationParams = SBO_Application.CreateObject(SAPbouiCOM.BoCreatableObjectType.cot_FormCreationParams)
        oCreationParams.BorderStyle = SAPbouiCOM.BoFormBorderStyle.fbs_Fixed
        oCreationParams.UniqueID = "MySimpleForm"
        oForm = SBO_Application.Forms.AddEx(oCreationParams)

        'adat definíció - adatkötés
        oForm.DataSources.UserDataSources.Add("EditSource", SAPbouiCOM.BoDataType.dt_SHORT_TEXT, 20)
        oForm.DataSources.UserDataSources.Add("CombSource", SAPbouiCOM.BoDataType.dt_SHORT_TEXT, 20)

        'az ablak tulajdonságai
        oForm.Title = "Simple Form"
        oForm.Left = 400
        oForm.Top = 100
        oForm.ClientHeight = 80
        oForm.ClientWidth = 350

       'OK gomb elhelyezése az ablakon
        oItem = oForm.Items.Add("1", SAPbouiCOM.BoFormItemTypes.it_BUTTON)
        oItem.Left = 6
        oItem.Width = 65
        oItem.Top = 51
        oItem.Height = 19
        oButton = oItem.Specific
        oButton.Caption = "Ok"

       'Mégsem gomb elhelyezése az ablakon
        oItem = oForm.Items.Add("2", SAPbouiCOM.BoFormItemTypes.it_BUTTON)
        oItem.Left = 75
        oItem.Width = 65
        oItem.Top = 51
        oItem.Height = 19
        oButton = oItem.Specific
        oButton.Caption = "Mégsem"

        'Szöveg (címke) elhelyezése
        oItem = oForm.Items.Add("StaticTxt1", SAPbouiCOM.BoFormItemTypes.it_STATIC)
        oItem.Left = 7
        oItem.Width = 148
        oItem.Top = 8
        oItem.Height = 14
        oItem.LinkTo = "EditText1"
        oStaticText = oItem.Specific
        oStaticText.Caption = "Statikus szöveg"

       'Szerkesztő mező elhelyezése
        oItem = oForm.Items.Add("EditText1", SAPbouiCOM.BoFormItemTypes.it_EDIT)
        oItem.Left = 157
        oItem.Width = 163
        oItem.Top = 8
        oItem.Height = 14
        oEditText = oItem.Specific
        oEditText.DataBind.SetBound(True, "", "EditSource")
        oEditText.String = "Edit Text 1"

        'Kiválasztó lista elhelyezése
        oItem = oForm.Items.Add("ComboBox1", SAPbouiCOM.BoFormItemTypes.it_COMBO_BOX)
        oItem.Left = 157
        oItem.Width = 163
        oItem.Top = 24
        oItem.Height = 14
        oItem.DisplayDesc = False
        oComboBox = oItem.Specific
        oComboBox.DataBind.SetBound(True, "", "CombSource")
        oComboBox.ValidValues.Add("1", "Érték 1")
        oComboBox.ValidValues.Add("2", "Érték 2")
        oComboBox.ValidValues.Add("3", "Érték 3")
    End Sub


DI API


Az adat interfész segítségével lehetőségünk van az SBO adatbázisában tárolt adatok elérésére, új adatok hozzáadására, illetve a meglévők módosítására. Felvetődhetne a kérdés, hogy minek van erre szükség, hisz egy SQL adatbázisnál megvannak ehhez a szükséges eszközök. Ez így igaz, de nem árt figyelembe venni, hogy az adatok ilyen "mezítlábas" elérése mindig magában hordozná az inkonzisztenciák kialakulásának veszélyét. Hisz, ha létrehozok egy cikk törzs rekordot, gondoskodnom kell róla, hogy létrejöjjenek a megfelelő árlist (ITM1), raktár készlet (OITW) és archíve tételek.
Mivel ezek teljes körű kezelése nem várható el senkitől, - nem beszélve arról, hogy a rendszer teljes működését dokumentálni kellett volna és kiadni külsős cégeknek - létrehozták az üzleti objektumok elérését biztosító eszközöket.
A megoldás lényege az, hogy leképeztek minden törzsadatot, dokumentumot, és a programozónak az őket reprezentáló objektumokkal kell dolgozni, nem pedig az sql szintű adatkezeléssel. Erre a megvalósításra elmondható, hogy elég hatékony és biztonságos.
Korábbi verziókban még nem volt  minden leképezve, így előfordulhatott, hogy létre tudtam hozni egy megrendelést, hozzá tudtam adni rendelés sorokat, de törölni már nem lehetett őket. Ilyenkor nem mondom, hogy nagy lelkesedéssel áradoztam volna a rendszer fejlesztési lehetőségeiről. Ma már azonban egész használható a rendszer, persze kisebb hiányosságokról, hibákról mindig lehet beszélni, de egyrészt a több éves termékfejlesztés, másrészt a megszerzett rutin a legtöbb probléma megoldásánál elégségesnek tűnik.

Az alábbiakban egy kis példaprogram (VB), amely azt mutatja meg, hogyan lehet egy rendelést létrehozni programból:

    Private Sub AddOrderToDatabase()
        'A rendelés objektum létrehozása
        oOrder = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oOrders)
        Dim oBob As SAPbobsCOM.SBObob

        'A fej adatok megadása
        oOrder.CardCode = "V0001"
        oOrder.CardName = "Kis és Társa Kft."
        oOrder.NumAtCard = "76555111/2009"
        oOrder.DocDate = "2009.01.02"
        oOrder.DocDueDate = "2009.02.10"
        oOrder.DocCurrency = "Ft"

        '1. Sor hozzáadása
         oOrder.Lines.ItemCode = "CIKK001"
         oOrder.Lines.Quantity = 11
         oOrder.Lines.Price = 133.0
         oOrder.Lines.TaxCode = "K20"

        '2. Sor hozzáadása
         oOrder.Lines.ItemCode = "CIKK022"
         oOrder.Lines.Quantity = 10
         oOrder.Lines.Price = 1231.0
         oOrder.Lines.TaxCode = "K20"

        'A rendelés hozzáadása az adatbázishoz
        lRetCode = oOrder.Add

        'Hibakezelés
        If lRetCode <> 0 Then 'Nem sikerült létrehozni
            oCompany.GetLastError(lErrCode, sErrMsg)
               MsgBox(lErrCode & " " & sErrMsg)
        Else 'Sikerült létrehozni
            MsgBox("A rendelést sikeresen létrehoztuk!")
        End If
    End Sub

AddOn regisztráció

Az elkészített alkalmazásokat lehetőségünk van regisztrálni a rendszerben. A regisztráció során megadhatjuk, hogy mely felhasználók használhatják az AddOn-unkat, hogy automatikusan induljon a bejelentkezéskor, vagy kézi indítással.

Mivel a fejlesztett alkalmazások az SBO-hoz hasonlóan a kliens számítógépeken futnak, a rendszer biztosít egy frissítési szolgáltatást, amely gondoskodik az új verziók felhasználói gépekre történő eljuttatásáról, ha új verziót telepítettünk a rendszerre. Ennek a működése nem mindig zökkenőmentes, de némi kézimunkával azért általában végig vihető a frissítési folyamat.

Végszó

A fejlesztés áttekintése során sok mindenről nem beszéltem. Remélem akik többre vágytak volna megértik, hogy most nem volt alkalom a részletekbe menő tárgyaláshoz és veszik a bátorságot hogy jelezzék, többet szeretnének hallani a témában!

Hát ehhez a pillanathoz is elérkeztünk! Végére jutottunk a tanfolyam anyagának, és eljött az ideje, hogy elbúcsúzzak. Remélem az elmúlt hetekben sikerült áttekintést nyújtanom a SAP Business One rendszerről és ha még nem is váltál profi felhasználóvá, már tudod, hogy nagyjából mire alkalmas és hogy működik a rendszer. Ha maradtak benned kérdések, kérlek írj hozzászólást a tananyaghoz, vagy keress a lenti e-mail címen!
 

Nincs hozzászólása.
A téma megvitatása a fórumon. (0 hozzászólás)