Promotic

Popis zdrojového souboru objektu PmaReport

Technologie objektu PmaReport je orientována především pro zdrojové soubory ve formátu HTML a XML a proto je nutno mít určitou znalost syntaxe HTML včetně souvisejících CSS stylů. Lze však používat i prosté TXT soubory.

Pro snadnější pochopení následujících popisů je vhodné se podívat na Příklady reportů.

Základní princip

Základní princip objektu PmaReport je, že načte zdrojový soubor, nalezne v něm příkazy a tyto příkazy provede. Příkaz ve zdrojovém souboru má vždy tvar <!--Pm:xxxxxxxx--> kde xxxxxxxx je tvar konkrétního příkazu (<!-- --> představuje HTML poznámku a proto se lze na HTML zdrojový text dívat například ve Web prohlížeči i když jsou v něm příkazy).
Provedením příkazu se vždy změní obsah zdrojového souboru a příkaz samotný je z obsahu odstraněn.

Většina příkazů používá parametry. Tyto parametry ovlivňují daný příkaz. Hodnotou parametru může být:
- Konstanta (text - například "ahoj", číslo - například 3.14)
- Hodnota klíče dosazeného do objektu PmaReport metodou SetKeyValue (a tak tvořit obsah z aktuálními daty z aplikace). Například pokud do objektu PmaReport je vložen klíč SetKeyValue("txt1","Teplota kotle přesáhla 80 stupňů Celsia"), pak se lze v příkaze na text klíče odkazovat identifikátorem key.txt1.
- Makro výraz, který se vyhodnotí při provádění příkazu. Například užitečný může být Makro výraz $.text pro zadání lokalizovaných textů. Makro výraz $vb nelze použít.
- Hodnota příkazu cyklu - viz dále u příkazů Pm:Cycle....
- Výrazy v syntaxi jazyka JavaScript, např. 1+key.val1. Viz Operátory JavaScript a popis syntaxe.

Pm:SetText - Příkaz pro přímé vložení textu

Celý příkaz se zamění textem vyhodnoceným tímto příkazem

Syntaxe:
<!--Pm:SetText(sValue)-->


Parametry:
- sValue: Hodnota (text), která nahradí (přepíše) příkaz


