Symbol eXtension » Keretrendszer

“Keretrendszer” bejegyzések.

Metódusok időzítése

posted in: Keretrendszer (Tags: , , , ) - No Comments

Egy keretrendszer folyamatosan fejlődik, ahogy az igények azt indokolják. Egyre gyakrabban merül fel, hogy időzítetten kell valamit futtatni. Legyen az adatok letöltése, információk exportálása vagy SMS küldése. Ennek kiszolgálására bővítettük a SyX SDK-t.

Minden paraméter nélküli metódus meghívható a

[CronScheduler(“*/2 9-17 * * 1,2,3,4,5”)]

attribútummal. Az attribútum paramétere egy Cron jellegű időzítési string. A beépített időzítő a Cron paraméternek megfelelő gyakorisággal futtatja a metódust. (http://en.wikipedia.org/wiki/Cron)

A példában szereplő string minden munkanapon (H-P) 9-17 óráig minden páros percben futtat valamit.

A Cron időzítés előnye, hogy nem kell nekünk saját Timer-t létrehozni, a rendszer ezt optimalizáltan megteszi helyettünk. Hátránya viszont, hogy csak állandó időzítési idejű metódusok hozhatóak létre, felhasználói beállítássá nem lehető az időzítés gyakorisága.

Megjegyzések:

  • A metódus továbbra is megjelölhető Modul függő opciókkal (pl.: csak gyártás modul esetén fusson)
  • A metódus továbbra is megjelölhető Permission attribútummal (csak megfelelő jogosultság esetén fut)
  • A metódust a hagyományos módon menüpontként vagy funkció gombként is használhatjuk. Megfordítva: meglévő metódust is elláthatunk CronScheduler attribútummal.

SyX jogosultságok

posted in: Keretrendszer (Tags: , , , , , ) - No Comments

Nagycéges környezetben gyakori, hogy a jogosultsági rendszerrel csak bizonyos menüpontokat engedünk elérni a felhasználóknak. Mostantól a SyX beépülők által létrehozott menüpontok, gombok, funkciók is jogosultsághoz köthetőek.

Ehhez a SyX készítőjének felül kell írnia a GetPermissionDescriptiors() metódust, amelyben int->string párokat létrehozva definiálhatja a jogosultságokat. Ezek a jogosultságok a felhasználói / csoport jogosultságok között megjelennek és felhasználónként megadhatóak / elvehetőek.

A [Permission(int perm)] attribútum felhasználásával pedig minden SyX funkcióhoz meg lehet adni, hogy milyen jog kell a végrehajtásához. Mit lehet védeni jogosultságokkal?

  • Teljes SyX védelme: Be sem tudja tölteni (hibaüzenettel jelenik meg) a SyX beépülőt az, aki egy teljesen védett SyX-hez nem kapott jogot.
  • Menüpontok: Az új menüpontok nem látszanak azoknál a felhasználóknál, akik nem kaptak jogot hozzá.
  • Műveleti gombok: Az új műveleti gombok nem látszanak azoknál a felhasználóknál, akik nem kaptak jogot hozzá.
  • WebMethod-ok: A SyX által létrehozott webszerver adott funkcióihoz a felhasználó nem férhet hozzá ha nincs joga. A funkciók listáján a funkció nem látszik, de az URL-t közvetlenül beírva is 404-es hibaüzenettel válaszol a szerver.

Szálban fut, de ablakot jelenít meg…

posted in: Felhasználói felület, Keretrendszer (Tags: , , , ) - No Comments

A SyX beépülők több helyen használhatnak szálakat működésük közben. A fejlesztő használhat “kézzel” szálakat, de az SaaS működés minden esetben szálban kerül kiszolgálásra. Ritkán, de előfordulhat, hogy a szál valamilyen felhasználói felületet is működtet. Példa erre, ha egy HTTP kérés hatására egy új számla ablak jelenik meg, amin még módosításokat lehet végezni.

Ennek a több szálas problémának a megoldására vezettük be a keretrendszerben az alábbi metódust:

InvokeThreadSafe(MethodInvoker invoker)

Az InvokeThreadSafe hívás során átadott (MethodInvoker-be beburkolt) metódus a főszálon, szinkronizáltan kerül végrehajtásra. Például egy újonnan, szálban létrehozott számla megjelenítise az alábbi módon valósítható meg:

InvokeThreadSafe(new MethodInvoker(so.Display)) //so.Display() beépített metódusa minden Entity-nek.

SyX felhasználás korlátozása cégnév alapján

posted in: Keretrendszer (Tags: , ) - No Comments

Szükség lehet rá, hogy a SyX beépülő futtatását cégnévhez kössük. Ha a CompanyNamePermission attribútumot használjuk, akkor az ott megadott cégnév vagy cégnevek esetén fog csak a SyX beépülő települni. Ezáltal korlátozhatjuk, hogy az értékesített SyX mely cégeknél (cégcsoportok esetén milyen kapcsolódó cégeknél) tud futni.

Egy vagy több cégnév megadására is van lehetőség:

[CompanyNamePermission(“Alma Kft.”, “”)]

[CompanyNamePermission(“Symbol LAB”, “Symbol Tech Kft.”)]

Szükséges programverzió

posted in: Keretrendszer (Tags: , , ) - No Comments

A Symbol Ügyvitel folyamatos fejlesztése miatt szükség lehet arra, hogy a SyX beépülő készítője beállítsa, hogy milyen verziója Symbol Ügyvitel szükséges a futtatáshoz. A SyX Visual Studio-ban lefordítható például a v1.70-es SDK-val, de nem fog futni olyan Symbol Ügyvitellel, amely csak 1.64-es verziószámú.

Például, a Symbol Ügyvitel v1.66-es verziójától elérhető a Szerződéses árak telephelyhez való rendelése. Amennyiben a SyX beépülő ezt használja, meg kell adni a

[RequiredVersion(1, 66)]

attribútumot, hogy csak azok a felhasználók érhessék el, akik frissítettek v1.66-ra.

Modulfüggő menüpontok

posted in: Keretrendszer (Tags: , , ) - No Comments

Amennyiben egy vagy több menüpontot csak bizonyos modul megléte esetén szeretnénk engedélyezni, úgy használhatjuk a ModuleDepends attribútumot.

Például:

Új menüpont létrehozását támogató metódus előtt elhelyezett [ModuleDepends(SymbolModule.WebData)] attribútum korlátozza, hogy a menüpont csak akkor jelenjen meg, ha a cégnek van WebData modulja.

Időzített működés

posted in: Keretrendszer (Tags: , , ) - No Comments

A SyX beépülők alkalmasak időzített tevékenységek végrehajtására. Mint önállóan futó szerelvények, bármilyen vezérlőt tárolhatnak.

A rendszeres időzítés céljából hozzunk létre egy Timer-t, majd:

  • Állítsuk be a Timer Interval értékét a rendszerbeállítások alapján (amelyet a felhaszáló például egy külön ablakon szerkeszthet).
  • A Tick eseményre kössük rá a végrehajtani kívánt metódust.
  • A StartUp() metódusban indítsuk el az időzítőt.
  • A ShutDown() metódusban állítsek le az időzítőt.

A Log() metódussal precízen naplózhatjuk az időzítő indulását, leállítását és tevékenységét.

E-mail küldése (PDF bizonylat csatolmánnyal)

posted in: Keretrendszer (Tags: , , , , ) - No Comments

A SyX beépülők a void SendEmail(string[] to, string[] cc, string[] bcc, string subject, string body, string[] filenames) metódussal képesek e-mail üzenet küldésére. A felhasználó email beállításai alapján kerül elküldésre az email és a céges rendszerbeállítások alapján, opcionálisan elmentésre kerül az üzenet és annak csatolmányai.

Működés jellemzői:

  • Az üzenet törzse HTML tartlmú is lehet. Ilyen esetben automatikusan létrejön a Text/Plain melléklet, amely a csak szöveges részeket tartalmazza.
  • A csatolt fájloknak az üzenet küldésének idején végig létezniük kell. Az üzenet sikeres kiküldése után a fájlok törölhetőek.
  • Kivétel keletkezik, ha az üzenet nem került elküldésre. Ennek lekezeléséről a SyX beépülőnek kell gondolskodnia.

Bizonylatok előállítása PDF formátumban és kiküldésül email üzenetként a megadott email sablon használatával:

  • void SendVoucherEmailCustomerBid(long emailvouchertemplate, long customerbid, bool firstpageonly)
    Árajánlat kiküldése PDF formátumban a vevő email címére.
  • void SendVoucherEmailCustomerOrder(long emailvouchertemplate, long customerorder, bool firstpageonly)
    Vevői rendelés kiküldése PDF formátumban a vevő email címére.
  • void SendVoucherEmailStockOut(long emailvouchertemplate, long stockout, bool firstpageonly, int vouchertype)
    Szállítólevél, számla kiküldése PDF formátumban a vevő email címére (utolsó paraméterként szükséges megadni a bizonylat típusát)

PDF készítése bizonylatokból

posted in: Keretrendszer (Tags: , , ) - No Comments

Az alábbi metódusokkal a bizonylatok adatairól PDF állományok készíthetőek. A metódusok visszatérési értéke a PDF-et tartalmazó átmeneti állomány.

string CreatePDFFromCustomerBid(long customerbid, bool firstpageonly)

Árajánlatból PDF készítése.

string CreatePDFFromCustomerOrder(long customerorder, bool firstpageonly)

Vevői rendelésből PDF készítése.

string CreatePDFFromStockOut(long stockout, bool firstpageonly)

Szálíltólevélből, számlából (bármilyen készlet(ki)mozgató bizonylatból) PDF készítése.

Adatváltozás figyelése

posted in: Keretrendszer (Tags: , , ) - No Comments

A rendszer az adatok közül csak azokat menti el, amelyek megváltoztak. Némely esetben ezeket az adatváltozásokat jó lenne figyelemmel kísérni. Erre biztosít lehetőséget a void EntityChanged(PlugInEntityChangeInfo[] entitychangeinfos) metódus felülírása.

A metódus felülírásával bizonyos adatok (adatbázis tábla szerint) bizonyos műveletei (adatbázis műveletek = Insert, Update, Delete) alapján dönthetünk arról, hogy a SyX beépülő végrehajtson-e egy műveletet.

Minden adatváltozás megjelenítése üzenetablakban:

        protected override void EntityChanged(PlugInEntityChangeInfo[] entitychangeinfos)
        {
            List<string> s = new List<string>();
            foreach (PlugInEntityChangeInfo pieci in entitychangeinfos)
                s.Add(String.Format(“{0} {1} {2}”,
                     pieci.EntityType,
                     pieci.EntityChangeMode,
                     pieci.Id));
            MessageBox.Show(String.Join(“\n”, s.ToArray()));
        }

Működési modell jellemzői:

  • Az adatváltozásról szóló értesítés csak akkor érkezik meg, ha az adatok mentése sikeres volt. Tranzakció visszagörgetésekor semmilyen változás értesítés nem fut be.
  • A tranzakció közben mentett adatok (új számla, azon egy új vevő, és egy most létrehozozz fizetési mód, majd a számla 15 tétele) együttesen érkeznek be az értesítési folyamatba. Táblánként lehet dönteni arról, hogy mely adatokkal foglalkozunk. A megkapott Id azonosítókon keresztül hozzáférünk a már mentett adatokhoz.
  • A fenti példával ellentétben nem célszerű felhasználói beavatkozást igénylő műveleteket kötni az adatváltozáshoz.

Felhasználási példa:

  • Adott bizonylattömbbe rögzített, 1M Ft-nál nagyobb vevői rendelésről automatikusan értesítést küld a rendszer a vezetőnek.
  • Számla pénzügyi kiegyenlítésekor automatikusan SMS-t küld a vevőnek.