Promotic
WikipediaLinkedInYoutubeTwitterFacebook

Popis zdrojového souboru objektu PmReport

Technologie objektu PmReport je orientována především pro zdrojové soubory ve formátu HTML a XML a je tedy nutná určitá 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 na sestavy.
 

Základní princip

Základní princip objektu PmReport 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 Internet Explorerem 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", čísla - například 3.14)
- Hodnota klíče dosazeného do objektu PmReport pomocí metody SetKeyValue (a tak tvořit obsah z aktuálními daty z aplikace). Například pokud je do objektu PmReport vložen klíč SetKeyValue("txt1","Teplota kotle přesáhla 80 stupňu 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 vkládá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 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ňu Celsia")
pak bude v obsahu zdrojového souboru úsek:
<!--Pm:SetText(key.value1)-->
nahrazen textem:
Teplota kotle přesáhla 80 stupňu 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 tágu

Příkaz vloží nebo změní hodnotu bezprostředně následujícího HTML nebo XML tágu (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 tágu
 
Příklad:
Pokud bylo nastaveno:
oReport.SetKeyValue("value1", "Teplota kotle přesáhla 80 stupňu 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ňu Celsia</h1>
 

Pm:TagSetAttr - Příkaz pro změnu atributu tágu

Příkaz vloží nebo změní hodnotu atributu bezprostředně následujícího HTML nebo XML tágu (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 tágu img nastavena cesta k obrázku picture.jpg.
<!--Pm:TagSetAttr("src",#appres:picture.jpg)-->
<img src="" title="picture.jpg"/>
 

Pm:TagSetStyle - Příkaz pro změnu stylu tágu

Příkaz vloží nebo změní hodnotu stylu bezprostředně následujícího HTML nebo XML tágu (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 užít jednořádkovou formu (první syntaxe) pro krátké, jednoduché testy. Bloková forma (druhá syntaxe) však poskytuje více flexibility a strukturovanosti než forma jednořádková. Při provádění bloku je testována podmínka. Je-li podmínka true, provedou se následující příkazy. Je-li podmínka false (druhá syntaxe), 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>
jinak se odstraní celý úsek včetne textu mezi těmito dvěmi 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>
jinak se odstraní celý úsek včetne textu mezi těmito dvěmi příkazy.
 

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

Tento příkaz vytvoří a nastaví hodnotu proměnné. Tuto proměnnou lze pak dále 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, které přiřadí hodnotu 1.
<!--Pm:VarSet("key","bDone",1)-->
Příklad2:
Otestuje, zda byla zadána vstupní hodnota bDone. Pokud ne, tak ji vytvoří a přiřadí ji hodnotu 0.
<!--Pm:IfBegin(!key.bDone)-->
  <!--Pm:VarSet("key","bDone",0)-->
<!--Pm:IfEnd-->

PmLib.GetArraySize - Zjištění rozměrů pole

Vrací 1 nebo 2 rozměr proměnné typu pole (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 je 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ř. tág:
<p> </p>
a je potřeba do tohoto tágu postupně vyplnit všechny hodnoty z dodaného pole hodnot. Tzn. 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í tágu <tr> v tágu <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 (ve tvaru 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ř. číslo 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 dvojrozměrné pole. Počet sloupců tohoto 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říkazy 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ů tabulky 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í řádek 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 (ve tvaru 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žní 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 číslo 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 číslo řá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 dvojrozměrné pole. Počet sloupců tohoto 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")-->
 
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice