Fejlesztői kézikönyv 6.4

XML Referencia 6.4

Effector Studio 6.4 összefoglaló

Effector Studio 6.4 kézikönyv

Effector WebAPI 6.4 kézikönyv

Fejlesztői kézikönyv 6.3

XML Referencia 6.3

Effector Studio 6.3 összefoglaló

Effector Studio 6.3 kézikönyv

XML Referencia 6.2

Effector Studio 3.2 összefoglaló

Effector Studio 3.2 kézikönyv

Data definició és a filterek kezelése

Az adatdefiníciós objektumok (DataDefinition) átfogják a rendszer teljes működését. Gyakorlatilag minden megjelenítő objektum mögött ott állnak. Segítségükkel megteremthető a kapcsolat a két legkülső réteg, a UI és az adatbázis között. Természetesen több más rétegen keresztül. Az adatdefiníciós objektumok képesek felhasználni az üzleti objektumokat a megjelenítő komponensek kiszolgálása közben a különböző adatbázis műveletek elvégzéséhez. Például a mentést a BusinessObject végzi inplace editing esetében is. Azonban a DataDefinition fő feladata, hogy adatforrásként funkcionáljon a legtöbb megjelenítő számára, és kezelje a számára felajánlott filtereket a felhasználói interakciók során.

Elhelyezkedése a rendszerben

Fizikai helye az XML csomag DataDefinition könyvtárában van.

Közvetlenül sosem jelenik meg a DataDefinition a rendszerben, azonban számos kapcsolódási ponttal rendelkezik a különböző megjelenítőkhöz:

DataDefinition a rendszerben

Elérhető funkciók:

  • Adatforrás definíció
  • Oszlopok beállítása
  • Filterek meghatározása és összekapcsolása

Példa

<DataDefinition xmlns="http://effector.hu/schema/ns/datadefinition">
    <SqlSelect>
        <![CDATA[    
            FROM Project p WITH(NOLOCK)    
            WHERE p.Deleted=0 AND 1=1    
        ]]>
    </SqlSelect>
    <Columns>
        <Column name="ProjectID">
            <Definition>
                <![CDATA[p.ProjectID]]>
            </Definition>
            <OutFilter>
                <Alias>Project_ID</Alias>
                <Type>Out</Type>
            </OutFilter>
            <IdColumn>ProjectID</IdColumn>
        </Column>
        <Column name="ObjectType">
            <Definition>
                <![CDATA[p.ObjectType]]>
            </Definition>
            <OutFilter>
                <Alias>Template_Project</Alias>
                <Type>Param</Type>
            </OutFilter>
            <IdColumn>ProjectID</IdColumn>
        </Column>
        <Column name="CompanyID">
            <Definition>
                <![CDATA[p.CompanyID]]>
            </Definition>
            <OutFilter>
                <Alias>Company_ID</Alias>
                <Type>Param</Type>
            </OutFilter>
            <IdColumn>ProjectID</IdColumn>
        </Column>
        <Column name="Name">
            <Definition>
                <![CDATA[p.Name]]>
            </Definition>
            <IdColumn>ProjectID</IdColumn>
        </Column>
        <Column name="ProjectName">
            <Definition>
                <![CDATA[p.Name AS ProjectName]]>
            </Definition>
            <IdColumn>ProjectID</IdColumn>
        </Column>
    </Columns>
    <InFilters>
        <InFilter>
            <Alias>Project_ID</Alias>
            <ConnectedColumnDefinition>p.ProjectID</ConnectedColumnDefinition>
        </InFilter>
    </InFilters>
</DataDefinition>

Adatforrás definíció