Příklad1:
Pokud bylo nastaveno:
oReport.SetKeyValue("value1", "Teplota kotle přesáhla 80 stupňů Celsia")
pak bude v obsahu zdrojového souboru úsek:
<!--Pm:SetText(key.value1)-->
nahrazen textem:
Teplota kotle přesáhla 80 stupňů Celsia
Příklad2:
Pomocí Makro výraz $.text bude příkaz nahrazen lokalizovaným textem s identifikátorem txt1.
<!--Pm:SetText($.text("app","txt1")-->


Pm:TagSetValue - Příkaz pro změnu hodnoty tagu

Příkaz vloží nebo změní hodnotu bezprostředně následujícího HTML nebo XML tagu (tento příkaz tedy není určen pro TXT zdrojové soubory)

Syntaxe:
<!--Pm:TagSetValue(sValue)-->


Parametry:
- sValue: Hodnota, která bude vložena do HTML/XML tagu


Příklad:
Pokud bylo nastaveno:
oReport.SetKeyValue("value1", "Teplota kotle přesáhla 80 stupňů Celsia")
pak bude v obsahu zdrojového souboru úsek:
<!--Pm:TagSetValue(key.value1)-->
<h1></h1>
nahrazen textem:
<h1>Teplota kotle přesáhla 80 stupňů Celsia</h1>


Pm:TagSetAttr - Příkaz pro změnu atributu tagu

Příkaz vloží nebo změní hodnotu atributu bezprostředně následujícího HTML nebo XML tagu (tento příkaz tedy není určen pro TXT zdrojové soubory).

Syntaxe:
<!--Pm:TagSetAttr(sName,sValue)-->


Parametry:
- sName: název HTML/XML atributu
- sValue: Hodnota, která bude vložena do HTML/XML atributu


Příklad1:
Pokud bylo nastaveno:
oReport.SetKeyValue("value2", "xyz")
pak bude v obsahu zdrojového souboru úsek:
<!--Pm:TagSetAttr("class",key.value2)-->
<h1>Title</h1>
nahrazen textem:
<h1 class="xyz">Title</h1>
Příklad2:
Pomocí výrazu $.path("appres") bude do atributu src tagu <img> nastavena cesta k obrázku picture.jpg.
<!--Pm:TagSetAttr("src", $.path("appres","picture.jpg"))-->
<img src="" title="picture.jpg"/>


Pm:TagSetStyle - Příkaz pro změnu stylu tagu

Příkaz vloží nebo změní hodnotu stylu bezprostředně následujícího HTML nebo XML tagu (tento příkaz tedy není určen pro TXT zdrojové soubory).

Syntaxe:
<!--Pm:TagSetStyle(sName,sValue)-->


Parametry:
- sName: název HTML CSS stylu
- sValue: Hodnota, která bude vložena do HTML CSS stylu


Příklad:
Pokud bylo nastaveno:
oReport.SetKeyValue("value2", "#ff0000")
pak bude v obsahu zdrojového souboru úsek:
<!--Pm:TagSetStyle("background-color",key.value2)-->
<h1>Title</h1>
nahrazen textem:
<h1 style="background-color:#ff0000;">Title</h1>


Pm:If.. (Pm:If..Pm:IfElse)- Příkaz pro vyhodnocení jednoduché podmínký

Výrazy v podmínce mohou obsahovat konstanty, hodnotu klíčového slova, proměnné z cyklu. Lze použít jednořádkovou formu (1. syntaxe) pro krátké, jednoduché testy. Bloková forma (2. syntaxe) však poskytuje více flexibility a strukturovanosti než forma jednořádková. Při provádění bloku je testována podmínka. Pokud podmínka je true, pak provedou se následující příkazy. Pokud podmínka je false (2. syntaxe), pak provedou se příkazy v bloku IfElse.

Syntaxe:
<!--Pm:IfBegin(podmínka)-->
...
<!--Pm:IfEnd-->


nebo:
<!--Pm:IfBegin(podmínka)-->
...
<!--Pm:IfElse-->
...
<!--Pm:IfEnd-->


Tvar podmínky:
Hodnota1 == Hodnota2 : rovno
Hodnota1 != Hodnota2 : není rovno
Hodnota1 < Hodnota2 : menší než
Hodnota1 > Hodnota2 : větší než
Hodnota1 <= Hodnota2 : menší nebo rovno
Hodnota1 >= Hodnota2 : větší nebo rovno


Příklad1:
Pokud bylo nastaveno:
oReport.SetKeyValue("req", 3)
pak bude v obsahu zdrojového souboru úsek:
<!--Pm:IfBegin(key.req==3)-->
  <p>test</p>
<!--Pm:IfEnd-->
nahrazen textem:
  <p>test</p>
v jiném případě se odstraní celý úsek včetne textu mezi těmito dvěma příkazy.


Příklad2:
Pokud bylo nastaveno:
oReport.SetKeyValue("req", 3)
pak bude v obsahu zdrojového souboru úsek:
<!--Pm:IfBegin(key.req!=3)-->
  <p>test1</p>
<!--Pm:IfElse-->
  <p>test2</p>
<!--Pm:IfEnd-->
nahrazen textem:
  <p>test2</p>
v jiném případě se odstraní celý úsek včetne textu mezi těmito dvěma příkazy.


Pm:VarSet - Příkaz pro vytvoření a nastavení hodnoty proměnné

Tento příkaz vytvoří a nastaví hodnotu proměnné. Tato proměnná lze použít v následujících příkazech při tvorbě vzoru.

Syntaxe:
<!--Pm:VarSet(sKey,sKeyName,Value)-->


Parametry:
- sKey: Klíč
- sKeyName: Název proměnné
- Value: Hodnota proměnné


Příklad1:
Vytvoří proměnnou bDone, a přiřadí ji hodnotu 1.
<!--Pm:VarSet("key","bDone",1)-->
Příklad2:
Test, zda byla zadána vstupní hodnota bDone. Pokud ne, pak ji vytvoří a přiřadí ji hodnotu 0.
<!--Pm:IfBegin(!key.bDone)-->
  <!--Pm:VarSet("key","bDone",0)-->
<!--Pm:IfEnd-->

PmLib.GetArraySize - Zjistí rozměry pole

Vrací 1. nebo 2. rozměr proměnné typu Array.

Syntaxe:
PmLib.GetArraySize(key.arr,n)


Parametry:
- arr: název proměnné pole (array).
- n: 1 pro zjištění prvního nebo 0 druhého rozměru
pro zjištění prvního rozměru je povolen i zkrácený zápis:PmLib.GetArraySize(key.arr)

Pm:Cycle... - Příkaz pro jednofázové rozmnožení textu (jednoduchý cyklus)

Tento příkaz je určen pro jednoduché rozmnožení textu v tomto smyslu: Ve zdrojovém souboru je např. tag:
<p> </p>
a je nutno vyplnit do tohoto tagu postupně všechny hodnoty z dodaného pole hodnot. To znamená, že chceme aby se tento tag rozmožil a výsledkem bylo např.:
<p>1234</p>
<p>3.14</p>
<p>56.8</p>
<p>-345</p>
Právě tuto potřebu řeší tento příkaz. Nejběžněji se tento příkaz používá například pro rozmnožení řádků v tabulce (tzn. pro rozmnožení tagu <tr> v tagu <table>) - viz Příklad3. Koncepce je ale obecná a může sloužit například i pro rozmnožení hodnot v textovém souboru, atd.

Syntaxe:
<!--Pm:CycleBegin(sId,PmLib.GetArraySize(key.arr,1))-->
... (rozmnožované texty a další příkazy, například Pm:TagSetValue)
<!--Pm:CycleEnd(sId)-->


Parametry:
- sId: identifikátor cyklu. CycleBegin a jemu příslušný CycleEnd musí mít stejný identifikátor. Identifikátor se používá i pro zjištění proměnné cyklu (v podobě například id.sId.Index).
- PmLib.GetArraySize(key.arr,1): počet rozmnožení (např. počet řádků)


Proměnné cyklu (tyto proměnné lze použít v příkazech uvnitř cyklu):
- id.sId.Index: index cyklu (indexováno od 0), např. index zpracovávaného řádku.
- PmLib.GetArraySize(key.arr,1): počet položek, např. celkový počet řádků.


Příklad3:
Metodou SetKeyValue je do klíče arr je uloženo 2-rozměrné pole. Počet sloupců pole je vždy 3, počet řádků je proměnlivý a je uložen do klíče rows. Příkaz ve zdrojovém souboru pak může vypadat následovně:
<table>
  <tr>
    <th>Col1</th>
    <th>Col2</th>
    <th>Col3</th>
  </tr>
  <!--Pm:CycleBegin("cyc",PmLib.GetArraySize(key.arr,1))-->
  <tr>
    <!--Pm:TagSetValue(key.arr[0][id.cyc.Index+1])-->
    <td></td>
    <!--Pm:TagSetValue(key.arr[1][id.cyc.Index+1])-->
    <td></td>
    <!--Pm:TagSetValue(key.arr[2][id.cyc.Index+1])-->
    <td></td>
  </tr>
  <!--Pm:CycleEnd("cyc")-->
</table>


Pm:CyclePage... / Pm:CycleLine... - Příkaz pro dvoufázové rozmnožení textu (dvojitý cyklus)

Tento příkaz zobecňuje předchozí jednoduchý cyklus na možnost rozmnožit například nejen řádky v tabulce ale zároveň i rozmnožit tabulky. Řeší to případ, kdy počet řádků v tabulce je hodně velký a je potřeba tuto tabulku rozdělit na více částí aby se pak při tisku tiskla každá část zvlášť se svým záhlavím, atd. Přitom je požadováno ať vstupem může být jen velké pole hodnot (co hodnota to řádek) a ať si příkaz tyto hodnoty sám rozděli do tabulek a řádků.
Celý příkaz je složen z vnějšího příkazu Pm:CyclePage.. (řeší rozmnožování tabulek, co tabulka to stránka) a vnitřní příkaz Pm:CycleLine.. (řeší rozmnožování řádek v tabulce).
Pojmy "tabulka", "řádek", "stránka", "Line", "Page" jsou jen pomocné. Koncepce příkazu je obecná a nemusí se jednat jen o rozdělení řádků do více tabulek a stránek. Příkaz se také nestará o samotné fyzické stránkování pro HTML tisk.

Syntaxe:
<!--Pm:CyclePageBegin(sId,PmLib.GetArraySize(key.arr,1),nCountFirstPage,nCountNextPages)-->
... (rozmnožované texty a příkazy, například záhlaví každé tabulky)
<!--Pm:CycleLineBegin(sId)-->
... (rozmnožované texty a příkazy, například řádky tabulky)
<!--Pm:CycleLineEnd(sId)-->
... (rozmnožované texty a příkazy, například zápatí každé tabulky)
<!--Pm:CyclePageEnd(sId)-->


Parametry:
- sId: identifikátor cyklu. CyclePageBegin a jemu příslušné CycleLineBeginEnd, CycleLineEnd a CyclePageEnd musí mít stejný identifikátor. Identifikátor se používá i pro zjištění proměnné cyklu (v podobě například id.sId.Index).
- PmLib.GetArraySize(key.arr,1): Celkový počet rozmnožení, například celkový počet řádků ve všech tabulkách.
- nCountFirstPage: počet v prvním cyklu příkazu Pm.CycleLine... Umožňuje například zadat, že v v první tabulce bude jiný počet řádků než v následujících tabulkách.
- nCountNextPage: počet v následujících cyklech příkazu Pm.CycleLine.. (počet řádků v následujících tabulkách).


Proměnné cyklu (tyto proměnné lze použít v příkazech uvnitř cyklu):
- id.sId.Index: celkový index cyklu (indexováno od 0), například index zpracovávaného řádku přes všechny tabulky.
- PmLib.GetArraySize(key.arr,1): Celkový počet položek, například celkový počet řádků přes všechny tabulky.
- id.sId.PageIndex: index zpracování vnitřniho cyklu (indexováno od 0), například číslo stránky (tabulky).
- id.sId.PageCount: Celkový počet zpracování vnitřnich cyklů, například celkový počet stránek (tabulek).
- id.sId.LineIndex: index položky zpracovávané vnitřnim cyklem (indexováno od 0), například index řádku v dané tabulce.
- id.sId.LineCount: počet položek zpracovávaných vnitřnim cyklem, například počet řádků v dané tabulce.


Příklad:
Metodou SetKeyValue je do klíče arr je uloženo 2-rozměrné pole. Počet sloupců pole je vždy 3, počet řádků je proměnlivý a je uložen do klíče rows. Protože rows může být velké (např. 300), chceme aby výsledek byl uložen v několika tabulkách, v první tabulce aby bylo max. 35 řádků a v dalších 40 řádků. Počet tabulek se vytvoří tolik aby tam byly všechny řádky pole. Každá z tabulek bude mít záhlaví s názvy sloupců (Col1, Col2, Col3). Příkaz ve zdrojovém souboru pak může vypadat následovně:
<!--Pm:CyclePageBegin("cyc",PmLib.GetArraySize(key.arr,1),35,40)-->
<table>
  <tr>
    <th>Col1</th>
    <th>Col2</th>
    <th>Col3</th>
  </tr>
  <!--CycleLineBegin("cyc")-->
  <tr>
    <!--Pm:TagSetValue(key.arr[0][id.cyc.Index+1])-->
    <td></td>
    <!--Pm:TagSetValue(key.arr[1][id.cyc.Index+1])-->
    <td></td>
    <!--Pm:TagSetValue(key.arr[2][id.cyc.Index+1])-->
    <td></td>
  </tr>
  <!--Pm:CycleLineEnd("cyc")-->
</table>
<br/>
<!--Pm:CyclePageEnd("cyc")-->


Viz také:
© MICROSYS, spol. s r.o.