Click or drag to resize

Adatok szerkesztése

Ez a fejezet a RecroGrid Framework-ben megvalósított adatmódosítási funkciókat mutatja be. Az adatok szerkeszthetőség két alapvető tényezőtől függ, az aktuális jogosultsági szinttől, illetve a mező típusától. Az alapszintű jogosultsági rendszer mellett javasolt a RecroSec teljes körű felhasználókhoz és csoportokhoz köthető, paraméterezhető jogosultsági rendszer használata is.

Az adatok felvitele és módosítása a List nézetből a Toolbar-on elhelyezett gombok, vagy context-menü segítségével megjelenített Form nézetben lehetséges. Ez funkció külön kódírás nélkül is működik, de általában szükséges további testreszabás a felhasználói élmény fokozásához, illetve a felhasználó számára nem látható egyéb műveletek elvégzésére. Ezek a feladatok tipikusan a mezők alapértékének megadása, adatfüggő mezők kitöltése. A felhasználó számára kényelmes rögzítési felület, típusfüggő mezők, más listákból választás, továbbá a felhasználó által megadott adatok ellenőrzése, esetleges hibaüzenetek definiálása. A RecroGrid Framework számos belépési pontot támogat, hogy ezeket a feladatokat a leghatékonyabban lehessen megvalósítani.

This topic contains the following sections:

Szerveroldali folyamatok

A belépési pontokat három fő csoportra bontjuk

  • Adatosztály interface kiterjesztések

    Az eseményekről (inicializálás, új felvitel, módosítás, törlés) az entitás interface segítségével értesül. A megkapott információk alapján módosításokat hajthat végre önmagán, illetve üzenetet adhat vissza, amivel befolyásolhatja a további működést. Azokat a inicializálási és ellenőrzési feladatokat javasolt így megvalósítani, amik nem függnek más entitásoktól vagy egyéb külső adatoktól. Ha az entitás több RecroGrid alapja, akkor az egységes műveleteket itt érdemes megvalósítani.

    C#
    public partial class Person : IRecroGridInitNew, IRecroGridUpdate, IRecroGridDelete
    {
        public bool RecroGridDelete(IRGDataContext context, RGClientParam param, RGUIMessages messages)
        {
            if (this.Locked)
            {
                messages.AddError("A rekord zárolt!");
                return false;
            }
            return true;
        }
        public void RecroGridInitNew(IRGDataContext context, RGClientParam param)
        {
            this.PersonType = "SC";
        }
        public bool RecroGridUpdate(IRGDataContext context, RGClientParam param, RGUIMessages messages)
        {
            if (string.IsNullOrEmpty(this.FirstName))
            {
                //mezőhöz kapcsolt hibaüzenet RecroDict szótárból
                messages.AddError(RecroDict.Get(param.HttpContext, "Person.Validation", "FirstName"), RecroGrid.Alias2ClientName(param.RGProperties, "FirstName"));
            }
            if (string.IsNullOrEmpty(this.LastName))
            {
                messages.AddError(RecroDict.Get(param.HttpContext, "Person.Validation", "LastName"), RecroGrid.Alias2ClientName(param.RGProperties, "LastName"));
            }
            return messages.ErrorCount == 0;
        }
    }
  • Szerveroldali egyéni osztály

    RecroGridDBC_TYPE, _DCTYPE alaposztályból származó egyéni osztályban (az interface megvalósítástól eltérően), azokat az műveleteket javasolt elhelyezni, amik más entitástól vagy külső adatoktól függenek, illetve csak az adott RecroGrid működéséhez kellenek. Külső szervizek vagy modulok hívásának elhelyezése is itt javasolt.

  • Kliensoldali egyéni osztály

    Kliensoldalon is javasolt ellenőrzéseket elhelyezni, amik a hibák nagyobb részét képesek kiszűrni, így növelhető az alkalmazás teljesítménye, de javasolt minden ellenőrzés szerveroldali megvalósítása is. Ide kerülhetnek az egyéni vizuális effektek, vagy biztonsági kockázatot nem jelentő (általában a felhasználó szempontjából kényelmi) ellenőrzési funkciók.

Szerveroldali megvalósítások

Új felvitel

