1. Implementace modulu

    Article: AN0001582Updated: 17.10.2018

    Po spuštění systému ObjectGears si systém načítá všechny DLL knihovny z adresáře Modules. V každé hledá třídu dědící z IModuleInterface (resp. ModuleInterfaceBase). Pokud knihovna nemá žádného potomka, pak je zahozena.
    Při nalezení potomka, je pro modul zjištěno několik vlastností - název, autor, verze...

    Tyto vlastnosti jsou zjištěny pomocí funkce GetPropertyString:

    •  Name
    •  Version
    •  Description
    •  Producer
    •  ProducerUrl
    •  SupportEmail

    Příznak, zda modul podporuje přímé odeslání SMS je zjištěn přímo vlastností modulu:

    •  EnableSendSMS


    Následně je model uložen do seznamu modulů a je inicializovan metodou Initialization:

     module.Initialization(app);

    Tím je modulu předána vazba na systém ObjectGears, pomocí které může načítat konfigurační parametry a volat funkce systému. V metodě Initialization je třeba odkaz na IApplication uložit pro pozdější použití.
    Zároveň lze provést inicializaci modulu, např. načtení tříd a sloupců pro pozdější rychlé zpracování.

        public IApplication App { get; private set; }

        public override void Initialization(IApplication application)
        {
            App = application;
        }

    Tím je načtení a inicializace modulu dokončena.

    Moduly je možné volat pomocí skriptů. Proto je třeba přes webové rozhraní nastavit modulu jedinečný kód. Bez kódu by nešlo určit, jaký modul chcete použít.

    Volání modulu ze skriptu

    Při volání modulu ze skriptu se pro identifikaci používá kód.

    var m = O.Module['kod_modulu'];

    Příklad výše v seznamu modulů podle kódu nalezne požadovaný modul. Následně je na modulu zavolána funkce GetScriptObject() a její výsledek je vrácen.
    Dále lze libovolně volat funkce a metody objektu z modulu. Jejich význam a použití naleznete v dokumentaci od výrobce daného modulu.

    Základní seznam funkcí a metod je přehledně zobrazen na stránce Definice interface.

    Pro lepší popis vráceného objektu z funkce GetScriptObject doporučujeme každou funkci a metodu odekorovat atributem DescriptionAttribute. Popis zde zadaný se zobrazuje na stránce Definice interface.

        [Description("Popis mé funkce.")]
        public DataRowList GetHolidays(ClassDef clHoliday)
        {
            ...
        }

    Příklad implementace modulu

    1) Pro vytvoření nového modulu v Microsoft Visual Studio vytvořte nový projekt pro "Class Library" v jazyce C#.
    2) Přidejte referenci na knihovnu Com.ObjectGears.Common.dll. Tu najdete v instalaci systému ObjectGears.
    3) Vytvořte public třídu ModuleInterface a vložte do ní tento základ:

        public class ModuleInterface : ModuleInterfaceBase
        {
            public IApplication App { get; private set; }

            public override string GetPropertyString(string code)
            {
                switch (code)
                {
                    case ModuleInterfaceProperty.Name: return "MyCompany.Module.ModuleName";
                    case ModuleInterfaceProperty.Version: return "1";
                    case ModuleInterfaceProperty.Producer: return "My company";
                    case ModuleInterfaceProperty.ProducerUrl: return "http://www.mycompany.eu";
                    case ModuleInterfaceProperty.Description: return "Základní popis modulu.";
                }

                return null;
            }

            public override int? GetPropertyInt(string code)
            {
                return null;
            }

            public override DateTime? GetPropertyDateTime(string code)
            {
                switch (code)
                {
                    case ModuleInterfaceProperty.Created: return new DateTime(2016, 1, 1);
                }

                return null;
            }

            public override void Initialization(IApplication application)
            {
                App = application;
            }

            public override object GetScriptObject()
            {
                return new ModuleObject(this);
            }
        }

        public class ModuleObject
        {
            private ModuleInterface inter;

            public ModuleUtilities(ModuleInterface inter)
            {
                this.inter = inter;
            }

            //...mé funkce po řeš?ení modulu
            public string GetValue()
            {
               //testovací zápis do logu.
               inter.App.Log.Write("Run GetValue");
               //...

               //ukazka čteni dat přes interface
               DataRow dr = inter.App.DataRow.GetDataById( 100, 10);
               return dr.ShortDescription;
            }
          }
        }

    4) Doplňte hodnoty vlastností a vaše požadované funkce
    5) Projekt zkompilujte
    6) DLL knihovnu nakopírujte do adresáře Modules k webové aplikaci a k windows service. Před kopírováním bude potřeba aplikaci zastavit, aby bylo možné přepsat případný DLL soubor od předchozího nasazení. Po spuštění se provede načtení aktuálních dll souborů a jejich inicializace.

×