Az adatforrás beállítását az SqlSelect node segítségével tehetjük meg. Ez a node alapesetben egy SQL mondatrészletet tartalmaz az oszlopok meghatározás nélkül. Az oszlopok kitöltését a DataDefinition fogja elvégezni a /DataDefinition/Columns kollekcióban található Column elemek alapján. Ez az SQL mondat határozza meg azt, hogy milyen adatokat tölt be az adatbázisból az adott objektum. Ezek az adatok fognak az összerendelt megjelenítő komponensnek adatforrásául szolgálni.

    <SqlSelect>
        <![CDATA[    
            FROM Project p WITH(NOLOCK)    
            WHERE p.Deleted=0 AND 1=1    
        ]]>
    </SqlSelect>

Felhasználható attribútumok:

  • Lehetőség van tárolt eljárás futtatására is adatforrásként. Ekkor a type attribútumot kell StoredProcedure-ra, valamint az SqlSelect node értékét a tárolt eljárás nevére állítani. Alapértelmezett értéke Select.
  • A distinct attribútum megadásával kapcsolható be az SQL szerver distinct funkciója. Értéke lehet true vagy false. Alapértelmezett értéke false.

Fontos!

Mi az 1=1 a példában? Az 1=1 kifejezést minden DataDefinition WHERE részébe ki kell írni. Erre azért van szükség, mert a rendszer ezt a karakterláncot cseréli le a Filterek, PSearchök és más szűrésre alkalmas elemek által szolgáltatott feltételekre.

DLL mint forrás

Amennyiben az adatforrás egy DLL-ben megírt programkód eredménye, akkor az SqlSelect node helyett a Module node-ot kell használni.

