Általános működési leírás

Adatbázis leírás

Rendszer architektúra

Fejlesztői kézikönyv 6.2

XML Referencia 6.2

Effector Studio 3.2 összefoglaló

Effector Studio 3.2 kézikönyv

Fejlesztői kézikönyv 5.5

XML referencia 5.5

Effector Studio 2.0 kézikönyv

Effector Studio 2.0 összefoglaló

Táblazatok és Kontroll Panel Kontrollok 6.2

Az első megjelenítő mellyel foglalkozunk a táblázatos megjelenítő, azaz a DisplayDefinition és a hozzá tartozó altípusok. Mint azt korábban már említettük a rendszerben több táblázatra alapuló megjelenítő objektum is rendelkezésünkre áll. Ezek valamennyien egy DisplayDefinition-ből származnak, így a lényegi különbséget a beállított HTML kód részlet jelenti. Később részletesen áttekintjük, miről is van szó.

A táblázatos megjelenítők önmagukban csak felület leíróként szolgálnak, ezért kapcsolódik egy adat definíciós fájl is mindegyik DataDefinition-höz. Ezt a fájlt DataDefinition-nek hívjuk. A DataDefinition-ök az adatforrást határozzák meg a különböző megjelenítők számára. Mind az adat definíció, mind a megjelenítő definíciója újra felhasználható.

Elhelyezkedése a rendszerben

Fizikai helye az XML csomag DisplayDefinition könyvtárában van. A fájlok elnevezésére itt is van megkötés. A fájl nevének a DisplayDefinition{0}.xml mintára kell illeszkednie, ahol a {0} paraméter a DisplayDefinition egyedi azonosítója. A táblázatok mint megjelenítők mindig egy-egy komponensbe/komponens fülbe ágyazva jelennek meg.

Táblázatok a rendszerben

A fentieknek megfelelően mindenhol, ahol megjelenítők szerepelhetnek, szerepelhet DisplayDefinition is. Kapcsolata - a beágyazás miatt - a komponensre szorítkozik.

Altípusai

Mint azt fent említettük, a DisplayDefinition mint megjelenítő többféleképp is megjelenhet a rendszerben. Az alábbi altípusokat mind egy-egy leíróban állíthatjuk be. Ezek az altípusok a következők lehetnek:

  • Table: Táblázatos megjelenítő, szűrőkkel és exporttal, valamint összegző sor megjelenítésére csak ebben az altípusban van lehetőség.
  • TransposedTable: Elforgatott táblázatos megjelenítő
  • Card: Az adatok soronként egy kártyán jelennek meg, amelyek mérete alapértelmezés szerint kötött és azonos. Az Effector ezeket a kártyákat amíg kifér vízszintesen egymás mellé helyezi, ha már nem fér el, új sort kezd. A kártyákat lehet csoportosítani is.
  • CardMatrix: Az adatok mátrix szerű megjelenítéséhez használt nézet.
  • Tree: Fa szerkezet megjelenítésére használható. Legtöbbször folyamatok állapotának kirajzolására használt altípus.
  • Calendar: Naptár megjelenítő, mely a megszokott feladatnaptárak napi nézetéhez hasonlít, szűrők segítségével beállítható, hogy hány nap látszódjon.
  • SectionList: A CardViewhoz hasonló megjelenítő, ebben az adatok kizárólag a rendezésnek megfelelő sorrendben jelenhetnek meg. Az egyes adatsorok megjelenítése egymás alatt, térköz nélkül, folytonosan történik. Kiválóan alkalmas az adatokból HTML-like oldal generálására.

Az altípust a ViewType illetve AlternateViewType beállításokban lehet megadni. Az elsődleges megjelenítést a ViewType adja meg. Bizonyos altipsukohoz AlternateViewType adható meg. Ebben az esetben a felületen megjelenik egy ikon, amely megnyomására lehet a két altípus között választani.

Elérhető funkciók

  • Táblázatos nézet beállítása
  • Rekordok egyedi azonosítójának beállítása
  • Látható/kezelhető oszlopok meghatározása
  • Eszköztár láthatóságának beállítása
  • Eszköztáron található funkciók láthatóságának beállítása
  • Szűrők és akció gombok definiálása
  • Dinamikus táblázat használata
  • Altípusok és típus függő funkciók beállítása
  • Link-elt objektumok beállítása
  • Inplace editing felparaméterezése

Példa:

<DisplayDefinition xmlns="http://effector.hu/schema/ns/displaydefinition">
    <Caption>Emberek</Caption>
    <DataDefinition>DataDefinitionPeoples</DataDefinition>
    <OrderBy>Name</OrderBy>
    <UniqueIDColumn>PeopleID</UniqueIDColumn>
    <UniqueBusinessObject>BusinessObjectPeople</UniqueBusinessObject>
    <OutFilterColumn>PeopleID</OutFilterColumn>
    <ViewType>Table</ViewType>
    <ToolbarOptions>
        <IsCardGroupLayoutChangeEnabled>false</IsCardGroupLayoutChangeEnabled>
    </ToolbarOptions>
    <TableViewOptions />
    <Columns>
        <Column name="PeopleID">
            <Visible type="Constant" return="boolean" default="false">false</Visible>
        </Column>
        <Column name="CompanyID">
            <Visible type="Constant" return="boolean" default="false">false</Visible>
        </Column>
        <Column name="Title">
            <Caption>Megsz.</Caption>
            <Visible type="Constant" return="boolean" default="false">false</Visible>
        </Column>
        <Column name="Name">
            <Caption>Név</Caption>
        </Column>
        <Column name="CompanyName">
            <Caption>Cég neve</Caption>
        </Column>
        <Column name="Jobtitle">
            <Caption>Beosztás</Caption>
        </Column>
        <Column name="Fax">
            <Caption>Fax</Caption>
        </Column>
        <Column name="Phone">
            <Caption>Tel.</Caption>
        </Column>
        <Column name="Mobile">
            <Caption>Mobil</Caption>
        </Column>
        <Column name="Email">
            <Caption>E-Mail</Caption>
        </Column>
        <Column name="City">
            <Caption>Város</Caption>
        </Column>
        <Column name="Zip">
            <Caption>Irsz.</Caption>
        </Column>
        <Column name="Street">
            <Caption>Cím</Caption>
        </Column>
        <Column name="IsGroup">
            <Caption>Csoport?</Caption>
        </Column>
        <Column name="ReportsTo">
            <Visible type="Constant" return="boolean" default="false">false</Visible>
        </Column>
        <Column name="ReportsToName">
            <Caption>Felettes</Caption>
        </Column>
        <Column name="CreatedbyID">
            <Visible type="Constant" return="boolean" default="false">false</Visible>
        </Column>
        <Column name="CreatedBy">
            <Caption>Létrehozó</Caption>
        </Column>
        <Column name="IsResource">
            <Visible type="Constant" return="boolean" default="false">false</Visible>
        </Column>
        <Column name="Active">
            <Visible type="Constant" return="boolean" default="false">false</Visible>
        </Column>
        <Column name="PrivateContact">
            <Visible type="Constant" return="boolean" default="false">false</Visible>
        </Column>
        <Column name="Department">
            <Visible type="Constant" return="boolean" default="false">false</Visible>
        </Column>
    </Columns>
    <ControlPanel>
        <ManualSearchTriggering>true</ManualSearchTriggering>
        <Controls>
            <Control>
                <!-- <DefaultValue type="Constant" return="string" default="">[##Session.CompanyName##]</DefaultValue> -->
                <Name>CompanyText</Name>
                <Type>TextSearch</Type>
                <Caption>Cég neve</Caption>
                <ConnectedColumnDefinition>c.Name</ConnectedColumnDefinition>
                <Operator>like%</Operator>
                <SessionValue type="Constant" return="string" default="">[##Session.CompanyName##]</SessionValue>
            </Control>
            <Control>
                <Name>PeopleText</Name>
                <Type>TextSearch</Type>
                <Caption>Név</Caption>
                <ConnectedColumnDefinition>pe.Name</ConnectedColumnDefinition>
                <Operator>%like%</Operator>
            </Control>
            <Control>
                <Name>NewPeople</Name>
                <Type>NewObjectButton</Type>
                <Caption>Új</Caption>
                <ReferencedMinorMenu>MMExample</ReferencedMinorMenu>
                <Screen>ScreenPeople</Screen>
                <BusinessObject>BusinessObjectPeople</BusinessObject>
            </Control>
        </Controls>
    </ControlPanel>
    <Links>
        <Link>
            <ColumnName>CompanyName</ColumnName>
            <Screen>ScreenCompany</Screen>
            <ReferencedMinorMenu>MMExample</ReferencedMinorMenu>
        </Link>
        <Link>
            <ColumnName>Name</ColumnName>
            <Screen>ScreenPeople</Screen>
            <ReferencedMinorMenu>MMExample</ReferencedMinorMenu>
        </Link>
    </Links>
</DisplayDefinition>

Nem altipushoz tartozó beállítások

A gyökér elemben található egyszerű nodeok segítségével a következőket lehet beállítani:

  • A táblázatos megjelenítő címkéje, jelenleg nincs használva a felületen, az Effector Studio-ban a fájlnév helyett ez a szöveg jelenik meg (általában), kitöltése nem kötelező. Példa: <Caption>Felhasználók</Caption>
  • A DataDefinition nodeban kell beállítani a táblázat adatforrását. A referenciát a DataDefinition azonosítójával kell létrehozni: <DataDefinition>DataDefinitionBaseUsers</DataDefinition>

  • PeopleID
  • Az OrderBy node az adatok kezdeti rendezéséért felel, értéke egy oszlop azonosítóját (az oszlop definíció name attribútuma) tartalmazza. A rendezés irányát is megadhatjuk itt, a direction attribútum beállításával. A direction két értéket vehet fel: Asc és Desc. Működésük megfelel az adatbázis kezelőknél alkalmazott rendezésnek.
  • A komponensek közötti kommunikáció megköveteli az OutFilterColumn node beállítását. Értéke a kommunikációban elsődlegesen résztvevő oszlop azonosítóját tartalmazza. A megjelenítőben egy sorra (egyes altípusok esetén a rekordot reprezentáló elemre) kattintva aktivizálódik a kommunikáció és az itt meghatározott mező értéke kerül át az összekapcsolt komponensekhez, mint bemenő szűrő paraméter. A komponensek ezt értelmezik, és szükség esetén reagálnak rá.
  • Az Automatikus frissítést az AutoRefreshInterval nodeban beállított értékkel szabályozhatjuk. Értéke percben értendő, a node hiánya, vagy nullára állítása esetén az automatikus frissítés funkció le lesz tiltva.
  • A táblázatos megjelenítők támogatják a lapozást is, ennek beállítására a PageSize és az AlternatePageSize node-ok szolgálnak. A PageSize node-dal állíthatjuk be a lapméretet, vagyis hogy hány sort töltsön le az Effector egy odalra. Alapértelmezett értéke 100. Ha az értéke -1, akkor minden sort betölt az Effector, ugyanakkor ez a beállítás nem javasolt. Az AlternatePageSize beállítással lehet megadni, hogy a rekord számlálóra kattintva mekkora legyen a lapméret. Ha értéke -1, akkor minden sort betölt, ha értéke 0, akkor ki van kapcsolva a funkció. Az AlternatePageSize alapértelmezett értéke 0, vagyis a számlálóra kattintva nem történik semmi.
  • A IsToolbarVisible beállítással adhatjuk meg az eszköztár láthatóságát. Opcionális logikai kapcsoló, alapértelmezett értéke: true.
  • A rekordok egyedi azonosítójának beállítása

A RowIdentificationMethod segítségével megadhatjuk, hogy a kiválasztott rekordot mi alapján szeretnénk azonosítani. Két lehetséges értéke lehet:

  • GeneratedGUID: ekkor a rendszer minden sort egyedileg generált azonosító alapján azonosítja be. előny: egy sor biztosan kijelölhető hátrány: új rögzítés / refresh után mindenképpen az első sort fogja kijelölni.
  • UniqueIDColumnOrOutFilterColumn: a sor azonosítására a UniqueIDColumn node értékét veszi alapul, illetve az OutFilterColumn-ban megadott oszlopot veszi figyelembe a kijelöléskor előny: megjegyzi melyik sor volt kijelölve, illetve új felvitel után kiválasztja a sort (ha benne van a lekért oldalban) hátrány: egy azonosító több sort is jelenthet (paraméterezéstől függően jelöli ki helyesen a sorokat).

Eszköztáron található funkciók láthatóságának beállítása

A ToolbarOptions node fogja össze az eszköztár funkcióit ki/be kapcsoló beállításokat. Egyes eszköztár elemek csak bizonyos altípusok esetén jelennek meg. Altalánosságban elmondható, hogy ezek a beállítások true / false értéket vehetnek fel, alapértelmezett érték true. A lehetséges beállítások:

  • IsCardGroupLayoutChangeEnabled: Card megjelenítő esetén, a csoportosítás módját szabályozó gomb ki-/bekapcsolása
  • IsSelectionTypeTogglerVisible: többszörös kijelölés ki/be kapcsolása
  • IsCardGroupLayoutChangeEnabled: Card megjelenítő esetében ezzel a beállítással lehet szabályozni, hogy a felületen megjelenik vagy sem a csoportosítás orientációját módosító gomb.
  • IsRowNumberTogglerVisible: Table megjelenítő esetén a sorok sorszámozásának megjelenítését ki/be kapcsoló gomb elérhetőségét szabályozza.
  • IsOpenAllColumnsButtonVisible: Table megjelenítő esetén az oszlopok kinyitása gomb láthatóságának ki/be kapcsolása
  • IsToolsTogglerVisible: Table megjelenítő esetén az eszközök oszlop megjelenítését módosító gomb látható vagy sem.
  • IsGroupingEnabled: A csoportosítási szempont kiválasztó lenyíló lista látható-e az eszköztáron
  • TrashCanActionControl: Ezzel a beállítással kell megadni, hogy az eszköztáron megjelenő kuka ikonra kattintás melyik ControlPanel-en található Control (ami jellemzően DeleteObjectButton típusú) megnyomását váltja ki.
  • DefaultSelectionType: Alapértelmezett sorkijelölés (vagy kártya) módot ezzel a beállítással lehet megadni. Értékei: Single, Multiple. Alapértelmezett érték: Single.

Table altípushoz tartozó beállítások

A Table altípushoz tartozó beállításokat a TableViewOptions node fogja össze.

  • Az egyszerű szűrő elrejtésére vagy megjelenítésére a IsSimpleFilterEnabled node használható értéke egy egyszerű boolean True vagy False. A node hiánya esetén az egyszerű szűrők megjelennek.
  • Az IsRowNumberVisible beállítással lehet megadni, hogy megjelenjen a sorok sorszámát megjelenítő oszlop. Értéke lehet true vagy false. Alapértelemezett értéke: false.
  • Az IsMultilineRowsEnabled beállítással lehet bekapcsolni, hogy a sorok magassága különböző legyen a tartalomtól függően. A maxLineNumber attribútummal lehet megadni, hogy maximum mennyi sorra törhesse a rendszer a szöveget. A minLineNumber attribútummal lehet megadni hogy mennyi sornyi alapértelemezetten egy cella. A sormagasság számítást az oszlopok definiálásakor kell megadni a IsMultiline beállítással, a rendszer ezen oszlopok értékeit figyeli a sormagasság számítás során.
  • A HeaderHeight beállítással lehet megadni pixelben a fejléc magasságát. Például a két soros fejléchez 48-at kell adni értékül.
  • A GroupBy beállítással lehet megadni, hogy a táblázat sorai alapértelmezetten melyik oszlop szerint legyen csoportosítva. A direction attribútumban lehet magadni a csoportosítás irányát, értéke lehet Asc, Desc.
  • A IsPinningEnabled beállítással lehet szabályozni, hogy az oszlopok rögzítését lehetővé tevő lenyíló lista megjelenik vagy sem. Értéke lehet true vagy false. Az alapértelmezett érték: true vagyis megjelenik a lenyíló lista.
  • A IsEditToolVisible beállítással lehet megadni, hogy az eszközöket tartalmazó oszlopban megjelenjen vagy sem a ceruza ikon. A ceruza ikon tulajdon képpen az első Form-ot felhozó Link-en kattintást szimulál. Az automatikus kiválasztás a columnName attribútummal lehet felülbírálni, ebbe a beállításba annak az oszlopnak a nevét kell megadni, amelyre Link van defíniálva.

Példák:

`<IsEditToolVisible>true</IsEditToolVisible>`

vagy

`<IsEditToolVisible columnName="PeopleName">true</IsEditToolVisible>`
  • Az 'IsCardPreviewToolVisible' beállítással lehet megadni. hogy az eszközöket tartalmazó oszlopban jelenjen meg a kártyát megjelenítő "gomb" vagy sem. Csak akkor jelenik, meg, ha van Card ViewType vagy AlternateViewType definiálva.
  • Az IsDeleteToolVisible beállítással lehet megadni. hogy az eszközöket tartalmazó oszlopban jelenjen a törlést lehetővé tevő gomb meg vagy sem. Az actionControl attribútummal kell megadni annak a nyomógombnak a nevét, amely a törlés funkciót elvégzi (CotrolPanel-en definiált DeleteObjectButton-ról van szó).
  • A megjelenítő képes a táblázatban megjelenő oszlopkat csoportosítani. Ilyenkor az oszlop címkék felett megjelenik még egy fejléc sor, amelyben az oszlop csoportok vannak felsorolva. Az oszlop csoportokat a ColumnGroups node-al lehet definiálni.

Példa:

<ColumnGroups excludedColumnsGroupCaption="">
    <ColumnGroup name="cim_elotti">
        <Caption />
    </ColumnGroup>
    <ColumnGroup name="cim">
        <Caption>Cím</Caption>
    </ColumnGroup>
</ColumnGroups>

A példában létrehozunk egy felirat nélküli csoportot, amelyiket majd egy csoport követ, amelynek a felirata Cím lesz, és utána megjelenik a többi oszlop szintén felirat nélkül (excludedColumnsGroupCaption attribútum).

Az oszlop definiálásakor kell megadni, hogy az adott oszlop melyik csopotba tartozik.

  • A megjelenítő képes a táblázatban összegző sort (csoportosítás esetén csoportonként) is megjeleníteni. Az összegző sor definiálása a Summaries node-al összefogott beállításokon keresztül történik. Egy oszlopra egy beállítás adható meg. Egy beállítást a Summary node-al kell megadni. Ennek a node-nak
    • a type attribútumával kell megadni az aggregálás típusát, lehetséges értékei:
      • Sum: oszlop értékeinek összegzése
      • Average: oszlop értékeinek átlagolása
      • Count: oszlop értékeinek száma
      • Maximum: oszlop értékeinek maximuma
      • Minimum: oszlop értékeinek minimuma
      • Custom: tetszőleges szöveg megjelenítése a Column attribútumban megadott oszlop alatt. A szöveget a node értékeként kell megadni.
    • a column attribútummal kell megadni, hogy melyik oszlopra szeretnénk alkalmazni az aggregálást

Példa:

<Summaries>
    <Summary type="Custom" column="CustomerName">Összesen:</Summary>
    <Summary type="Sum" column="Salary"></Summary>
    <Summary type="Average" column="DailyWork"></Summary>
</Summaries>
  • A ColumnCaptions node fogja össze a dinamikus oszlop címke kigyűjtő funkció paramétereit. Dinamikus táblázat esetén az oszlopok fejléce alapértelmezés szerint az, amit a DataDefinition-ben definiált lekérdezés visszaad. Lehetőség van ezeknek a címkéknek a lecserélésére akár egy másik lekérdezés eredményével vagy fixen definiált értékekkel. A sourceType attribútummal lehet megadni, hogy milyen forrásról van szó. Ennek az attribútumnak az értéke lehet Database, XML. Az alapértelemezett érték Đatabase. Ha sourceType értéke Database akkor a Database node által összefogott beállításokat veszi figyelembe a rendszer, míg a másik esetben a FixedValues node alá tartozó beállításokat dolgozza fel a rendszer.

Példa Database-re:

<ColumnCaptions sourceType="Database">
    <Database>
        <SelectionString>
            SELECT Name, Caption FROM orn_ColumnCaptions WHERE DisplayDefinition = 'DisplayDefinitionDinamicReport'
        </SelectionString>
    </Database>
</ColumnCaptions>

Példa XML-re:

<ColumnCaptions sourceType="XML">
    <FixedValues>
        <Caption columnName='R001'>Rendelkezésre álló tételek (név)</Caption>
        <Caption columnName='R002'>Rendelkezésre álló tételek (ár)</Caption>
        <Caption columnName='STS6'>Megjegyzés</Caption>
    </FixedValues>
</ColumnCaptions>

Látható/kezelhető oszlopok meghatározása

A táblázatban látható oszlopok beállítását és definiálását a Columns kollekción keresztül érhetjük el a Column node-ok segítségével. Az itt felsorolt oszlopok lesznek definiálva a táblázatban.

<Column name="PeopleName">
    <Caption>Felhasználó</Caption>
    <Visible type="Constant" return="string" default="false">true</Visible>
</Column>
  • Minden oszlopnak rendelkeznie kell egy egyedi azonosítóval, amit a Column name attribútuma tartalmaz. Ez az azonosító egyben a DataDefinition-ben szereplő oszlop neve is.
  • Az egyes oszlopokhoz, azok adatainak megjelenítéséhez formázás is beállítható. A formázás a Format node segítségével állítható be. Például: ezres csoportosítás # ### vagy # ###,00
  • Az oszlop fejlécében megjelenő feliratot a Caption node megadásával állíthatjuk be. Hiánya esetén a Column node name attribútuma fog megjelenni (illetve a ColumnCaptions beállításban megadott érték).
  • A InplaceEditControl/Type node további lehetőséget biztosít az oszlopban megjelenő értékek alakítására. Értéke lehet: Date, DateTime, TextBox és ComboBox. Erről bővebben az inplace editing szakaszban lesz szó.
  • Width node segítségével az oszlopok szélessége állítható. Értékét pixelben kell megadni.
  • IsMultiline node beállításával lehetőség van több soros adat megjelenítésére is.
  • A DisallowGrouping beállítással lehet szabályozni, hogy az oszlopon a csoportosítás funkció használható-e. Alapértelemezett értéke false, tehát nincs letiltva a csoportosítási lehetőség.

    • A minden látható oszlop (nem dinamikus) (Visible szabály) részt vehet a csoportosításban.
    • Ha egy oszlop Visible értéke true és a DisallowGrouping értéke is true akkor az oszlop értékeire nem lehet csoportosítani.
    • Ha egy oszlop Visible értéke false és a DisallowGrouping értéke is false akkor az oszlop értékeire mégis lehet csoportosítani.
  • A DisallowSorting beállítással szabályozni, hogy az oszlopon a rendezés funkció használható-e. Alapértelemezett értéke false, tehát nincs letiltva a rendezési lehetőség.

    • A minden látható oszlop (nem dinamikus) (Visible szabály) részt vehet a rendezésben.
    • Ha egy oszlop Visible értéke true és a DisallowSorting értéke is true akkor az oszlopra nem lehet rendezni.
    • Ha egy oszlop Visible értéke false és a DisallowSorting értéke is false akkor az oszlopra mégis lehet rendezni.
  • A IsPinned lehet megadni, hogy az adott oszlop balra legyen rögzítve. Alapértelemezett érték: false.
  • A cellában megjelenő adat formázását a Format beállítással lehet megadni. A lehetséges értékek:

    • Auto: A rendszer automatikusan dönti el a formázást. Ez az alapértelemezett érték.
    • ThousandGrouped: A cellában található érték ezres csoportosítással történő megjelenítése. A precision attribútummal lehet megadni a tört rész számjegyeinek számát (alapértelmezett érték 0).
    • Date: A cellában levő időpont értéknek csak a dátum részét jeleníti meg a rendszer.
    • DateTime: A cellában levő időpont értéknek dátum és óra és perc részét jeleníti meg a rendszer.
    • DateTimeWithSeconds: A cellában levő időpont értéknek dátum és óra és perc és másodperc részét jeleníti meg a rendszer.

    • A HeaderCssClass beállítással lehet az oszlophoz tartozó fejlécet formázni, értéke a formázását leíró CSS osztály neve. Opcionális beállítás. A CSS osztályokat a delivery/gfx/style.css fájlban kell definiálni.
    • Lehetőség van az oszlop celláira formázást alkalmazni. A CellCssClassColumn beállításban egy DataDefinition XML-ben található oszlop nevét kell megadni, amely tartalmazza a cellára alkalmazni kívánt CSS osztály nevét. A CSS osztályokat a delivery/gfx/style.css fájlban kell definiálni.
    • A ColumnGroupName beállításban lehet megadni, hogy az oszlop amely oszlop csoport alá fog tartozni.

Az oszlopra alkalmazható szabályok a következők:

  • Visible: Láthatósági szabály
  • Readonly: Olvashatósági szabály. Jelenleg csak a táblázat altípussal működik együtt. Azt szabályozza, hogy a táblázatban arra az oszlopra a szerkesztés engedélyezett-e, vagy sem.

Inplace editing - Szerkesztés

A táblázatos nézetben lehetőség van cellák értékének szerkesztésére. A funkció engedélyezéséhez az InplaceEditControl node-ot kell definiálni. Ennek a node-nak a Type node-ja tartalmazza azt, hogy milyen beviteli mezővel lehet szerkeszteni az adott oszlop tartalmát. Jelenleg a TextBox, Date, DateTime és ComboBox típusok vannak támogatva. Ilyenkor a Column node-on belül egy ReadOnly RuleValueType-nak is szerepelni kell, aminek a kiértékelés utáni false értéke esetén lesz szerkeszthető az oszlop mezőinek a tartalma.

A szerkesztés folyamata a következő: A rendszer a DisplayDefinition oszlop neve alapján kikeresi a definíciót a DataDefinition-ben. A mentéshez pedig az IdColumn nodeban megadott oszlopot veszi alapul.

Lent egy komplex példát láthatunk a számlázandó oszlop szerkesztéséről:

  • Ügylet true false TextBox
  • p.Name BusinessObjectProject ProjectID

A felhasználó számára a "Ügylet" oszlopra kattintva megjelenik egy szövegbeviteli mező, ami maximum 300 karakter hosszú szöveget fogad el. A mentés pedig a BusinessObjectProject-el történik, az üzleti objektum azonosítója az adatbázisban a ProjectID oszlopban található a konfiguráció alapján (Ezt a Name oszlop IdColumn node-ja tartalmazza). Ez alapján a ProjectID-hoz tartozó "Name" mezőt fogja frissíteni a rendszer. A helyes működés érdekében a BusinessObject-et minden oszlopban be kell állítani, amit szerkeszthetővé szeretnénk tenni. Az alias-olt, és számított oszlopok nem menthetőek.

Megjegyzés!: Ha a Readonlyszabály értéke True akkor nem szerkeszthető a mező és a szerkesztést végző kontrol nem jelenik meg.

A különböző kontrollok paraméterezése

  • TextBox paraméterezése:
    • Többsoros beviteli mező megjelenítése a IsMultiline node segítségével lehetséges, megadható a Height node segítségével a megjelenítő magassága.
    • A FieldProperties node a beviteli mező által elfogadható értékeket szabályozza. A type attribútumban a típust adhatjuk meg. Jelenlegi értékkészlete a következő: System.String, System.Int16, System.Int32, System.Int64, System.Byte, System.Double lehet az értéke. A maximális hosszúságot (maxLength) és a null érték elfogadását (allowDBNull) szabályozó attribútumok csak System.String esetén vannak értelmezve.
    • A Mask segítségével maszkolhatjuk az adatot. Például: 99999999-9-99.

Példa:

<Column name="kocsi1">
    <Caption>1. kocsi</Caption>
    <DisallowGrouping>true</DisallowGrouping>
    <Format>ThousandGrouped</Format>
    <Readonly type="Constant" return="boolean" default="true">false</Readonly>
    <InplaceEditControl>
        <Type>TextBox</Type>
        <FieldProperties type="System.String" maxLength="300" allowDBNull="false" />
    </InplaceEditControl>
    </Column>
  • ComboBox paraméterezése:

Példa:

<Column name="helyettesitendo_jarmuid">
    <Visible type="Constant" return="boolean" default="false">false</Visible>
</Column>
<Column name="helyettesitendo">
    <Caption>Tervezett típus</Caption>
    <InplaceEditControl>
        <Type>ComboBox</Type>
        <KeyColumn>helyettesitendo_jarmuid</KeyColumn>
        <ComboDefinition>ComboJarmuTipusok</ComboDefinition>
    </InplaceEditControl>
    <Readonly type="Constant" return="boolean" default="false">false</Readonly>    
    <Width>200</Width>
</Column>

A korábban definiáltaktól kissé eltérő módon működik. Itt a felhasználó arra az oszlopra kattint, ami az értéket szövegesen mutatja, de a KeyColumn node-ban megadott oszlopba fogja menteni a kiválasztott elem azonosítóját, a BusinessObject és az id értéke itt is kiszámolódik, de ebben az esetben a KeyColumn-ban megadott oszlop lesz az érték helye.

Dinamikus táblázat használata

Dinamikus táblázatról akkor beszélhetünk, ha a /DisplayDefinition/IsDynamic node értéke true. Ebben az esetben a rendszer a DataDefinition-ból nyeri ki az összes rendelkezésre álló adatot, és az ott használt oszlop definíciókat felhasználva építi fel a megjelenítőt.

Bármilyen lekérdezés esetén használható, jelentősége abban rejlik, hogy dinamikus adatforrás esetén a rendszer automatikusan adaptálódik a beérkező rekordokhoz, így az oszlopok számossága is az adatforrás függvényében változhat.

Tipikus felhasználása például a naptári napok dinamikus megjelenítése egy táblázatban. Ekkor az adatbázisból egy transzponált adathalmazt kérdezünk le, ebben az esetben az egyes napok lesznek az oszlopok. Így szűréstől is függővé tehetjük a megjelenítést.

A DisplayDefinition xml fájlban ekkor is lehet definiálni oszlopokat, ilyenkor - ha a DataDefinition - visszaadja az adott nevű oszlopt a rendszer kiolvassa a többi oszlophoz rendelhető beállítást (Caption, Visible, formázások).

A pivot lekérdezések esetén az oszlopok neve általában egy id. Ilyenkor ColumnCaptions node-ban meg lehet adni az egyes azonosítókhoz tartozó értékeket. A ColumnCaptions node-nak lehet egy sourceType nevű attribútuma a következő értékekkel Database, XML.

  • Database: Ez az alapértelmezett, ilyenkor a ColumnCaptions/Database/SelectionString node-ban egy SQL mondatot kell megadni, amely visszaadja az egyes azonosítókhoz az oszlop címkét. Az SQL mondat "Name" és "Caption" oszlopokkal kell, hogy visszatérjen.
  • XML: Ebben az esetben a ColumnCaptions/FixedValues node egy Caption node-okból álló kollekció. A ColumnCaptions kollekcióban megjelenített Caption node-ok columnName attribútuma tartalmazza az azonosítót (oszlop nevet) a node értéke pedig a megjeleníteni kívánt feliratot.

Szűrők és akció gombok definiálása

A rendszerben ControlPanel Control-nak nevezzük azokat a beviteli mezőket és gombokat, amelyek a táblázatos megjelenítő felett kaptak helyet, és az adott táblázat adatait szűrik, vagy azon végeznek műveleteket.

ControlPanel Control-ok

Definíciójukra a DisplayDefinition/ControlPanel/Controls listában van lehetőségünk. Működésükre azonban hatással vannak a következő magasabb szinten beállítható értékek is:

  • DisplayDefinition/ControlPanel/ManualSearchTriggering: Ezzel be lehet állítani, hogy a táblázathoz tartozó szűrőmezők milyen esemény hatására indítsák el az adatlekérést a szervertől. A node true értéke esetén a felületen megjelenő 'szűrés' gombot kell megnyomni a beállított szűrések alkalmazásához. Ebben az esetben a szűrés érvényre juttatása manuálisan történik, vagyis nem minden egyes szűrő változtatásakor történik meg az adatlekérés.

<ManualSearchTriggering>true</ManualSearchTriggering>

A vezérlő (ControlPanel Control) beállításhoz felhasználható node-ok:

  • Name: A vezérlő egyedi azonosítója. Nem lehet egy DisplayDefinition-ön belül kettő azonos.
  • Type: ControlPanel Control vezérlő típusát határozza meg. A későbbiekben részletesen foglalkozunk ezen típusok beállításával. Lehetséges értékei:

    • ActionButton: Egy nyomógombot reprezentál, amely különböző funkciókkal rendelkezhet. Például:egy külső modul egy funkciójának meghívása, dokumentum generálása, tömeges adatmódosítás, stb...
    • TextSearch: Egysoros szövegszerkesztő vezérlő a szöveges kereséshez.
    • ComboSearch: Adott értéklistából történő szűrést valósít meg egy ComboBox vezérlővel.
    • BoolSearch: Bool típusú adatoszlopra tudunk vele szűrni. Három állapotú jelölőnégyzet vezérlővel.
    • DateSearch: Dátum szűrést tesz lehetővé, dátum-kiválasztó vezérlővel.
    • DateRange: Dátum intervallumszűrést valósít meg.
    • TagCloud: Címkefelhő szűrés.
    • QuerySearch: ComboBox-hoz hasonló szűrő, ám ilyenkor egy választó ablak ugrik fel (táblázatból lehet értéket választani)
    • NewObjectButton: Egy nyomógombot reprezentál, amellyel új elem rögzítését lehet elvégezni. Ilyenkor a Screen beállításban megadott képernyőt hozza fel az Effector (és az form azon a képernyőn új sort rögzít az adatbázisban)
    • DeleteObjectButton: Egy nyomógombot reprezentál, amellyel egy elem törlését lehet elvégezni. Ilyenkor a BusinessObject beállítás kötelező, a törlést az ott megadot BusinessObject fogja elvégezni.
    • SimpleLinkButton: Egy nyomógombot reprezentál, amely a Screen beállításban megadott képernyőt nyitja fel.
  • ConnectedColumnDefinition: A szűrőhöz kapcsolt oszlop. Itt egy érvényes SQL kifejezést/vagy SQL oszlopot kell megadni, amely a DataDefinition SQL mondatára alapszik, abba illeszkedik. Esetenként a tábla minősítés használata is elkerülhetetlen. például: <ConnectedColumnDefinition>pep.PeopleID</ConnectedColumnDefinition>

  • Operator: A szűréshez használható SQL operátor. Az operátorok felhasználása nem minden PSearch esetében lehetséges, például dátum intervallum esetén nem használható a like operátor... Felhasználási módjuk megegyezik az SQL szerverben tipikusan használható where operátorokéval. A lehetséges értékei:

    • %like%, like%, %like
    • =, <, >, <=, >=, <>
    • in: ilyenkor a Query node megadására is szükség van, mely a kifejezés jobb oldalán szereplő eredményhalmazt fogja előállítani.
    • between: dátumintervallumok (DateRange) esetében használható, a {0} helyére a kezdő, a {1} helyére a vég dátum kerül bele. pl.: <ConnectedColumnDefinition>(f.Hatarido BETWEEN '{0}' AND '{1} 23:59:59.999')</ConnectedColumnDefinition>
  • Caption: A szűrő feletti felirat, vagy a nyomógomb felirata.
  • Query: Ez kizárólag az in operátor esetében használható elem. Itt egy SQL where mondatrészt kell megadni, amely a ConnectedColumnDefinition-ban megadott oszlophoz állítja elő a kiértékelendő kifejezés jobb oldalát. Tehát a szűrés során előállított SQL kifejezés WHERE része a következő résszel fog kibővülni: ConnectedColumnDefinition in (Query tartalma). Ha Query értéke tartalmazza a #param# karakterláncot, akkor annak helyére lesz beillesztve a ControlPanel Control értéke. Ez tipikusan a Query nodeban elhelyezkedő select utasítás szűrésére használható fel.
  • Width: A kontroll szélességét szabályozza (pixelben értelmezett).
  • DisplayOverColumn: Ha a szűrőmezőt nem a ControlPanel-en szeretnénk megjeleníteni, hanem a táblázat egy oszlopának fejléce alatt, akkor be kell állítanunk ezt a node-ot. Értéke annak az oszlopnak a name attribútuma, amely fejléce alatt szeretnénk, hogy megjelenjen a szűrőmező. Opcionális.

A beállításhoz felhasználható szabályok:

  • Visible: Láthatósági szabály
  • Readonly: Olvashatósági szabály, a szerkeszthetőséget szabályozza.
  • Required: A szűrőmezőt kötelező kitölteni. (nem minden szűrőmező esetén értelmezett beállítás)
  • DefaultValue: Alapértelmezett érték szabály, a szűrőben levő alapértelmezett értéket lehet vele beállítani (nem minden szűrőmező esetén értelmezett beállítás)
  • SessionValue: Beviteli mezkőn található "házikó" ikon kiértékeléséhez használható szabály. Ha a kontrollhoz nincs beállítva SessionValue szabály, akkor meg sem jelenik az ikon. (nem minden szűrőmező esetén értelmezett beállítás)
  • ComputedValue: Számított mező kiértékeléséhez használt szabály. Ezzel a beállítással a filter-ből érkező érték alapján lehet dinamikusan kiszámolni egy szűrő értékét. (nem minden szűrőmező esetén értelmezett beállítás)
  • Tooltip: Ezzel a beállítással lehet magyarázó szöveget (aka. tooltip) paraméterezni a szűrőhöz.
  • PlaceHolder: Az üres szűrőmezőbe írandó szöveg (nem minden szűrőmező esetén értelmezett beállítás)

Példák:

Egyszerű szöveges szűrőmező:

<Control>
    <Name>DescriptionText</Name>
    <Type>TextSearch</Type>
    <Caption>Leírás</Caption>
    <ConnectedColumnDefinition>e.Description</ConnectedColumnDefinition>
    <Operator>like%</Operator>
</Control>

Egyszerű jelölő négyzet:

<Control>
    <Name>DoneCheckBox</Name>
    <Type>BoolSearch</Type>
    <Caption>Kész</Caption>
    <ConnectedColumnDefinition>e.Done</ConnectedColumnDefinition>
    <Operator>=</Operator>
    <DefaultValue type="Constant" return="string" default="false">false</DefaultValue>
</Control>

Most áttérünk az egyes ControlPanel Control-ok altípusainak definiálására, azaz a típus függő speciális beállításokra.

ComboSearch

A felületen egy lenyíló listás szűrő jelenik meg. A lenyíló listában megjelenő elemeket a ComboDefinition megadott Combo szolgáltatja. Bővebb információt a ComboDefinition fejezetben talál.

A LookupFilterName és a LookupFilterValue együttes használatával tovább lehet szűkíteni a lenyíló lista elemeit (ebben az esetben a ComboDefinition-ban szereplő SQL mondatnak a WHERE részének tartalamznia kell az 1=1 részt) Ez a két beállítás opcionális!

Példa:

<Control>
    <Name>ComboCountry</Name>
    <Type>ComboSearch</Type>
    <Caption>Ország</Caption>
    <ConnectedColumnDefinition>c.Country</ConnectedColumnDefinition>
    <Operator>=</Operator>
    <ComboDefinition>ComboFixedValuesLookup</ComboDefinition>
    <LookupFilterName>GroupNum</LookupFilterName>
    <LookupFilterValue>1</LookupFilterValue>
</Control>

NewObjectButton

Új elem rögzíétésre szolgáló gomb. A kötelező beállítások:

  • Screen: Melyik képernyőt kell felhozni új elem rögzítéséhez.
  • BusinessObject: A gomb megnyomására milyen üzleti objektum (vagy annak altípusai) hozhatóak létre.

Opcionális beállítások:

  • A Target beállítással meg lehet adni, hogy a felugró képernyő ne az aktuális böngésző fülben, hanem egy újban jelenjen meg.

A példában új esemény rögzítését fogja elvégezni a gomb.

Példa:

<Control>
    <Name>NewEvent</Name>
    <Type>NewObjectButton</Type>
    <ReferencedMinorMenu>MMPEP</ReferencedMinorMenu>
    <BusinessObject>BusinessObjectEvent</BusinessObject>
    <Screen>ScreenEvent</Screen>
    <Caption>Új esemény</Caption>
</Control>

DeleteObjectButton

A sor törlésére szolgáló gomb. A törléshez meg kell adni, hogy melyik üzleti objektum fogja elvégezni a törlést és hogy melyik oszlopból kell kiolvasni az egyedi azonosítót (amit törölni szeretnénk). A példában a törléshez a BusinessObjectDocument üzleti objektumot használjuk fel, amelyhez az azonosítót a DocumentID oszlopból fogja venni.

Példa:

<Control>
    <Name>DeleteDocument</Name>
    <Type>DeleteObjectButton</Type>
    <Caption>Törlés</Caption>
    <BusinessObject idColumn="DocumentID">BusinessObjectDocument</BusinessObject>
</Control>

SimpleLinkButton

A gombra kattintva egy képernyőt nyit fel az Effector. A Screen beállításban kell megadni a megnyitni kívánt képernyőt.

Példa:

<Control>
    <Type>SimpleLinkButton</Type>
    <Name>PSProjectCompare</Name>
    <Caption>TBC compare</Caption>
    <Screen>ScreenTopicBusinessCaseCompare</Screen>
</Control> 

Opcionális beállítások:

  • A Target beállítással meg lehet adni, hogy a felugró képernyő ne az aktuális böngésző fülben, hanem egy újban jelenjen meg.

ActionButton

Különböző egyedi logikák megvalósítására alkalmas "szűrő mező típus".

Gomb kinézetének módosítása: ButtonLooksLike node segítségével. Opcionális. Link típusú ActionButton esetén használható. Megadhatjuk, hogy az adott gomb melyik gombra hasonlítson kinézetre. Lehetséges értékei: DeleteObjectButton, NewObjectButton, Auto.

Az OnButtonClick/Type node meghatározza a nyomógomb típusát, vagyis, hogy milyen jellegű művelet fog végrehajtódni. Értékei a következők:

  • OpenUrl: A gombbal egy URL-t akarunk megnyitni új ablakban.
  • Outer és Report: Külső dll-be történő hívás esetén ezt kell megadni. Új interface-k megvalósítása esetén nincs különbség a kettő között
  • ProcessResultSet: ProcessResultSet funkciót tartalmazó gombot jelent.
  • GenerateDocument: A gombbal a beépített dokumentum létrehozó funkcionalitást fogjuk meghívni.
  • Export: A gomb a beépített exportálás funkciót fogja használni.
  • ActionButtonChain: A gombbal több másik gomb egymás utáni lenyomását akarjuk szimulálni.

OpenURL

Rákattintásakor felugró ablakban (/vagy fülön, böngészőbeállítás-függő) megnyitja az Url mezőben lévő weboldal-t.

  • Url: a megnyitni kivánt weboldal URL-jét kell benne megadni. A beállított URL-t mindenképpen új ablakban (vagy fülön) hozza fel az Effector.
  • UrlLink ActionButton Külső hivatkozás OpenUrl http://www.google.com</Url>

Outer és Report

A külső függvényhívást megvalósító ControlPanel Control, egy paraméterezett modul adott osztályába fog belehívni. Beállítását a Module node segítségével tehetjük meg, ez a node fogja tartalmazni azokat a technikai adatokat, melyek segítségével eléri az implementáló osztályt.

<Module classname="orn_Sample.SpecProjectPDFExportButton" action="Példa akció">[##LocalProgramPath##]\Sample.dll</Module>

A Module node értéke a meghívandó modul neve és teljes elérési útvonala. A [##LocalProgramPath##] karakterláncot a rendszer kicseréli a saját útvonalára. Például: C:\Inetpub\wwwroot\Sample\bin.

A classname attribútum, a modulban lévő osztályt határozza meg, amely osztálynak egy speciális interfészt kell megvalósítania (IControlPanelControl). Ez az interfész megvalósítás garantálja a megfelelő működést.

Ennél a ControlPanel Control altípusnál az action attribútum értéke tetszőleges szöveg lehet, amely egy külső DLL-be történő híváskor, mint paraméter fog átmenni.

ExcelExport

Egy olyan gombot jelenít meg, amelyre kattintva az Excel Export funkcióhoz tartozó opciók megadása után ez adott táblázat értékeit kiexportálja.

Példa

<Control>
    <Name>export</Name>
    <Type>ActionButton</Type>
    <Caption>Excel export</Caption>
    <OnButtonClick>
        <ActionType>Export</ActionType>
    </OnButtonClick>
</Control>

ExcelExport további lehetőségek

<Control>
    <Name>export</Name>
    <Type>ActionButton</Type>
    <Caption>Excel export</Caption>
    <OnButtonClick>
        <ActionType>Export</ActionType>
        <DataSources>
            <DataSource filterType=”Out”>DisplayDefinitionRTActions</DataSource>
            <DataSource filterType=”In”>DisplayDefinitionRTBOMethods</DataSource>
        </DataSources>
        <ExcelTemplate>interim_template_u16ext</ExcelTemplate>
    </OnButtonClick>
</Control>

A DataSources gyűjtő node-on belül tudjuk felsorolni azokat a DisplayDefinition-öket (prefix és kiterjesztés nélkül), amiket exportálni szeretnénk. Ha nem adunk meg ilyet, akkor az aktuális képernyő tartalma kerül exportálásra.

Lehetőség van megadni a filterType attribútumban, hogy a bejövő vagy a kimenő filterek legyenek átadva az exportáláskor, vagyis amelyik megjelenítőn megnyomtam a gombot, az ahhoz a megjelenítőhöz tartozó In- vagy Out filtereket kapja meg az export eljárás. Opcionális attribútum, két lehetséges értéke: In, Out. Alapértelmezett beállítás az out.

Az ExcelTemplate node-ban adhatjuk meg azt az excel template-et, amibe exportálni szeretnénk; ez az ExcelTemplate adattábla TemplateName mezőjében kell szerepeljen.

CREATE TABLE [dbo].[ExcelTemplate](
    [TemplateID] [int] IDENTITY(1,1) NOT NULL,
    [TemplateName] [varchar](200) NULL,
    [TemplatePath] [varchar](500) NULL,
    [TemplateTitle] [varchar](200) NULL,
    [Description] [varchar](max) NULL,
    [Deleted] [tinyint] NULL
)

Mezők:

  • TemplateID: egyedi azonosító
  • TemplateName: a template azonosítója, ezt adjuk meg az ExcelTemplate tag-ben
  • TemplatePath: a template abszolút elérési újta
  • TemplateTitle: a template rövid leírása (jelenleg nem használt)
  • Description: a template részletes leírása

Ha a template-en érvényesítéseket (/ adatellenőrzéseket / tartományokat) szeretnénk definiálni, akkor a template-ben lennie kell egy “__LookupList__” sheet-nek (akár elrejtve is lehet), amelyben megadjuk az egyes csoportok nevét, ami alá majd a rendszer automatikusan betölti a megfelelő elemeket.

CREATE TABLE [dbo].[ExcelTemplateLookupValues](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [TemplateID] [int] NULL,
    [LookupGroup] [varchar](200) NULL,
    [Query] [varchar](max) NULL,
    [Deleted] [tinyint] NULL
) ON [PRIMARY]

Mezők:

  • TemplateID: az ExcelTemplate táblában megadott template fájl egyedi azonosítója
  • LookupGroup: a template-ben definiált csoport neve (ilyen néven fogja a rendszer keresni a template-ben az egyes csoportokat a “__LookupList__” sheet-en kis/nagybetű érzékenyen)
  • Query: az itt megadott lekérdezés eredménye lesz az adott csoporthoz tartozó elemek listája

Megjegyzések:

  • Ha a paraméterezésben más adatforrást adok meg, akkor az export gombra kattintás után felugró ablakban nem tudom kiválasztani az exportálni kívánt tartományt; ilyenkor mindig a teljes lekérdezés eredményét exportálja a rendszer.
  • Az egyes sheet-ek neve a DisplayDefinition Caption tag-jében megadott neve lesz, ha ez nincs megadva, akkor az xml kiterjesztés nélküli értéke lesz az.
  • Ha a paraméterezésben template-et adok meg, akkor az export gombra kattintás után felugró ablakban nem tudom kiválasztani az exportálni kívánt formátumot; ilyenkor mindig xlsx formátumba exportál a rendszer. A felugró ablakban megjelenik annak a template-nek a neve, amelybe exportálni szeretnénk.
  • Ha csak a DataSources-t adjuk meg, akkor minden egyes DataSource tag-ben megadott DisplayDefinition az excel 1-1 sheet-jére kerül, a felsorolási sorrendben.
  • Ha csak az ExcelTemplate tag-et adjuk meg, akkor az aktuális DisplayDefinition tartalma kerül exportálásra a megadott template-be.
  • Ha mindkét tag ki van töltve, akkor a DataSources-ban megadott DisplayDefinition-ök lesznek betöltve a template excel-be a felsorolási sorrendben.
  • Ha több DataSource-t adunk meg, mint ahány sheet van a template-ben, akkor azt jelzi a rendszer.
  • Ha nincs megadva ezek egyike sem, akkor a hagyományos módon tudunk adatot exportálni.

Exportálshoz egyedi DLL

Az Export gomb megnyomására lehetőség van a beépített lehetőségek helyett egyedi programkóddal, saját formátumaban kimenteni az adatot.

<Control>
    <Name>exportModule</Name> 
    <Type>ActionButton</Type> 
    <Caption>Excel export (JSON)</Caption> 
    <OnButtonClick>
        <ActionType>Export</ActionType> 
        <Module className="Nevter.Osztaly">[##LocalProgramPath##]\Nevter.dll</Module> 
    </OnButtonClick>
</Control>

Az Osztaly osztálynak meg kell valósítania az IExportModule interfészt.

public class Osztaly : IExportModule
{
    #region IExportModule Members

    public string Export(FNetOnline2.Domain.ConfigObjects.IExportButton exportButton, FNetOnline2.ServiceObjects.IGridParameters gridParameters, string fileName, string filePath, string licenseFileName)
    {
        DataProvider dataProvider = new DataProvider();

        DataGrid grid;
        DataDefinition ddo;
        string businessObjectIDColumn;
        string caption;

        Tools.GetRelatedConfigObjects(gridParameters.DisplayName, out grid, out ddo);
        Tools.GetGridInfo(grid, out businessObjectIDColumn, out caption);

        Dictionary<string, object> resultTable = FNetOnline2.ExcelExport.Tools.GetResultTable(dataProvider, ddo.Name, FNetOnline2.Domain.ConfigObjects.DisplayTypes.dgvc, gridParameters.DisplayName, gridParameters.InFilterValues, gridParameters.PSearchValues, gridParameters.Sort, gridParameters.RowCount);
        DataTable rawData = FNetOnline2.ExcelExport.Tools.ConvertResultTableToDataTable(resultTable);

        ExportType exportType = gridParameters.ExportType;

        DataTable exportTable = Tools.CreateExportTable(gridParameters.VisibleColumns);

        //only selected or simple filter
        DataRow[] results = null;
        if (exportType == ExportType.OnlySelected && !string.IsNullOrEmpty(businessObjectIDColumn))
        {
            results = Tools.GetSelectedRows(rawData, gridParameters.SelectedIDs, businessObjectIDColumn);
        }
        else
        {
            results = Tools.ApplySimpleFilter(rawData, gridParameters.SimpleFilters, gridParameters.Sort);
        }

        foreach (DataRow r in results)
        {
            DataRow row = Tools.CopyRow(gridParameters.VisibleColumns, exportTable, r);
            exportTable.Rows.Add(row);
        }

        Tools.RemoveRowIndexColumn(exportTable);

        string json = Newtonsoft.Json.JsonConvert.SerializeObject(exportTable);

        string outputFileName = Path.Combine(filePath, string.Format("{0}.json", fileName));

        File.WriteAllText(outputFileName, json);

        object reference = dataProvider.CreateFileInterfaceReference(outputFileName, DateTime.Now.AddMinutes(15));

        return reference == null ? string.Empty : reference.ToString();
    }

    #endregion
}

ProcessResultSet (PRS)

A táblázatban megjelenített adatokra lehet tömeges műveleteket végrehajtani az ilyen típusú gombbal. A ProcessResultSet funkcióról az Extra funkciók fejezetben talál további információt.

Példa:

<Control>
    <Name>prs1</Name>
    <Type>ActionButton</Type>
    <Caption>Véglegesítés</Caption>
    <OnButtonClick>
        <OnlySelectedRows>true</OnlySelectedRows>
        <ActionType>ProcessResultSet</ActionType>
        <StoredProcedure>osp_prs_MegrendelesVeglegesit</StoredProcedure>
    </OnButtonClick>
</Control>
  • StoredProcedure: A meghívandó tárolt eljárás neve.
  • CloseScreenAfterAction: A képernyő bezárását kezdeményezi a művelet befejezése után, értéke true vagy false lehet.
  • RefreshAfterAction: Értéke a Screen, Component, None lehetőségek egyike lehet. Itt állítható be, hogy képernyő melyik része frissüljön a PRS meghívása után.
  • OnlySelectedRows: Csak a kijelölt sorokat adja-e át a PRS funkciónak vagy a táblázat összes sorát. Értéke true vagy false lehet.

GenerateDocument

A táblázatban megjelenített adatokra lehet dokumentum generálást végrehajtani az ilyen típusú gombbal. A dokumentum generálás alapvetően úgyanúgy működik, mint a PRS, azt leszámítva, hogy a tárolt eljárásnak eredménye alapján a rendszer automatikusan dokumentumot generál. Ilyenkor a tárolt eljárásnak csak annyi a feladata, hogy kigyűjtse a dokumentum generáláshoz szükséges adatokat és a végén felparaméterezze a funkciót.

Példa:

<Control>
    <Name>docgen</Name>
    <Type>ActionButton</Type>
    <Caption>Szerződés generálása</Caption>
    <OnButtonClick>
        <OnlySelectedRows>true</OnlySelectedRows>
        <ActionType>GenerateDocument</ActionType>
        <StoredProcedure>osp_prs_GenerateSzerzodesDoc</StoredProcedure>
    </OnButtonClick>
</Control>
  • StoredProcedure: A meghívandó tárolt eljárás neve.
  • CloseScreenAfterAction: A képernyő bezárását kezdeményezi a művelet befejezése után, értéke true vagy false lehet.
  • RefreshAfterAction: Értéke a Screen, Component, None lehetőségek egyike lehet. Itt állítható be, hogy képernyő melyik része frissüljön a PRS meghívása után.
  • OnlySelectedRows: Csak a kijelölt sorokat adja-e át a PRS funkciónak vagy a táblázat összes sorát. Értéke true vagy false lehet.

ActionButtonChain

Egy gombra több funkciót fel lehet fűzni, azaz egy gombra nyomással el tudjuk érni azt, mintha egymás után több gombot nyomtunk volna meg a felületen. A ChainItems node-on belűl kell felsorolni az egymás után meghívni kívánt gombok neveit. Az id attribútúm határozza meg a sorrendet.

Példa:

<Control>
    <Name>Chain1</Name>
    <Type>ActionButton</Type>
    <Caption>ActionButtonChain</Caption>
    <OnButtonClick>
        <ActionType>ActionButtonChain</ActionType>
        <ChainItems>
            <Item id="1">prs1</Item>
            <Item id="2">DLL</Item>
        </ChainItems>
    </OnButtonClick>
</Control>

TextSearch

Egyszerű szöveges szűrő mező definiálását teszi lehetővé.

A következő node nem kötelező és TextSearch specifikus:

  • A UseNumericRestriction beállítással lehet megadni, hogy a szűrőmezőbe csak szám írható be. Értéke lehet: byte, int16, int32, int64, double. Alapértelemezett érték: int32 (tehát ha van értéke ennek e beállításnak de egyik felsorolt érték sem).
  • A MaxLength beállítással lehet megadni, hogy a szűrőmezőbe maximum milyen hosszú szöveg írható be.

Példa:

<Control>
    <Name>FeladatIDTextBox</Name>
    <Type>TextSearch</Type>
    <Caption>Feladat #</Caption>
    <ConnectedColumnDefinition>f.FeladatID</ConnectedColumnDefinition>
    <Operator>=</Operator>
    <UseNumericRestriction>int16</UseNumericRestriction>
</Control>

DateRange

A dátum intervallum szűrő gyakorlatilag egy specializált ComboSearch, működése is nagyon hasonló az utóbbihoz.

Itt is a ComboDefinition node használatos a választható értékek adatforrásának meghatározásához, mint a ComboSearch-ök esetében. Ez a node tartalmazza a ComboDefinition referenciát, mely a definíciós fájl neve.

Megkötések:

  • Az értékkészlet kulcsa dátumtól|dátumig formátumú kell, hogy legyen. Pl.: (2011-01-01|2011-02-01).
  • A ConnectedColumnDefinition node-nak DateRange esetén tartalmaznia kell a {0} és {1} karakter láncokat. Az elsőt a dátumtól, a másodikat a dátumig értékkel helyettesíti be a rendszer.
  • Operator: Az operátor node csak between lehet.

Példa:

<Control>
    <Name>Interval</Name>
    <Type>DateRange</Type>
    <Caption>Időszak</Caption>
    <Width>230</Width>
    <ConnectedColumnDefinition><![CDATA[((case when e.done=0 and e.task=1 then dateadd(year,100,getdate()) else e.StartDate end) >= `{0}` and e.StartDate <= `{1} 23:59:59.999`)]]></ConnectedColumnDefinition>
    <Operator>between</Operator>
    <DefaultValue type="SQL" return="string" default="">
        <![CDATA[SELECT dbo.[Oriana_Short_Date](DATEADataDefinition(wk, DATEDIFF(wk,0,GETDATE()), 0)) + `|` +  dbo.[Oriana_Short_Date](DATEADataDefinition(wk, DATEDIFF(wk,0,GETDATE()), 6))]]>
    </DefaultValue>
    <ComboDefinition>ComboDateRange</ComboDefinition>
</Control>

TagCloud

Címkefelhő típusú szűrő mező. Egy legördülő listában jeleníti meg csoportosítva a címkéket.

Példa:

<Control>
    <Name>tagCloud1</Name>
    <Type>TagCloud</Type>
    <Caption>Címkefelhő</Caption>
    <Width>430</Width>
    <TagGroupColumn>tagGroup</TagGroupColumn>
    <TagCaptionColumn>tag</TagCaptionColumn>
    <TagValueColumn>count</TagValueColumn>
    <TagIDColumn>tagValue</TagIDColumn>
    <TagSearchControlDefinitionColumn>psearchDef</TagSearchControlDefinitionColumn>
    <DisplayGroupInControl>false</DisplayGroupInControl>
    <DataDefinition>DataDefinitionTagCloudProba</DataDefinition>
</Control>

A címke felhő beállításához az alábbi nodeok állnak rendelkezésre:

  • DataDefinition: Az adatforrás meghatározását végezhetjük el vele, annak a DataDefinition-nek a nevét tartalmazza, amely a címkefelhő adatait szolgáltatja. Fontos, hogy ez a DataDefinition fogadni tudja a DisplayDefinition-ön definiált szűrőket.
  • TagGroupColumn: A DataDefinition azon oszlopa, amely a csoport nevét tartalmazza.
  • TagCaptionColumn: A DataDefinition azon oszlopa, amely a címkék feliratát tartalmazza.
  • TagValueColumn: A DataDefinition azon oszlopa, amely a címke mellett megjelenített számláló értékét tartalmazza.
  • TagIDColumn: A DataDefinition azon oszlopa, amely a címkéhez tartozó (csoporton belüli) egyedi azonosítót tartalmazza.
  • TagSearchControlDefinitionColumn: A DataDefinition azon oszlopa, amely a szűréshez definiál egy ControlPanel Control elemet.
  • DisplayGroupInControl: Értéke true vagy false lehet, az alapértelmezett érték true. Ha értéke false, akkor a kontrolon nem jelenik meg, hogy mely csoportokból lettek választva az aktív címkék.

QuerySearch

Egy érték listából választva szűrhetjük a ConnectedColumnDefinition-ben definiált mező értékeit. Szűrési mechanizmusa megegyezik a ComboSearch-el, azonban itt az érték lista egy több oszlopos listát jelenít meg.

A beállításhoz felhasználható node-ok:

  • Screen: Annak a képernyőnek a nevét tartalmazza, amely megnyílik az értékválasztó gomb megnyomásakor.
  • DataDefinition: Az adatforrásként kapcsolt DataDefinition neve, amely a kapcsolt mezőnek megfelelő adatokat tartalmazza. Szerepe elsősorban a már mentett értékhez (azonosító) keresi vissza a megjeleníteni kívánt értéket. (tehát a CompanyID mezőbe az azonosító van eltárolva, de a felületen ezt a DataDefinition-t használva jelenítjük meg a cég nevét)
  • KeyColumnDefinition: Annak az oszlopnak a neve, amely az értéket tartalmazza.
  • ValueColumn: Annak az oszlopnak a neve, amely az értékhez tartozó szöveget tartalmazza.

Példa:

<Control>
    <Name>MarcomListQuerySearch</Name>
    <Type>QuerySearch</Type>
    <Caption>Listák</Caption>
    <ConnectedColumnDefinition>pe.peopleid</ConnectedColumnDefinition>
    <Screen>ScreenChoiseRendezvenyLista</Screen>
    <DataDefinition>DataDefinitionChoiseRendezvenyLista</DataDefinition>
    <KeyColumnDefinition>U_PRS_ID</KeyColumnDefinition>
    <ValueColumn>DisplayValue</ValueColumn>
    <Operator>in</Operator>
    <Query>
        (SELECT p.peopleid
        FROM orn_PeopleList m with (nolock)
        LEFT OUTER JOIN people p with (nolock) ON m.PeopleID = p.peopleid and p.deleted = 0
        WHERE m.Deleted=0 AND m.ProcessResultSetID = #param#)
    </Query>
</Control>

BoolSearch

Egyszerű checkbox típusú szűrő definícióját tartalmazza, egyetlen hozzáadott node-ot tartalmaz, mely meghatározza azt, hogy a szűrő két, vagy három állású checkbox-e. Ez a beállítás a következő node-al érhető el: <IsIndeterminateAllowed>true</IsIndeterminateAllowed>

<Control>
    <Name>IsArchivedCheckBox</Name>
    <Type>BoolSearch</Type>
    <Caption>Archivált?</Caption>
    <ConnectedColumnDefinition>f.IsArchive</ConnectedColumnDefinition>
    <IsIndeterminateAllowed>true</IsIndeterminateAllowed>
    <Operator>=</Operator>
    <DefaultValue type="Constant" return="boolean" default="false">False</DefaultValue>
</Control>

Linkelt objektumok beállítása

A linkelt objektumok segítségével a táblázatos megjelenítőkben linkeket hozhatunk létre, melyek segítségével a beállított képernyőkre tudunk navigálni. Jelentősége abban rejlik, hogy míg a táblázat csak néhány adatot tartalmaz az adott objektumról - esetenként az azonosítóját, és a leírását - addig a megjelenített képernyőn bármilyen kapcsolódó információ megjeleníthető az objektummal kapcsolatban. Működéséhez a filtereket használja mely a táblázaton történő kattintáskor a kiválasztott objektum azonosítóját (helyes paraméterezés esetén) helyezi a kimenő filterek közé, a megjelenítendő képernyő pedig ezt az értéket használva felépíti önmagát, betölti az adatokat.

A Linkelt objektumok definiálásához a DisplayDefinition/Links kollekció Link elemeit kell felhasználnunk, és felsorolnunk a link definíciókat.

Példa:

<Links>
    <Link>
        <ColumnName>ProjectName</ColumnName>
        <Screen>ScreenProject</Screen>
        <ReferencedMinorMenu>MMFolyamatok</ReferencedMinorMenu>
    </Link>
</Links>

A Link nodenak egyetlen nem kötelező node-ja a Type. Alapértelmezett működése (Type node megadása nélkül) a fent leírtaknak megfelelő. Megnyitja a hivatkozott objektumot. Beállított esetben a következő értékek valamelyikét veheti fel, mely módosítja az alapértelmezett működést:

  • New: A felugró képernyő új adat felviteli módban fog megjelenni (nem szerkesztésként).
  • Exists: A felugró képernyő szerkesztésként fog megjelenni. Ez az alapértelmezett beállítás.
  • NewOrExists: A keretrendszer ellenőrzi, hogy létezik–e a hivatkozott objektum. Ha igen akkor megjeleníti az adatait, ha nem, akkor újat készít.
  • ProcessResultSet esetén a linkre kattintva egy PRS hívás történik. A PRS hívást a Link-hez kapcsolt ControlPanel Control fogja elvégezni, ezt az összekapcsolást az adott Link node ProcessResultSetControl nodejának beállításával tehetjük meg, az értéknek egy PRS-t megvalósító PSearch azonosítóját kell, hogy tartalmazza.
  • OpenUrl segítségével egy URL nyitható meg.

Példák:

<Links>

    <Link>
        <Type>NewOrExists</Type>
        <ColumnName>ProjectName</ColumnName>
        <ReferencedMinorMenu>MMFolyamatok</ReferencedMinorMenu>
        <Screen>ScreenProject</Screen>
    </Link>

    <Link>
        <Type>ProcessResultSet</Type>
        <ColumnName>ProjectName</ColumnName>
        <ProcessResultSetControl>ActionButton_DocGen</ProcessResultSetControl>
    </Link>
</Links>

Egy link meghatározásához felhasználható nodeok a következők lehetnek:

  • ColumnName: Az oszlop azonosítóját (az XML DisplayDefinition/Columns/Column name attribútuma) tartalmazza, ahol megjelenik a link.
  • ReferencedMinorMenu: Segítéségével megadhatjuk, hogy az új képernyő melyik MinorMenu-n jelenjen meg.
  • Screen: Az új képernyő az adott munkamódszeren belül ebben a nodeban adható meg a már ismert képernyő referenciával. (A ReferencedMinorMenu node-ban megadott MinorMenu-ben nem kell szerepelnie)
  • FilterInUrl: Csak OpenUrl típus esetén van értelmezve.
  • ProcessResultSetControl: Csak ProcessResultSet típus esetén van értelmezve.
  • A Target beállítással meg lehet adni, hogy a felugró képernyő ne az aktuális böngésző fülben, hanem egy újban jelenjen meg.

Példák:

<Links>
    <Link>
        <ColumnName>CompanyName</ColumnName>
        <ReferencedMinorMenu>MMFolyamatok</ReferencedMinorMenu>
        <Screen>ScreenCompanyEdit</Screen>
    </Link>
    <Link>
        <ColumnName>ProjectName</ColumnName>
        <ReferencedMinorMenu>MMFolyamatok</ReferencedMinorMenu>
        <Screen>ScreenProject</Screen>
    </Link>
    <Link>
        <Type>New</Type>
        <ColumnName>Notes</ColumnName>
        <ReferencedMinorMenu>MMPEP</ReferencedMinorMenu>
        <Screen>ScreenCommentsProject</Screen>
    </ChainListNode>
</Links>

Altípusok és típus függő funkciók beállítása

Mint azt a fejezet elején említettük a táblázatos megjelenítők több altípusra tagolódnak, ezek beállítása néhány speciális node és attribútum segítségével lehetséges. Főként formázást érintenek a beállítások, az adatok forrása ugyanaz marad.

Table

A dokumentum korábbi részében már volt róla szó.

TransposedTable

Elforgatott táblázatot jelenít meg, vagyis ami korábban oszlop volt, most sor lesz, az első oszlopban lesznek az oszlop címkék. A TransposedTable megjelenítőhöz tartozó beállításokat a TransposedTableViewOptions node alatt lehet megadni.

Elérhető beállítások:

  • A ColumnCaptions node fogja össze a dinamikus oszlop címke kigyűjtő funkció paramétereit. Dinamikus táblázat esetén az oszlopok fejléce alapértelmezés szerint az, amit a DataDefinition-ban definiált lekérdezés visszaad. Lehetőség van ezeknek a címkéknek a lecserélésére akár egy másik lekérdezés eredményével vagy fixen definiált értékekkel. A sourceType attribútummal lehet megadni, hogy milyen forrásról van szó. Ennek az attribútumnak az értéke lehet Database, XML. Az alapértelemezett érték Đatabase. Ha sourceType értéke Database akkor a Database node által összefogott beállításokat veszi figyelembe a rendszer, míg a másik esetben a FixedValues node alá tartozó beállításokat dolgozza fel a rendszer.

Példa Database-re:

SELECT Name, Caption FROM orn_ColumnCaptions WHERE DisplayDefinition = 'DisplayDefinitionDinamicReport'

Példa XML-re:

Rendelkezésre álló tételek (név) Rendelkezésre álló tételek (ár) Megjegyzés

Card, CardMatrix

A kártya típusú táblázatos megjelenítők között nagyon kicsi a különbség a paraméterezés szempontjából, ezért együtt tárgyaljuk őket.

A Card megjelenítő nem csinál mást, mint lekérdezés eredményeként visszakapott sorokhoz egyenként előállít egy kátyát, amit aztán egymás után megjelenít a felületen. Tehát 1 sor = 1 kártya.

Ha a felhasználó egy oszlop szerint beállítja a grafikon megjelenítést, akkor a kártyák lefelé egymás után jelennek meg, egy megadott oszlopban található érték alapján dinamikusan megváltoztatva a kártya méretét. Minél nagyobb az érték, annál jobban kitűnik a kártya a többi közül.

Az oszlop definíciók tartalmaznak néhány Card esetén értelmezett beállítási lehetőséget:

CardView TemplateURL segítségével:

Ekkor a node tartalma a külső HTML template elérési útvonala kell, hogy legyen. Fontos, hogy egy .html kiterjesztésű fájlt kell megadni, mert a rendszer ennek hatására kapcsol át TemplateURL megjelenítési módba.

A template-ben chainlistnode-ként használhatunk bármely HTML tag-et, ha ellátjuk egy chainlistnode attribútummal és abban megadjuk annak az oszlopnak a nevét, amely az XML állományban definiált chainlistnode ClickedColumn node-jában szerepel.

A DataDefinition oszlopaira itt a {{card.data.<oszop>}} szignatúrával hivatkozhatunk.

Megjegyzés: A templateben egyszerűbb AngularJS direktívák is használhatóak. (ng-if, ng-show, ng-hide)

Példa:

dgvcSample.xml

<CardViewHTML>delivery/js/cards/project_card.html</CardViewHTML>

project_card.html

<div class="event" style="height:100%; background-color: #fff;border: 2px solid #ccd; padding: 4px 6px;">
    <a chainlistnode='Description'>{{card.data.Description}}</a>
</div>

A kártya nézetben (DisplayDefinition/CardViewOptions) felhasználható node-ok:

  • IsSortingEnabled: A rendszer által szolgáltatott "rendezés" combobox megjelenítését szabályozza. Értéke True/False lehet. Alapértelmezett értéke True. Opcionális.
  • IsGroupingEnabled: A rendszer által szolgáltatott "csoportosítás" combobox megjelenítését szabályozza. Értéke True/False lehet. Alapértelmezett értéke True.
  • GroupCssClassList: A csoportok eltérő stílusúak lehetnek ezeket az alternáló stílusokat állíthatjuk be itt. Értéke vesszővel elválasztott CSS osztálynevek. Nem kötelező attribútum.
  • GroupBy: Opcionális, értéke egy DataDefinition-ben definiált oszlop neve, amely alapján alapértelmezetten csoportosítani szeretnénk a kártyákat. A direction attribútumával az alapértelmezett rendezést állíthatjuk be a csoportosításhoz, a csoportok nevei ebben a sorrendben fognak megjelenni. Opcionális, értéke Asc vagy Desc. Alapértelmezett értéke Asc.
  • GroupLayout: Opcionális, értéke Horizontal, vagy Vertical lehet, hatására a csoportok vízszintesen vagy függőlegesen jelennenek meg. A layout átkapcsolható a felületen. Ha le szeretnénk tiltani ezt a lehetőséget, akkor az egy DisplayDefinition/ToolbarOptions/IsCardGroupLayoutChangeEnabled node segítségével lehetséges. Értéke true vagy false. Az alapértelmezett érték false
  • GraphByColumns: Azoknak az oszlopoknak a neveit tartalmazza vesszővel elválasztva, amelyekre alkalmazható a iGraph megjelenítés. Opcionális. Segítségével meg lehet adni a GroupByColumn és a SortByColumn lenyíló listákhoz hasonlóan, hogy mi szerint rajzolja ki a kártyákat a rendszer (GraphByColumns attribútum a HTMLTemplate-ben) egymás alá, olyan hosszúsággal, amekkora a kiválasztott érték. Tehát ha a grafikon combo-ból pl. kiválasztom, hogy "ráfordítás" szerint rajzolja ki a "project" kártyákat, akkor a ráfordítás mező értékét hozzáadja a kártya alap szélességéhez, és olyan széles lesz az adott kártya + kiírja a ráfordítás értékét a kártya mellé jobbra. Magyarul egy elforgatott oszlopdiagram lesz a végeredmény.
  • CssFloat node segítségével felülbírálható a kártyák CSS-ben definiált "float" beállítása.
  • CardClickControlName: Annak a ControlPanel Control-nak az azonosítója, amely a ProcessResultSet hívást elvégzi a kártyára kattintás után. Ez a ControlPanel Control nem szükségszerűen látható.
  • CardMatrixViewOptions/ColumnCount, CardMatrixViewOptions/WidthColumn, CardMatrixViewOptions/HeightColumn nodeok segítségével a kártyákat egymás mellé tehetjük mátrixszerű elrendezésben. A ColumnCount node értéke egy szám, hogy mennyi "oszlopa" legyen a mátrixnak. A WidthColumn és a HeightColumn azoknak az oszlopoknak a nevét tartalmazza, amely megadja, hogy az adott kártya mekkora, így lehetőség van különböző méretű kártyákat kirakni. A méretet pixelben kell megadni.
  • ShowGroupElementCount attribútummal beállítható a csoport számláló megjelenítése. Ez egy egyszerű True/False kapcsoló.
  • IsAnimationEnabled: A felületen a kártyák animálva jelennek meg. Egyes esetekben érdemes kikapcsolni ezt a lehetőséget. Értéke lehet true vagy false. Alapértelmezett értéke true.
  • DragAndDropControlName: Lehetőség van a kártyákon a drag&drop módszerrel műveletet végrehajtani. Ez azt jelenti, hogy egy kártya másik kártyára ráhúzásakor az Effector a beállításban megadott ActionButton-ben (a ControlPanel-en definiált gombról van szó) (ami lehetőség szerint ActionType = ProcessResultSet vagy ActionType = GenerateDocument) definiált funkciót végrehajtja.

A CardMatrix nézetben (DisplayDefinition/CardMatrixViewOptions) felhasználható node-ok:

  • ColumnCount: Egy sorban megjelenő kártyák számát kell megadni ebben a beállításban, értéke pozitív egész szám.
  • WidthColumn: Annak az oszlopnak a nevét tartalmazza, amely megadja az adott kártya szélességét pixelben, így lehetőség van különböző méretű kártyákat elhelyezni.
  • HeightColumn: Annak az oszlopnak a nevét tartalmazza, amely megadja az adott kártya magasságát pixelben, így lehetőség van különböző méretű kártyákat elhelyezni.
  • IsAnimationEnabled: A felületen a kártyák animálva jelennek meg. Egyes esetekben érdemes kikapcsolni ezt a lehetőséget. Értéke lehet true vagy false. Alapértelmezett értéke true.
  • DragAndDropControlName: Lehetőség van a kártyákon a drag&drop módszerrel műveletet végrehajtani. Ez azt jelenti, hogy egy kártya másik kártyára ráhúzásakor az Effector a beállításban megadott ActionButton-ben (a ControlPanel-en definiált gombról van szó) (ami lehetőség szerint ActionType = ProcessResultSet vagy ActionType = GenerateDocument) definiált funkciót végrehajtja.
  • CardClickControlName: Annak a ControlPanel Control-nak az azonosítója, amely a ProcessResultSet hívást elvégzi a kártyára kattintás után. Ez a ControlPanel Control nem szükségszerűen látható.

Tree

A fa megjelenítő paraméterezése is hasonló az előzőekben tárgyalt kártya nézethez, itt is a HTMLTemplate node tartalmazza a szükséges HTML elemet.

Felhasználható node-ok a definiáláshoz (TreeViewOptions node-on belül):

  • IDColumn: Annak az DataDefinitionben definiált oszlopnak az azonosítója, amely egy csomópontot egyértelműen azonosít.
  • ParentIDColumn: Az adott csomópont szülőjének az azonosítóját tartalmazó DataDefinition oszlop azonosító.

Példa:

<TreeViewOptions>
    <IDColumn>EventID</IDColumn>
    <ParentIDColumn>ParentEventID</ParentIDColumn>
</TreeViewOptions>

Calendar

A naptár megjelenítő paraméterezése is hasonló az előzőekben tárgyalt nézetekhez, itt is a HTMLTemplate node tartalmazza a szükséges HTML elemet.

Felhasználható node-ok a definiáláshoz (CalendarViewOptions node-on belül):

  • StartDateColumn: DataDefinition oszlop azonosító, amely a naptárban megjeleníteni kívánt elem kezdő dátumát tartalmazza.
  • EndDateColumn DataDefinition oszlop azonosító, amely a naptárban megjeleníteni kívánt elem befejező dátumát tartalmazza.
  • NewObjectButtonName: Annak a ControlPanel-en található gombnak a neve, amely az új elem rögzítését végzi el.
  • DateRangeControlName: Annak a ControlPanel-en található gombnak a neve, amely a naptárban megjelenő adatokat időpontra szűri le (a naptárban az intervallum léptető szabályozza ennek a szűrőnek az értékét).
  • StartHour: A naptárban naponta csak ettől az órától kezdődő elemek jelennek meg. Alapértelemezett érték: 0.
  • EndHour: A naptárban naponta csak eddig az óráig végződő elemek jelennek meg. Alapértelmezett érték: 24.

Példa:

<CalendarViewOptions>
    <StartDateColumn>StartDate</StartDateColumn>
    <EndDateColumn>EndDate</EndDateColumn>
    <NewObjectButtonName>NewEvent</NewObjectButtonName>
    <StartHour>9</StartHour>
    <EndHour>17</EndHour>
</CalendarViewOptions>

Az Effector 6.0.002-es verzió előtti változata drag&drop mentéskor csak Event táblában frissítette a StartDate és EndDate oszlopot. Az új verzióban már a megadott BusinessObject-et használva menti a rendszer a változásokat. Az ide vonatkozó változások a paraméterezésben:

<CalendarViewOptions>
    <StartDateColumn>StartDate</StartDateColumn>
    <EndDateColumn>EndDate</EndDateColumn>
    <BusinessObject idColumn="EventID">BusinessObjectEvent</BusinessObject>
</CalendarViewOptions>        

Ha továbbra is eseményeket akarunk menteni, akkor ezeket a beállításokat nem kell megadni. Az egyes beállítások alapértelmezett értékét a fenti példában található.

Fontos megjegyezni, hogy a StartDateColumn és az EndDateColumn beállításokban megadott DataDefinition-beli oszlopnevekkel megegyező mezőket (Field) kell definiálni a megadott BusinessObject XML fájlban is. A BusinessObject idColumn attribútumában megadott oszlopnévvel egyanez a helyzet (tehát a DataDefinition-ben és BusinessObject-ben ugyanolyan névvel kell szerepelni, továbbá a BusinessObject UniqueIDColumn beállításával is egyeznie kell).

A naptár nézetben lehetőség van havi nézetet megjeleníteni, illetve az alapnézetek közül ki lehet kapcsolni elemeket a következő beállításokkal:

<IsMonthViewAvailable>true</IsMonthViewAvailable>
<IsDayViewAvailable>true</IsDayViewAvailable>
<IsWeekViewAvailable>false</IsWeekViewAvailable>

Lehetőség van a naptárban megjelenő elem színének módosítására. A <ColorColumn></ColorColumn> beállításban annak az oszlopnak a nevét kell megadni, amely tartalmazza a színkódot. Opcionális beállítás.

A <TextColumn></TextColumn> beállítással lehet megadni annak az oszlopnak a nevét, amely tartalmazza az elemen megjeleníteni kívánt feliratot. Opcionális beállítás, alapértelmezett értéke Description.

Lehetőség van a naptárban megjelenő elemeken tooltip szöveget megjeleníteni, amelyet a <DetailsColumn></DetailsColumn> beállítással lehet megadni. A beállítás annak az oszlopnak a neve, amely tartalmazza a megjeleníteni kívánt szöveget. Opcionális beállítás, ha nincs megadva, akkor a TextColumn beállítás értékével egyezik meg.

A <DefaultView></DefaultView> beállítással lehet megadni, hogy a naptár kezdetben melyik nézetben jelenjen meg. Értéke lehet: Day, Week, Month, Timeline. Opcionális beállítás, alapértelmezett értéke Week.

A naptárat (és timeline-t is) a <Readonly></Readonly> szabállyal csak olvashatóvá lehet tenni (opcionális beállítás). A szabályban a következő hivatkozások használhatóak:

-   `[##Session.UserID##]`
-   `[##Session.UserName##]`
-   `[##Session.Language##]`
-   `[##Session.IsDeveloper##]`
-   `[##Special.Today##]`
-   `[##Special.ScreenName##]`
-   `[##Special.ComponentName##]`
-   `[##Special.TabID##]`

A naptárban (és timeline-on) megjelenő eseményeknek egyenként be lehet állítani, hogy csak olvasható legyen. A <ReadonlyColumn></ReadonlyColumn> beállításban kell megadni annak az oszlopnak a nevét, amely tartalmazza az adott eseményre vonatkozó readonly értéket. Opcionális beállítás.

Az új verzió egyik újdonsága a Timeline nézet, amelyet a <IsTimelineViewAvailable>true</IsTimelineViewAvailable> beállítással lehet elérhetővé tenni. A megjeleníteni kívánt timeline nézeteket a <TimelineViews></TimelineViews> beállítással kell összefogni. Példa:

<TimelineViews>
   <TimelineView>
      <IsDefault>true</IsDefault>
      <Caption>Idővonal 1</Caption>
      <ViewMode>Bar</ViewMode>
      <XAxis>
         <Unit>Minute</Unit>
         <DisplayFormat>%i</DisplayFormat>
         <Step>30</Step>
         <Size>24</Size>
         <Start>16</Start>
         <SecondScaleUnit>Hour</SecondScaleUnit>
         <SecondScaleDisplayFormat>%Y-%m-%d %H</SecondScaleDisplayFormat>
      </XAxis>
      <YAxis>
         <IDColumn>Felelos</IDColumn>
         <ValueColumn>FelelosNev</ValueColumn>
         <IsChangeAllowed>true</IsChangeAllowed>
       </YAxis>
   </TimelineView>
   <TimelineView>
      <Caption>Idővonal 2</Caption>
      <ViewMode>Bar</ViewMode>
      <XAxis>
         <Unit>Day</Unit>
         <Step>1</Step>
         <Size>31</Size>
         <Start>0</Start>
         <SecondScaleUnit>Month</SecondScaleUnit>
      </XAxis>
      <YAxis>
         <IDColumn>Felelos</IDColumn>
         <ValueColumn>FelelosNev</ValueColumn>
         <IsChangeAllowed>true</IsChangeAllowed>
      </YAxis>
   </TimelineView>
</TimelineViews>

A példában az első beállítás az alapértelmezett (IsDefault), aminek a címkéje “Idővonal 1” lesz (Caption beállítás). Az IsDefault beállítás opcionális, az alapértelmezett értéke false. Ha nincs alapértelmezett TimelineView megadva, akkor az első TimelineView beállítás lesz az alapértelmezett.

A timeline megjelenítését a ViewMode beállítás határozza meg, amely értéke lehet Bar, Cell, Tree, Days. Egyes ViewMode értékekhez további beállítás is szükséges, erről a későbbiekben esik szó. Ez a beállítás opcionális, alapértelmezett értéke Bar. A Timeline nézet X tengelyén az időpontok jelennek meg, az Y tengelyén a beállított értékek sorakoznak. Az X tengely paramétereit (osztásokban megjelenő dátum vagy időpont formátuma, osztások száma, stb.) az XAxis beállítással lehet megadni, az Y tengely paramétereit az YAxis beállítással lehet megadni. A példában az Y tengelyen a felhasználókat listázzuk ki.

Az YAxis/IDColumn beállítással kell megadni az Y tengelyen megjelenő értékekhez tartozó egyedi azonosítókat tartalmazó oszlop nevét. Az első példában a DataDefinition Felelos nevű oszlopában vannak ezek az értékek. Ha a timeline nézetben megjelenő téglalapok Y tengelyen való mozgatását is lehetővé akarjuk tenni, akkor ebben a beállításban megadott mezőnek szerepelnie kell a BusinessObject XML fájlban is. A jelen példában az Y tengelyen a BusinessObjectEvent Felelos oszlopának értékét változtatja meg a motor. Ezt a működést a YAxis/IsChangeAllowed beállítással lehet bekapcsolni. Logikai kapcsoló, alapértelmezett értéke false.

Az Y tengelyen megjelenő feliratokat tartalmazó DataDefinition-beli oszlopot a YAxis/ValueColumn beállítással kell megadni. Ha a ViewMode értéke Tree, akkor a YAxis/TreeViewByColumn beállítással kell megadni annak az oszlopnak a nevét amely szerint csoportosítani szeretnénk az Y tengelyen megjelenő értékeket.

Az X tengelyen megjelenő egységeket az XAxis/Unit beállítással lehet megadni. Értéke lehet: Minute, Hour, Day, Week, Month, Year. Az alapértelmezett érték Day. A példában az X tengelyen perc pontossággal jelenítünk meg értéket. A Unit és Step együttesen határozzák az X tengelyen megjelenő osztásokat.

Az X tengelyen megjelenő értékek formátumát az XAxis/DisplayFormat beállítással lehet megadni. A lehetséges beállításokat a következő web-oldalon lehet megtekinteni: https://docs.dhtmlx.com/scheduler/settings_format.html.

Az X tengelyen megjelenő értékek felosztását az XAxis/Step beállítással lehet megadni. Ennek alapértelmezett értéke 1. A Unit és Step együttesen határozzák az X tengelyen megjelenő osztásokat, ami az első példában 30 perces osztásokat jelent.

Az XAxis/Size beállítással lehet megadni, hogy az osztásokból mennyit akarunk megjeleníteni. A példában ez 24 (Size) darab 30 perces (Step, Unit) osztást jelent, vagyis 12 órát.

Az XAxis/Start beállítással lehet megadni, hogy az X tengelyen megjelenő értékek honnan kezdődjenek. Alapértelmezett értéke 0. A példában 16 (Start) darab 30 preces (Step, Unit) osztást jelent, vagyis reggel 8 órát.

Tehát az első példában szereplő XAxis/Unit, XAxis/Step, XAxis/Size és XAxis/Start beállítások együttesen azt jelentik, hogy az X tengely reggel 8 órától este 8 óráig 30 perces osztásokkal fog megjelenni, a második példában 31 darab nap jelenik meg.

Az XAxis/Length beállítással lehet szabályozni, hogy az X tengelyen egyszerre mennyi osztást lát a felhasználó (vízszintes görgetés).

A timeline nézetben lehetőség van egy másodlagos X tengelyt megadni. Ez a tengely az elsődleges tengely felett jelenik meg, ezért ennek az osztását érdemes az elsődleges tengelyhez képest nagyobb egységet választani. A másodlagos X tengelyt az XAxis/SecondScaleUnit beállítással kell megadni, amely értékkészlete Minute, Hour, Day, Week, Month, Year, None lehet. Tehát ha a Unit értéke Minute, akkor a SecondScaleUnit értéke Hour legyen.

Az XAxis/SecondScaleDisplayFormat beállítással kell megadni a másodlagos X tengelyen megjelenő időpont formátumát. A lehetséges beállításokat a következő web-oldalon lehet megtekinteni: https://docs.dhtmlx.com/scheduler/settings_format.html.

SectionList

A megjelenítő a ViewType=SectionList node hatására aktivizálódik. A HTMLTemplate node belsejében azt a HTML template-t kell megadni, ami az egyes szakaszok megjelenítését írja le. A hivatkozások ugyanúgy kicserélődnek, mint a többi megjelenítőben,.

Felhasználható attribútumok:

  • width: A kártya szélességének állítása, célszerű, hogy auto maradjon az értéke.
  • height: A kártya magasságának állítása, célszerű, hogy auto maradjon az értéke.

Példa:

<HTMLTemplate width="auto" height="auto">
    <![CDATA[
        <div class="listview_item_content_01">
        <div style="margin:[##Margin##];text-align:[##Align##];font-size:12px;">
            <div>[##Hivatkozas_Tipus##] [##[##type##]_Name##] [##EditTitle##] [##EditMegallapitas##] [##EditMegallapitasForNew##] [##Edit_ProjectName##]</div>
        </div>
    ]]>
</HTMLTemplate>

HTMLTemplates

A Table és TransposedTable megjelenítőket leszámítva a kártyák alapjául szolgáló html definíciót a HTMLTemplates node-al összefogott HTMLTemplate node-al lehet megadni.

A HTMLTemplate beállításban lehet megadni, hogyan nézzen ki, milyen tartalommal bírjon egy kártya. A tartalma lehet egy html kifejezéseket tartalmazó szöveg illetve egy url is. Az url egy html elemeket tartalmazó html fájlra kell hivatkoznia. Az Effector a [##Name##] jellegű kifejezéseket cseréli le az adatbázisből érkező értékekre, ebben az esetben a Name oszlop értékei cserélődnek le.

  • width: Ezzel az attribútummal lehet megadni a kártya szélességét (pixelben).
  • height: Ezzel az attribútummal lehet megadni a kártya magasságát (pixelben).
  • isTemplateURL: Ebben az attribútumban lehet megadni, hogy a beállítás értéke egy URL (true) vagy sem (false). (Példa 2)
  • when: Alternáló kártyákat ezzel és az is beállítással lehet megadni. Az értéke egy oszlop neve, amely értéke szerint akarjuk eldönteni melyik kártya template-et akarjuk használni. A when nelküli definíció az alapértelemezett kártya template. (Példa 3)
  • is: Alternáló kártyákat ezzel és az when beállítással lehet megadni. A when-ben adott oszlop értékét kell itt beállítani, amely alapján eldöl ez a kártya template kell. (Példa 3)

Példa 1:

<HTMLTemplates>
    <HTMLTemplate><![CDATA[
        <div class="listview_item_content_01" style="background:url(core/gfx/images/card_organization_bg.png);overflow:hidden;height:100%">
        <div style="height:17px;font-size: 13px;top:2px;left: 55px;position:absolute;width: 237px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff;">[##Name##]</div>
            <div class="CmpBtn" style="position:absolute;top:0px;right:0px;font-size:25px;color:#fff;">[##EditLink##]</div>
            <div style="left: 55px;font-size:12px;width: 240px;height:35px;position:absolute;top: 51px;color:#555555;text-overflow:ellipsis;overflow:hidden;" title="[##Zip##] [##City##], [##Street##] [##StreetNumber##]."><span style="color:#D57D62;">Cím:</span> [##Zip##] [##City##], [##Street##] [##StreetNumber##].</div>
        </div>
    ]]></HTMLTemplate>
</HTMLTemplates>

Példa 2:

<HTMLTemplates>
    <HTMLTemplate isTemplateURL="true">delivery/html/card.html</HTMLTemplate>
</HTMLTemplates>

Példa 3:

<HTMLTemplates>
    <HTMLTemplate isTemplateURL="true" when="priority_level" is="high">delivery/html/high_prio_project.html</HTMLTemplate>
    <HTMLTemplate isTemplateURL="true" when="priority_level" is="low">delivery/html/low_prio_project.html</HTMLTemplate>
    <HTMLTemplate isTemplateURL="true">delivery/html/project.html</HTMLTemplate>
</HTMLTemplates>

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