DataSource - dátový zdroj (entita a služba)

V SmartClient aplikácií je DataSource popisom jednotky biznis modelu, v podobe kombinovanej Entity (definícia dátových polí) a Služby (volateľné metódy služby).

Formátom je JavaScript, a v týchto definiciách sú konkrétne GUI nastavenia, alebo ich variácie.

Dátových zdrojov môže byť mnoho (z rôznych serverov) a musia mať unikátne ID a v prípade služieb zobrazujúcich dáta aj dataURL.

Ich samotný kód môžu generovať serverové aj klientské adaptéry-

DataSource teda vzniká z nejakého meta-modelu, a môže sa
IDjednoznačný a povinný názov DataSource - napr. Zamestnanec, alebo firma_org_Jednotka (namiesto bodiek)
metaIDnepovinný perzistentný nemenný identifikátor (podľa backendu)
dataURLurl pre Službu (nastaviteľné aj pre jednotlivé metódy), napr. /service/{ID}/, /sluzba?_dataSource={SERVICE} , https://host:1234/invoke.php?service={SERVICE}
javaClassFully qualified class name
inheritsFromID zdedeného DS
interfacesčiarkou oddelený zoznam zdielaných chovaní na server/klient, napr. auditable, version, status či document
moduletriedenie do package

DataSource sa môže stiahnuť z backendu on-demand. Skontroluje sa dedičnosť a použité asociácie, a stiahnu sa tiež (ak chýbajú). Potom sa zavolá callback. Naopak ak už je všetko k dispozícii, callback sa spustí ihneď.

// a/synchrĂłnne Root.getDataSource('serverDS1', function(dataSource) { // some callback ... widget.setDataSource(dataSource); }); DataSource.create({ // tvorba ID: 'ds2', metaID: 2, inheritsFrom: 'serverDS1', javaClass: 'sk.f4s.albiq.demo.DS1' }); var ds1 = DataSource.get('ds2'); // referencia podla ID var ds1 = DataSource.get(2); // referencia podla metaID

Fields

Objekt s názvom poľa ako kĺúčom, hodnotou ako vlastnosťami. Poradie polí je dané fyzickým poradím, zdedené polia sa pripoja nakoniec (zmena poradia cez useParentFieldOrder). Zadané vlastnosti majú všeobecný charakter.

Viac o poliach

Niektoré polia majú špeciálny význam - napríklad nadpis (titleField), popis alebo hodnota.

Pre custom GUI potreby (detaily, formuláre, zoznamy...) je možné zadávať hybridné text/object polia, ktoré sú dedičné a rekurzívne (odkaz na ne je textový, napr '$auditables'). Ak názov fieldSetu končí na 'Fields', na zobrazujúci komponent sa môžu, aplikovať vlastnosti pod kľúčom ...Props.