Egy adat új felvitelének folyamata a kliensoldalról indul, az entitás és a környezet meghatározásával, majd az alábbi szerveroldali folyamatok kerülnek végrehajtásra, illetve a felsorolt belépési pontokra van lehetőség:

  1. Az OnInitNewRec(TEntity, RecroGridRGServiceParams) metódus segítségével az új entitás inicializálása van lehetőség. Paraméterben az új entitás és a kliensről érkező környezet kerül átadásra. Alapértelmezés szerint az entitás esetleges parent-hez kapcsolása, és ha az entitás megvalósította az IRecroGridInitNew interface-t, akkor a RecroGridInitNew(IRGDataContext, RGClientParam) metódusa is végrehajtásra kerül.

    C#
    protected override void OnInitNewRec(ref Person newRec, RGServiceParams param)
    {
        //IRecroGridInitNew végrehajtás
        base.OnInitNewRec(ref newRec, param);
    }
  2. Az inicializált új entitás és az aktuális RecroGrid-hez tartozó template alapján elkészül a HTML kimenet, amit a kliens megjelenít a felhasználónak szerkesztésre. Miután felhasználó jóváhagyja új felvitelét a kliensoldali ellenőrzéseket követően a rendszer visszaküldi a rögzített adatokat szerveroldalra.

  3. Szerveroldalon ismételten lefut az OnInitNewRec(TEntity, RecroGridRGServiceParams) metódus, és ha a jogosultságok az új felvitelt lehetővé teszik, akkor elindul egy SQL tranzakció és az OnDataExchange(UTP, DictionaryString, Object) metódus feltölti a rekordot a kliensről kapott adatokkal.

    C#
    protected override void OnDataExchange(Person dataRec, Dictionary<string, object> clientData, RGUIMessages messages)
    {
        //dataRec feltöltése a kliensről kapott adatokkal
        base.OnDataExchange(dataRec, clientData, messages);
    
        object data;
        if (clientData.TryGetValue("MyCustomValue", out data))
        {
            //kliensoldalról visszakapott egyéni adat
        }
    }
  4. OnUpdateRec(RecroTrack, UTP, RGClientParam, RGUIMessages) virtuális metódus felülírásával szerveroldali ellenőrzések és egyéni adatmódosítások hajthatók végre. Alapértelmezés szerint ha az entitás megvalósította az IRecroGridUpdate interface-t, akkor a RecroGridUpdate(IRGDataContext, RGClientParam, RGUIMessages) metódusa is végrehajtásra kerül. A szerveroldali ellenőrzéseket itt javasolt elvégezni, az esetleges hibaüzeneteket mezőkhöz kapcsolva vissza lehet adni. Ha a visszatérési érték True, akkor a tranzakció jóváhagyásra kerül, az esetleges figyelmeztető üzenetek megjelenítésre kerülnek, ellenkező esetben a tranzakció visszavonásra kerül és megjelennek a hibaüzenetek.

    C#
    protected override bool OnUpdateRec(RecroTrack tracking, Person dataRec, RGClientParam param, RGUIMessages messages)
    {
        if (param.IsNewEntity)
        {
            //új felvitel egyéni kiegészítés
        }
        else
        {
            //módosítás egyéni kiegészítés
        }
    
        //IRecroGridUpdate végrehajtás
        if (!base.OnUpdateRec(tracking, dataRec, param, messages))
        {
            return false;
        }
    
        if (string.IsNullOrEmpty(dataRec.FirstName))
        {
            //mezőhöz kapcsolt hibaüzenet RecroDict szótárból
            messages.AddError(RecroDict.Get(this.RecroGridContext.HttpContext, "Person.Validation", "FirstName"), this.Alias2ClientName("FirstName"));
        }
        if (!ExternalValidation(dataRec))
        {
            messages.AddError("Egyéni dialog hibaüzenet!");
        }
        return messages.ErrorCount == 0;
    }

Módosítás

A módosítás folyamata az új felviteltől két ponton tér el. Módosítás esetén az OnInitNewRec metódus nem kerül meghívásra, illetve a kulcs módosítása esetén az SQL tranzakció indítását követően a kulcs direkt SQL update segítségével módosításra kerül.

Törlés

Törlés esetén az OnDeleteRec(RecroTrack, TEntity, RGClientParam, RGUIMessages) metódus kerül végrehajtásra, ami alapértelmezés szerint, ha az entitás megvalósította az IRecroGridDelete interface-t, akkor a RecroGridDelete(IRGDataContext, RGClientParam, RGUIMessages) metódusa is végrehajtásra kerül. Kliensoldalon a felhasználó számára figyelmeztető üzenet jelenik meg. A rekord könnyebb azonosítására az RGO_FriendlyKey opciós paraméterben azon mezők ClientName azonosítóját lehet felsorolni, amik értékei az üzenetben megjelennek.

Caution note Caution

Az SQL tranzakció csak a RecroGridETEntity alaposztályból származtatott osztályok esetén indul automatikusan, egyébként egyénileg kell kezelni, illetve ez igaz a RecroTrack használatára is, ami az eltérő paraméterekből is látszik.

Ellenőrzések

Kliensoldal

Ellenőrzéseket javasolt már kliensoldalon is elhelyezni, amiben a kliensoldali osztály létrehozása nélkül, a következő opciós paraméterek segítenek.

  • RGO_Nullable opciós beállításban false paraméter esetén a mezőt kötelező kitölteni, ellenkező esetben a \NULL megadásával lehet null értéket beállítani.

  • RGO_MaxLength opciós paraméter meghatározza egy karakteres mező maximális hosszát a kliensoldali bevitel esetén.

  • RGO_JSValidator opciós beállításban egy kliensoldali JavaScript ellenőrzést lehet végrehajtani. A függvény egy args nevű paramétert kap, ami tartalmaz egy ClientRec tömböt az adatrögzítés során elérhető összes mező definíciójával és értékével. Az egyes mezőkre a ClientName használatával lehet hivatkozni, ami megadja a RecroGridColumnDefs adatokat és a Value-ban az oszlop értékét. Az aktuális mező értéke közvetlenül az args.Value-ból is kinyerhető. Hiba esetén a visszatérési érték false az args.Error-ban pedig a hibaüzenetet lehet megadni.

  • RGO_NoKeyUpdate opciós paraméter beállításával letiltható a kulcs módosítása.

JavaScript
//RegExp érték vizsgálat
var patt = new RegExp('^[\$0-9a-zA-Z]+$');
if (!patt.test(args.Value)) {
    args.Error = 'A mező értéke csak betűket és számokat tartalmazhat!';
    return false;
}

//Másik mezőtől függés
if (args.Value < args.ClientRec['rg-col-112'].Value) {
    //args.Error = get_RecroDictStr('Scope', 'Id');// Üzenet RecroDict szótárból
    args.Error = 'Az AB nem lehet kisebb mint a XY!';
    return false;
}

Szerveroldal

A szerveroldali ellenőrzések az előző szekcióban bemutatott interfészek és virtuális metódusok használatával végezhető. A RGUIMessages paraméterben hiba és figyelmeztető üzeneteket lehet megadni, ami kliensoldalon a adott mezőhöz kapcsoltan megjelenik.

See Also

Other Resources