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

Fejlesztői kézikönyv 6.2

XML Referencia 6.2

Effector Studio 3.2 összefoglaló

Effector Studio 3.2 kézikönyv

Táblázatok és Kontroll Panel Kontrollok

Az első megjelenítő, amellyel 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 DisplayDefinitionből származnak, így a lényegi különbséget a beállított HTML kódrészlet jelenti. Később részletesen áttekintjük, miről is van szó.

A táblázatos megjelenítők önmagukban csak felületleíróként szolgálnak, ezért kapcsolódik egy adatdefiníciós fájl is mindegyik DataDefinitionhö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 adatdefiníció, mind a megjelenítő definíciója újrafelhaszná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érnek vízszintesen, egymás mellé helyezi, utána új sort kezd. A kártyákat lehet csoportosítani is.
  • CardMatrix: Az adatok mátrixszerű 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 altípusokhoz 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ípusfüggő funkciók beállítása
  • Linkelt 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 altípushoz tartozó beállítások

A gyökérelemben található egyszerű node-ok 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 Studió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 node-ban 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 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.

  • Email CompanyName
  • 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 node-ban 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 azt, hogy hány sort töltsön le az Effector egy oldalra. 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őnye, hogy egy sor biztosan kijelölhető. Hátránya, hogy új rögzítés/újratöltés 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őnye, hogy megjegyzi, melyik sor volt kijelölve, illetve új felvitel után kiválasztja a sort (ha benne van a lekért oldalban). Hátránya, hogy 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. Általánosságban elmondható, hogy ezek a beállítások true vagy false értéket vehetnek fel, az alapértelmezett érték a 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/bekapcsolá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/bekapcsoló 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/bekapcsolása
  • IsToolsTogglerVisible: Table megadja, hogy 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: megadja, hogy az eszköztáron megjelenő kuka ikonra kattintás melyik ControlPanelen 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 az 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értelmezett é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értelmezetten egy cella. A sormagasság számítást az oszlopok definiálásakor kell megadni az IsMultiline beállítással, a rendszer ezen oszlopok értékeit figyeli a sormagasság számítás során. Ezen beállítás használata esetén nem értelmezett az automatikus oszlop szélesség állítás.
  • 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 megadni a csoportosítás irányát, értéke lehet Asc vagy Desc.
  • Az IsPinningEnabled beállítással lehet szabályozni, hogy az oszlopok rögzítését lehetővé tévő lenyíló lista megjelenik vagy sem. Értéke lehet true vagy false. Az alapértelmezett érték: true, vagyis megjelenik a lenyíló lista.
  • Az IsEditToolVisible beállítással lehet megadni, hogy az eszközöket tartalmazó oszlopban megjelenjen vagy sem a ceruza ikon. A ceruza ikon tulajdonképpen az első Formot felhozó Link-en kattintást szimulál. Az automatikus kiválasztás a columnName attribútummal lehet felülbírálni, ebben a beállításba annak az oszlopnak a nevét kell megadni, amelyre Link van definiálva.
  • Az AutoSelectAllRows beállítás lehet szabályozni, hogy többszörös kijelölés esetén a táblázat megjelenésekor illetve infilter változásakor automatikusan kijelölésre kerüljenek-e a látható sorok.

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 megjelenjen-e 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 (CotrolPanelen definiált DeleteObjectButtonról van szó).
  • A megjelenítő képes a táblázatban megjelenő oszlopokat 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-dal 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, amelyet 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 csoportba 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-dal ö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-dal 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értelmezett érték Database. 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értelmezett é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értelmezett é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.
  • Az IsPinned beállítással lehet megadni, hogy az adott oszlop balra legyen rögzítve. Alapértelmezett értéke 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értelmezett é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-perc részét jeleníti meg a rendszer.
    • DateTimeWithSeconds: A cellában levő időpont értéknek dátum és óra-perc-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 mely 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 node-ban 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-tel 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ő kontroll 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. 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ű oszlopot, 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 Controlok

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: ComboBoxhoz 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 a 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 megadott 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 filterbő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>

Lehetőség van a felületen a szűrőmezők szabályainak kiértékelésekor egy másik szűrő értékét figyelembe venni. A ComputedValue szabály kivételt képez ez alól, az nem fog lefutni. A szűrőmezők esetében a Visible, a Readonly, a Required és a ComputedValueList szabályok kiértékelésének van értelme. A szabályokban egy másik szűrőre a [##CPControl.##] formában lehet hivatkozni. Lehetőség van operátor nélküli szűrőt paraméterezni, ezek nem indítanak szűrést. Arra lehet például használni ezt a lehetőséget, hogy a szűrőmezők egyes csoportját elrejtsük vagy megjelenítsük.

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 ComboDefinitionben szereplő SQL mondatnak a WHERE részének tartalmaznia 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ésére 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>

Lehetőség van arra, hogy új elem rögzítésekor ne a hagyományos lenyíló lista jelenjen meg, hanem egy képernyő. Az új beállítások a következők:

  • OnButtonClick/SubTypeList/Screen: ebben a beállításban kell megadni annak a képernyőnek a nevét, amelyik a gomb megnyomásakor megnyitásra kerül.
  • OnButtonClick/SubTypeList/SreenColumnName: Ebben a beállításban lehet megadni, hogy a felugró képernyőn lévő táblázat melyik oszlopa tartalmazza az új elem rögzítéséhez használni kívánt képernyőt (pl ScreenProject). Ha ez a beállítás üres, akkor a gombnál megadott Screen lesz az.
  • OnButtonClick/SubTypeList/BusinessObjectColumnName: Ebben a beállításban lehet megadni, hogy a felugró képernyőn lévő táblázat melyik oszlopa tartalmazza az új elem rögzítéséhez használni kívánt fő BusinessObject nevét. Ha ez a beállítás hiányzik, akkor a gombnál a BusinessObject beállításban eredetileg megadott lesz használva.
  • OnButtonClick/SubTypeList/SubTypeColumnName: annak az oszlopnak a neve, amely tartalmazza az altípus nevét.
  1. NewProject NewObjectButton Új MMExample BusinessObjectProject ScreenProject ScreenNewWorkflow Screen BusinessObject ObjectType

A gomb megnyomására a ScreenNewWorkflow képernyő nyílik meg. A táblázat Screen oszlopa fogja tartalmazni az új elem rögzítésére használt képernyő nevét. A táblázat BusinessObject nevű oszlopa tartalmazza az új elem rögzítéséhez használt fő BusinessObject nevét (BusinessObjectProject). A táblázat ObjectType oszlopa tartalmazza az altípus nevét.

  1. NewProject NewObjectButton Új MMExample BusinessObjectProject ScreenProject ScreenNewWorkflow ObjectType

A gomb megnyomására a ScreenNewWorkflow képernyő nyílik meg. A képernyőn kiválasztott altípus a ScreenProject képernyőn keresztül lesz rögzítve, BusinessObjectProject fő-, BusinessObject altípusa lesz. A táblázat ObjectType oszlopa tartalmazza az altípus nevét.

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 azt, 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/ActionType node meghatározza a nyomógomb típusát, vagyis azt, 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-ek 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ő weboldalt.

  • Url: a megnyitni kívá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.
  • UrlWindowOptions: a felugró ablak paramétereit lehet benne megadni. Például: menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes

Példa:

<Control>
    <Name>UrlLink</Name>
    <Type>ActionButton</Type>
    <Caption>Külső hivatkozás</Caption>
    <OnButtonClick>
        <ActionType>OpenUrl</ActionType>
        <Url>http://www.google.com</Url>
        <UrlWindowOptions></UrlWindowOptions>
    </OnButtonClick>
</Control>

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, 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 tagben
  • TemplatePath: a template abszolút elérési útja
  • 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__” sheetnek (akár elrejtve is), 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__” sheeten 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 sheetek neve a DisplayDefinition Caption tagjé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 tagben megadott DisplayDefinition az Excel 1-1 sheetjére kerül, a felsorolási sorrendben.
  • Ha csak az ExcelTemplate taget 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 Excelbe 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áláshoz 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átumban 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 ugyanú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útum 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értelmezett é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 node-ok állnak rendelkezésre:

  • DataDefinition: Az adatforrás meghatározását végezhetjük el vele, annak a DataDefinitionnek 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 kontrollon 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-csel, 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-dal é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 node-nak 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 Linkhez kapcsolt ControlPanel Control fogja elvégezni, ezt az összekapcsolást az adott Link node ControlPanelControl nodej-ának beállításával tehetjük meg, az értéknek egy PRS-t megvalósító Control azonosítóját kell tartalmaznia.
  • Outer esetén a linkre kattintva egy külső DLL hívható meg. A műveletet a Linkhez kapcsolt ControlPanel Control fogja elvégezni, ezt az összekapcsolást az adott Link node ControlPanelControl node-jának beállításával tehetjük meg, az értéknek egy PRS-t megvalósító Control azonosítóját kell tartalmaznia.
  • 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>
        <ControlPanelControl>ActionButton_DocGen</ProcessResultSetControl>
    </Link>

    <Link>
        <Type>Outer</Type>
        <ColumnName>ProjectName</ColumnName>
        <ControlPanelControl>ActionButton_Dll</ProcessResultSetControl>
    </Link>
</Links>

Egy link meghatározásához felhasználható node-ok 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 MinorMenun jelenjen meg.
  • Screen: Az új képernyő az adott munkamódszeren belül ebben a node-ban adható meg a már ismert képernyő referenciával. (A ReferencedMinorMenu node-ban megadott MinorMenuben nem kell szerepelnie)
  • FilterInUrl: Csak OpenUrl típus esetén van értelmezve.
  • ControlPanelControl: Csak ProcessResultSet és Outer típus esetén van értelmezve.
  • ProcessResultSetSubType: Csak ProcessResultSet típus esetén van értelmezve. Itt lehet megadni annak a BusinessObject altípusnak a nevét, amit használni kell a PRS-hez tartozó karbantartó képernyő megnyitásakor.
  • 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értelmezett é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ártyá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álhatjuk bármely HTML taget, 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 template-ben 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 DataDefinitionben 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 jelennek 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ó az 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 combóból például 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, valamint 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 node-ok 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 ActionButtonben (a ControlPanelen 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 ActionButtonben (a ControlPanelen 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értelmezett értéke 0.
  • EndHour: A naptárban naponta csak eddig az óráig végződő elemek jelennek meg. Alapértelmezett értéke 24.

Példa:

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

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 ugyanez 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.

A Timeline nézetet 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, 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 és Year. Az alapértelmezett értéke Day. A példában az X tengelyen perces 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ő weboldalon 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 perces (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 nagynak 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 és 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ő weboldalon 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-dal összefogott HTMLTemplate node-dal 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-nek 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 nélküli definíció az alapértelmezett 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: 32 hét 6 napja
  • Effector