DataSource.create({ ID: 'audit', fields: { id: {type:'integer', canEdit: false}, version: {type: 'integer', hidden: true} }, // shared fieldSet auditables: [ 'id', {name: 'version', hidden: false} ] }); DataSource.create({ ID: 'Zamestnanec', inheritsFrom: 'audit', fields: { celeMeno: {type: 'text', required: true, length: 32}, mzda: {type: 'float', canEdit: false}, vzhÄľad: {type:'longtext', detail: true} } // celĂ˝ zoznam // celeMeno,mzda,id,-version // polia pre zoznam ($ = vloĹľiĹĄ inĂ˝ fieldSet) listFields: ['celeMeno,mzda', '$auditables' ], // vlastnosti pre 'zoznam' komponent listProps: { canExpandRecords: true } });
fieldsObject s poÄľami
titleFieldnázov poľa pre textovú reprezentácia záznamu, nadpis (napr. priezvisko))
infoFieldnieÄŤo ako podnadpis (napr. meno)
dataFieldnajdôležitejšia netextová hodnota (napr. vek)
descriptionFieldbližší popis záznamu (napr. pozícia)
indexField Ktorý field sa používa ako index (poradie) v rámci agregácie. Zapne zobrazenie indexu v prvom stĺpci zoznamu (showRowNumbers, rowNumberField), vypne možnosť zoraďovania, či zapne drag-reorder poradia riadkov.
treeParentktoré pole je identifikátorom parenta (pre stromové štruktúry)
isFolderPropertyktoré pole určuje, či máme children (performance)
listFieldspolia pre použitie v zoznamoch, pridateľné polia sú ukryté cez showIf:'false'
detailFieldspolia pre detailné zobrazenie zázamu, aj editovateľné
editFieldspolia čisto pre editáciu záznamu
pickFieldsvýber v pickList/comboBox
assocFieldszobrazenie ako súčasť iného detailu
*Fieldsexplicitný fieldSet pre custom prípady, alebo slúžiace na kompozície
*Propspre daný fieldSet, vlastnosti aplikované na zobrazujúci komponent

FieldSet include sa robí pomocou $ prefixu a názvu iného setu (aj v zdedených DS) ako sufixu. Pozor sa dáva na rekurzivitu a vkladanie polí optimalizované pre iné konktrétne použitie (napr. list vs detail).

FieldSet je array: objektov definícií obsahujúcich povinne name poľa; stringov ako čiarkou oddelený zoznam názvov názvov polí, pričom za názovom a dvojbodkou môže byť ešte typ poľa type

DataSource.create({ ID: 'FieldSetDemo', fields: { a: { ... }, - z: { ... } }, mainFields: ['a,b,c', {name:'d', colSpan: 2}], valueFields: [{name:'total', canEdit:false}, 'f,g', 'h'], pickFields: ['a:float,b:integer', 'h'], listFields: ['$mainFields,$valueFields,i,j', 'k', {name:'m', showIf:'false'}], editFields: ['$mainFields', 'h'], detailFields: ['$editFields', '$valueFields', 'i,j,k'] });

Operácie

Operácie sú RPC (ale aj clientOnly) metódy ponúkane Serverom na danom DS pre aktuálneho používateľa. Majú definované argumenty, návratovú hodnotu a prepisovateľné chovanie na GUI, v rámci lifecycle.

Viac o operácii

DS rozdeluje viditeľné operácie podľa spôsobu použitia na Zozname a Detaile (s možnosťou upresnenia):

listovacievracajú zoznam záznamov, napr. podľa filtra
vytváracietieto operácie založia nový záznam, typu návratovej hodnoty
detailpodľa primárneho kľúča získavajúce kompletný záznam, pre zobrazenie na Detaile
detail akcieoperácie nad konkrétnym záznamom
masové akcieoperácie nad zoznamom záznamov
ostatnéiné neurčiteľné operácie
operationsarray definĂ­ciĂ­
DataSource.create({ ID: 'OperationsDemo', field: { id: {type:'integer', required: true}, nadpis: { colSpan: 2 } }, operations: { zmenNadpis: { args: { id: { dataSource: 'OperationsDemo', type: 'integer'}, // key nadpis: {type: 'text' } }, return: {type: 'OperationsDemo', dataSource: 'OperationsDemo'} // refresh } } });

Lokalizácia

DataSource je vytvorený v jazyku používateľa (anglicky, slovensky), prekladané sú aj názvy a popisy polí, operácií a argumentov, ako aj syntetických GUI položiek.

titleNadpis triedy daného záznamu - napríklad 'Interný zamestnanec'
pluralTitleNadpis pre službu alebo iné zoznamy - 'Interní zamestnanci'
field.titleHlavnĂ˝ nadpis poÄľa
field.shortNadpis poľa v skrátených prípadoch (tlačítko, list header)
field.promptPopist poÄľa, tooltip
localesinak implemetovaná prekladová mapa názvov polí a ich popisov
{ title: 'Firemné auto', pluralTitle: 'Firemné autá', fields: { znacka: { title: 'Evidenčné číslo', shortTitle: 'EČV', prompt: 'Osadená zákonná značka na vozidle' } }, locales: { poslednaEK: 'EK', poslednaEK_prompt: 'Posledná emisná kontrola' } }

Ikony

DataSource používa vlastný systém ikon, ktorý obchádza obsah a accessibility. Používa na to I (HTML5 obsolete) tag, s určením sady a ikony pomocou css class.

Icon font FontAwewome používa predponu 'fa', alebo vlastný set 'svg' definuje SVG ikony, pomocou zápisu <i class="svg svg-user"></> zobrazí ikonu

ficonVybraná ikona sa používa v menu a v nadpise DataSource
field.ficonIkona poľa sa použije na detaile alebo formulári
{ ficon: 'fa fa-users', // icon FontAwesome ficon: 'img img-delete', // .png images ficon: 'ifc ifc-confirm', // based on iconf-font custom fields: { iconedField: { ficon: 'fa fa-cog' } }, fieldSet: [ {name:'userName', ficon: 'fa fa-user' } ] }

Interfaces

Špeciálne server/klient chovani, ako čiarkou odelený zoznam v interfaces. Na GUI definuje upraviť chovanie alebo zobrazenie významných polí (napr. výrazne v title alebo tools častiach widgetov)

auditable
versionableobsahuje pole version (server optimistic-locking). mohol by umoĹľniĹĄ merge poÄŤas konfliktu
calendarobsahuje údaje pre zobrazenie v čase (napr. v kalendári či dashboarde), potrebuje infoField/descriptionField a dátumy zatiatok, koniec a voliteľný kedy presne zobraziť. isEvent = legacy DS property
documentokrem titleField, infoField a descriptionField môže pridávať Tagy alebo thumbnail image. Hovorí, že objekt má meta informácie použiteľne v HTML, SEO
taggabledefinuje kategorizáciu podľa Tagov
discussion

Server chovanie

Nastavenia pre samotné dáta, ktorými disponuje na klientovi tento DS. Dáta sa získavajú zo servra alebo sú kalkulované na klientovi, môžu byť statické alebo mať omedzenú platnosť.

clientOnlytrue vypni volanie servra (staické/kalkulované dáta)
cacheAllDatatrue načíta všetky dáta a dá do cache, počas prvej potreby (cacheAllOperationId - alternatívna operácia na tieto účely)
cacheDatastatické alebo aktuálne data ako array záznamov
cacheMaxAgesekúnd do vypršania platnosti cache
hasCompleteRecordsdáta pre zoznamy sú považované za kompletné, a pre detail nie je potrebné zavolať napr. findById

GUI chovanie

hasDetailfalse vypne možnosť zobrazovať záznam ako detail
forceDetailtrue vynĂşti zobrazenie Detail na split-screen hneÄŹ po otvorenĂ­
autoFetchDatafalse vypne automatické načítanie dát hneď po zobrazeni Listu
canReuseDetailfalse vypne možnosť prepoužitia Detailu na editáciu pre operácie, ktoré to umožňujú.
canPrintfalse vypne moĹľnosti tlaÄŤe SC
canFilternapriek operáciám, vypne server filter
canDefineViewfalse vypne moĹľnost ukladaĹĄ nastavenĂ­
canSortfalse vypne moĹľnost triedenia poradia
canMultiSortfalse vypne triedenie podÄľa viac ako jednej voÄľby
defaultSort-date,name default triedenie zoznamu záznamov
canHilitefalse vypne možnosti rozlišovania
canExportDatafalse vypne export zoznamu/záznamu do súboru
detailWindowbool - open detail in popup window

GUI rendrovanie

serviceDetailPositionpoloha bottom, top, left, right urÄŤĂ­ kde bude Detail voÄŤi Listu na split-screen.
toolsDetailWidgetpoloha toolbaru na Detaile
toolsServiceWidgetpoloha toolbaru na Zozname
autoFilterEditorautomaticky zobrazovať filter editor v Liste (ak podporuje hľadacia operácia)
autoFilterEditorautomaticky zobrazovať filter editor v Liste (ak podporuje hľadacia operácia)
hilitesfarebné zvýrazňovanie riadkov

MetĂłdy

copyRecord[s](recs)skopíruje record alebo pole recordov s použitím len dátových kľúčov
filterData(criteria,callback)
getField(name)
getFieldNames(noHidden)
getPrimaryKeyFieldName()
invalidateCache()
appendTitle
appendTools
optimizeDetailField(fld, widget)
optimizeEditField(fld, widget)
optimizeListField(fld, widget)
fieldLocale(key)
getTitleService()
getRecordTitle(rec)
getInheritedProperty(prop)získanie najbližšej hodnoty (dedičnej) vlastnosti DS
isInheritedFrom

RĂ´zne

Hilites

Farebné zvýrazňovanie riadkov alebo buniek zoznamov sa dehe pomocou pola hilites.

Definícia zvýraznenia obsahuje najčastejšie podmienky aplikovania, zoznam stĺpcov (inak celého riadku), a CSS kód.

criteriaCriteria výberu riadku, na ktorý sa Hilite aplikuje
cssText CSS štýly pre bunku/y
fieldNamenázov stĺpca, alebo pole názvov
htmlAfter HTML pred hodnotou
htmlBeforeHTML za hodnotou
titlenázov pravidla (pre editovacie účely)
textColor, backgroundColorlegacy color codes

Farba textu alebo pozadia môže byť daná ako konštanta, ktorú aplikuje každý Skin:
$TITLEFIELD

['.TITLECOLOR', '.ACTIVE', '.DONE', '.WARN', '.ERROR', '.CANCEL']


Sort