<Module className="Nevter.Osztaly" action="">[##LocalProgramPath##]\Nevter.dll</Module>

A fenti példában megadott Osztaly nevű osztálynak meg kell valósítania az IDataDefinitionModule interfészt.

Oszlopok beállítása

Oszlopok definícióját a /DataDefinition/Columns kollekció Column elemeinek megadásával tehetjük meg. Minden Column node tartalmaz egy name attribútumot, amely a DataDefinitionben az oszlop azonosító szerepét játssza. Később a megjelenítők használatakor ez fogja a kapcsolatot megvalósítani a két oszlopdefiníció között. Vagy az SQL oszlop nevével egyezik meg, vagy az "alias"-ként használt karakterlánccal. Aliast az as kulcsszóval definiálhatunk. Használatát a következő példa szemlélteti:

<Definition>Count(e.EventId) as EventDB</Definition>

A definícióban felhasználható node-ok a következők:

  • A BusinessObject node azt határozza meg, hogy az oszlop milyen üzleti objektumhoz tartozik. Alapvető szerepe van a táblázatban elérhető inplace edit funkció működésében.
  • A Definition node tartalmazza az oszlop SQL definícióját. Ennek ugyanolyan szintaktikai szabályoknak kell megfelelnie, mint egy SQL-es oszlop kifejezésnek. Nem csak oszlopnevet, hanem bonyolultabb allekérdezéséket is tartalmazhat, de ebben az esetben az eredményt egy "alias" névvel kell ellátni.

       <Column name="EventDB">
           <BusinessObject>BusinessObjectProjec</BusinessObject>
           <Definition>Count(e.EventId) as EventDB</Definition>
       </Column>
    

Hivatkozás másik oszlopra

A Column node IsComposite nevű, logikai értéket felvehető opcionális node-jának beállításával jelezhetjük a rendszernek, hogy az oszlop definíciójában a DataDefinition egy másik oszlopára (illetve annak értékére) fogunk hivatkozni. A behelyettesítés az adatlekérdezés után történik meg. Ha hivatkozás a következő formátumban tehető meg: [##Column.Mezőnév##].

<Column name="ColumnA">
    <Definition>ColumnA</Definition>
</Column>
<Column name="ColumnB">
    <IsComposite>true</IsComposite>
    <Definition>'Az A oszlop értéke: [##Column.ColumnA##]' AS ColumnB</Definition>
</Column>

FileInterface használata fájlok letöltésére

Egy közös FileInterface nevű szolgáltatás kezeli a fájlműveleteket. Ha például szeretnénk letölteni egy dokumentumot egy linkre kattintva, akkor a következő paraméterezést kell használnunk:

<Column name="FileInterfaceID">
    <UseFileInterface>true</UseFileInterface>
    <Definition><![CDATA[CAST(d.DocumentID  AS VARCHAR(20)) as FileInterfaceID]]></Definition>
    <IdColumn>DocumentID</IdColumn>
    <OutFilter>
        <Type>Param</Type>
        <Alias>FileInterfaceID</Alias>
    </OutFilter>
</Column>
<Column name="FileLink">
    <IsComposite>true</IsComposite>
    <Definition><![CDATA['<a href="FileInterface?p=[##Column.FileInterfaceID##]&a=download" target="_blank">' + ISNULL(d.RenamedFilename,'') + '</a>' AS FileLink]]></Definition>
    <IdColumn>DocumentID</IdColumn>
</Column>

A FileInterfaceID nevű DataDefinition columnban megadjuk a fájl Document táblabeli egyedi azonosítóját. A rendszerrel a UseFileInterface nevű node true értékre állításával közöljük, hogy az adott dokumentumhoz generáljon egy egyedi kulcsot. Ez átadódik a FileLink nevű DataDefinition columnnak azáltal, hogy az IsComposite node true-ra van állítva és a definíciójában hivatkozunk a FileInterfaceID nevű oszlopra.

Filterek meghatározása és összekapcsolása

A Filter fogalma a rendszerben, mint azt korábban említettük, a panelek és képernyők közötti kommunikációt megvalósító struktúrát, mechanizmust jelenti. Paraméterezése szempontjából kulcsfontosságú szerepet kap a DataDefinition. A megjelenítők innen, a megjelenítő definíciós fájlból tudják, hogy az alattuk elhelyezkedő réteg milyen filtereket képes kezelni ki- és bemenetként.

Kommunikáció(Filterek)

Minden filternek van típusa és neve (Alias). Ezek alapján értelmezi a rendszer az összekapcsolások során végbemenő kommunikációt. A filtereket lehet értelmezni és feldolgozni, vagy esetenként csak átereszteni és továbbítani a következő komponens felé. Ezeket a viselkedési módokat paraméterezéssel könnyen változtathatjuk.

  • Alias: A filter egyik fontos tulajdonsága az Alias neve. Ezen a néven azonosítható az adott filter a panelek és képernyők közötti kommunikációban, valamint ez alapján juthatunk hozzá a hordozott értékhez is (Filter hivatkozás).
  • Típusa: A filterek Out vagy Param típusúak lehetnek.
    • Out típusú filterből mindig csak egy lehet aktív.
    • Param típusú filterek gyakran vesznek részt az EditFormon egy-egy kontroll alapértelmezett érték szabályának kiértékelésében vagy valamilyen más szabályban. A Template_ Alias névvel kezdődő filtereknek speciális jelentése van. Erről bővebben később ejtünk szót.

Filterek paraméterezése

A filterek paraméterezéséhez több helyen kell beállításokat eszközölnünk.

Először is el kell döntenünk, hogy az adott oszlop egy azonosító-e. Ha azonosító, akkor paraméterezhető hozzá egy filter, amely segítségével az értékét elküldhetjük a többi komponensnek. Ha nem azonosító jellegű az adat, akkor definiálhatunk hozzá egy azonosító mezőt. Ezt a definíciót az Column/IdColumn node segítségével tudjuk megtenni.

  • Az IdColumn node által meghatározott DataDefinition oszlopot azonosítóként kezeljük, és az itt megadott oszlop fog Out filter típusként szerepelni a kimenő filterek között. A többi oszlop IdColumnja is szerepelni fog, de csak mint paraméter.
  • Az OutFilter node segítségével állíthatjuk be a kimenő filter Alias nevét, valamint a Type node segítségével a korábban említett típusát.

       <OutFilter>
           <Type>Out</Type>
           <Alias>Company_ID</Alias>
       </OutFilter>
    

Példa

Az alábbi példa egy megfelelően felparaméterezett outfiltert mutat be. Ebben az esetben az oszlop saját maga is egy azonosítót reprezentál, és ezt az azonosítót fogja kimenő filterként használni a megfelelő felhasználói interakció során (általában oszlopra kattintás).

<Column name="CompanyID">
    <BusinessObject>BusinessObjectCompany</BusinessObject>
    <Definition>c.CompanyID</Definition>
    <IdColumn>CompanyID</IdColumn>
    <OutFilter>
        <Type>Out</Type>
        <Alias>Company_ID</Alias>
    </OutFilter>
</Column>
<Column name="CompanyName">
    <Definition>c.Name AS CompanyName</Definition>
    <IdColumn>CompanyID</IdColumn>
</Column>

Most, hogy rendelkezünk kimenő filterekkel, megtehetjük a bejövő filterek beállítását is. Ezek azok a filterek, amelyeket a DataDefinitiont használó megjelenítők értelmezni tudnak majd a használat során.

A bejövő filtereket a /DataDefinition/InFilters kollekció InFilter node-jai segítségével állíthatjuk be. Az itt felsorolt bejövő szűrők fogják a DataDefinition által meghatározott eredménysorokat leszűrni. Itt általában egy tábla egyedi azonosítóját várjuk. Az itt felsorolt filterek segítségével előállított WHERE feltételek fognak bekerülni a lekérdezésben található 1=1 kifejezés helyére.

<InFilters>
    <InFilter>
        <Alias>Company_ID</Alias>
        <ConnectedColumnDefinition>c.CompanyID</ConnectedColumnDefinition>
    </InFilter>
    <InFilter>
        <Alias>Created_By_ID</Alias>
        <ConnectedColumnDefinition>c.CreatedbyID</ConnectedColumnDefinition>
    </InFilter>
</InFilters>
  • Az Alias node a bejövő szűrő nevét határozza meg. Az ilyen nevű Out típusú paramétert fogja tudni feldolgozni a megjelenítőnk, ez alapján fogja keresni a megfelelő filtereket a bejövő szűrőben.
  • A ConnectedColumnDefinition node teremt kapcsolatot a bejövő szűrők és a DataDefinition oszlopai között. Itt a Definition-ben szereplő értéket kell megadni. Ez alapján fogja szűrni a lekérdezést a DataDefinition.

Lehetőségünk van beállítani egy állandó továbbítási listát is, aminek eredményeképp a felvett aliasszal érkező bejövő szűrők továbbítva lesznek a kimenő szűrők közé.

<ForwardedFilters>
    <ForwardedFilter>
        <AsType>Param</AsType>
        <Alias>Company_ID</Alias>
    </ForwardedFilter>
    <ForwardedFilter>
        <AsType>Param</AsType>
        <Alias>Project_ID</Alias>
    </ForwardedFilter>
</ForwardedFilters>

Az Alias node értéke határozza meg az alias nevet, az AsType node, hogy milyen típussal kerüljenek be a kimenő szűrőbe. Out típusú filter csak akkor kerülhet Out-ként továbbításra, ha nincs saját Out típusú filter, ha van, akkor Param-ként kerül továbbításra.

A Template_* nevű filterek speciálisak, ezek hordozzák a kiválasztott üzleti objektum altípusát. Ha a felhozni kívánt szerkesztő képernyőn származtatott BusinessObject jelenik meg, akkor egy ilyen filter határozza meg, hogy melyik altípussal kell megnyitni az adott elemet szerkesztésre. (Például BusinessObjectProjectInfo esetén a Template_Project filterben fog az Info érték szerepelni.)

  • Legutóbb frissítve: 9 hét 6 napja
  • Effector