See on dokumendi vana versioon!
Directo väljatrükk on oma olemuselt HTML kujundus, mille kirjeldamise toimub XSL Stylesheet-i abil. Väljatrükkides võtakse andmed XML-ist (igale dokumendile ja aruandele on oma XML kogum).
ÜLDINE > Väljatrükkide häälestamine
ÜLDINE > Üldised seadistused > Väljtrükkide häälestamine
Väljatrükis saab kasutada järgnevaid võtmesõnu, kui on vaja muuta vaikimisi seadistusi:
Parameetrite mailsubject, mailattachment, output-file, mailfrom, mailto ja mailname puhul saab kasutada:
Vihje: et testida, võib panna Kasutaja kaardilt peale „Maili redigeerimine: Jah“, siis avatakse meili aken juba valmis ehitatud subjektiga (et näha kas kõik parameetrid toimisid)
Ribakoodi saab luua pildina, selleks tuleb luua img element ning selle src väärtuseks sisestada ribakoodi generaatori aadress konkreetsete parameetritega. Näide annab parameetrina kaasa XMList välja artikkel
<img><xsl:attribute name="src">/logos/qr.asp?t=<xsl:value-of select="artikkel"/>&code=C128&h=30</xsl:attribute></img>
Võimalikud parameetrid:
Standard | code parameetri väärtus |
---|---|
QR Code | qr |
CODE 39 | C39 |
CODE 39 CHECKSUM | C39c |
CODE 39E | C39E |
CODE 39E CHECKSUM | C39Ec |
CODE 93 | C93 |
STANDARD 2 5 | S25 |
STANDARD 2 5 CHECKSUM | S25c |
INTERLEAVED 2 5 | I25 |
INTERLEAVED 2 5 CHECKSUM | I25c |
CODE 128 | C128 |
CODE 128 A | C128A |
CODE 128 B | C128B |
CODE 128 C | C128C |
EAN 2 | EAN2 |
EAN 5 | EAN5 |
EAN 8 | EAN8 |
EAN 13 | EAN13 |
UPC A | UPCA |
UPC E | UPCE |
MSI | MSI |
MSI CHECKSUM | MSIc |
POSTNET | POSTNET |
PLANET | PLANET |
RMS4CC | RMS4CC |
KIX | KIX |
IMB | IMB |
CODABAR | CODABAR |
CODE 11 | CODE11 |
PHARMA CODE | PHARMA |
PHARMA CODE TWO TRACKS | PHARMA2T |
Code 128 standardile vastavat ribakoodi saab väljatrükis kasutada ilma väliste fontide olemasoluta. Lahendusena on pakkuda väljatrükk, kus ribakoodi tarbeks genereeritakse pilt html-is
Tähelepanu tuleks pöörata järgnevale:
<xsl:stylesheet> lehe deklareerimisel, peavad olema defineeritud ka järgnevad script atribuudid:
xmlns:script = "http://topxml.com/forum/script"
xmlns:x="ignore" exclude-result-prefixes="script"
<xsl:stylesheet version="1.0" xmlns:str="http://xsltsl.org/string" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt" extension-element-prefixes="str" xmlns:script = "http://topxml.com/forum/script" xmlns:x="ignore" exclude-result-prefixes="script"> <xsl:output method="html"/> <xsl:decimal-format name="ocra" decimal-separator='.' grouping-separator=' ' /> <msxsl:script language="JScript" implements-prefix="script"> <![CDATA[ ]]> </msxsl:script> </xsl:stylesheet>
Kõik <msxsl:script> blokis tuleks ka oma kujundusse kopeerida (siin asub funktsioon, mille abil tehakse ribakoodi pilt)
<xsl:value-of disable-output-escaping="yes" select="string(script:code128(string(artikkel)))"/>
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:script = "http://topxml.com/forum/script" xmlns:x="ignore" exclude-result-prefixes="script"> <xsl:output method="html"/> <xsl:decimal-format name="ocra" decimal-separator='.' grouping-separator=' ' /> <xsl:template match="/"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta> <html> <style> .bcdiv {float:left;height: 30px; /*size*/} .bar1 { border-left:1px solid black; } .bar2 { border-left:2px solid black; } .bar3 { border-left:3px solid black; } .bar4 { border-left:4px solid black; } .space0 { margin-right:0 } .space1 { margin-right:1px } .space2 { margin-right:2px } .space3 { margin-right:3px } .space4 { margin-right:4px }r label {clear:both;display:block;text-align:center; font: 0.125in/100% helvetica;} </style> <body> <table> <xsl:for-each select="/documents/document/rows/row"> <tr> <td><xsl:value-of select="artikkel"/></td> <td><xsl:value-of disable-output-escaping="yes" select="string(script:code128(string(artikkel)))"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> <msxsl:script language="JScript" implements-prefix="script"><![CDATA[ var BARS = [212222,222122,222221,121223,121322,131222,122213,122312,132212,221213,221312,231212,112232,122132,122231,113222,123122,123221,223211,221132,221231,213212,223112,312131,311222,321122,321221,312212,322112,322211,212123,212321,232121,111323,131123,131321,112313,132113,132311,211313,231113,231311,112133,112331,132131,113123,113321,133121,313121,211331,231131,213113,213311,213131,311123,311321,331121,312113,312311,332111,314111,221411,431111,111224,111422,121124,121421,141122,141221,112214,112412,122114,122411,142112,142211,241211,221114,413111,241112,134111,111242,121142,121241,114212,124112,124211,411212,421112,421211,212141,214121,412121,111143,111341,131141,114113,114311,411113,411311,113141,114131,311141,411131,211412,211214,211232,23311120] , START_BASE = 38 , STOP = 106 //BARS[STOP]==23311120 (manually added a zero at the end) ; function code128(code, barcodeType) { if (arguments.length<2) barcodeType = code128Detect(code); if (barcodeType=='C' && code.length%2==1) code = '0'+code; var a = parseBarcode(code, barcodeType); return bar2html(a.join('')) + '<label>' + code + '</label>'; } function bar2html(s) { for(var pos=0, sb=[]; pos<s.length; pos+=2) { sb.push('<div class="bcdiv bar' + s.charAt(pos) + ' space' + s.charAt(pos+1) + '"></div>'); } return sb.join(''); } function code128Detect(code) { if (/^[0-9]+$/.test(code)) return 'C'; if (/[a-z]/.test(code)) return 'B'; return 'A'; } function parseBarcode(barcode, barcodeType) { var bars = []; bars.add = function(nr) { var nrCode = BARS[nr]; this.check = this.length==0 ? nr : this.check + nr*this.length; this.push( nrCode || ("UNDEFINED: "+nr+"->"+nrCode) ); }; bars.add(START_BASE + barcodeType.charCodeAt(0)); for(var i=0; i<barcode.length; i++) { var code = barcodeType=='C' ? +barcode.substr(i++, 2) : barcode.charCodeAt(i); converted = fromType[barcodeType](code); if (isNaN(converted) || converted<0 || converted>106) throw new Error("Unrecognized character ("+code+") at position "+i+" in code '"+barcode+"'."); bars.add( converted ); } bars.push(BARS[bars.check % 103], BARS[STOP]); return bars; } var fromType = { A: function(charCode) { if (charCode>=0 && charCode<32) return charCode+64; if (charCode>=32 && charCode<96) return charCode-32; return charCode; }, B: function(charCode) { if (charCode>=32 && charCode<128) return charCode-32; return charCode; }, C: function(charCode) { return charCode; } } ]]></msxsl:script> </xsl:stylesheet>
<a target="_blank"> <xsl:attribute name="href"> <xsl:value-of disable-output-escaping = "yes" select="artikkel_andmed/url"/> </xsl:attribute> <xsl:value-of disable-output-escaping = "yes" select="keelne_seletus"/> </a>
* Antud näites artikli pealkirjale vajutades suunatakse lingile, mis on seadistatud artiklikaardi väljale URL. Väline link peab olema kujul
http://www.directo.ee
<xsl:decimal-format name="N" NaN="0" decimal-separator='.' grouping-separator=' ' />
<xsl:value-of select="format-number(mingi_vali, '0.00', 'N')"/>
<xsl:template name="kast"> <xsl:param name="count"/> <xsl:choose> <xsl:when test="$count <= 0"/> <xsl:otherwise> <!-- Sisu mida tahame X korda kuvada--> <table border="1"> <tr> <td>Mingi sisu</td> </tr> </table> <xsl:call-template name="kast"> <xsl:with-param name="count" select="$count - 1"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template>
<xsl:call-template name="kast"> <xsl:with-param name="count" select="2"/> </xsl:call-template>
<xsl:variable name="andmed" xmlns=""> <xsl:for-each select="/document/rows/row"> <rida> <artikkel><xsl:value-of select="artikkel"/></artikkel> <nimi><xsl:value-of select="nimi"/></nimi> </rida> </xsl:for-each> </xsl:variable>
xmlns="" on vajalik Excel-i XML Spreadsheet 2003 formaadis väljundi jaoks (muidu pole võimalik loodud XMList näiteks sum() teha).
<table> <xsl:for-each select="msxsl:node-set($andmed)/rida[not(artikkel = preceding-sibling::rida/artikkel)]"> <xsl:sort select="artikkel" data-type="text" order="ascending"/> <tr> <td>Artikkel: <xsl:value-of select="artikkel"/></td> <td>Nimi: <xsl:value-of select="nimi"/></td> </tr> </xsl:for-each> </table>
function dateadd(time, paevi) { var d, time, time_spl,aaa, a; time_spl=time.split(' '); a = time_spl[0].split('.'); aaa = new Date(a[2], a[1]-1, Number(a[0])+Number(paevi)); d=String(((aaa.getDate()<9)?'0':'' )+aaa.getDate())+'.'+((aaa.getMonth()<9)?'0':'') + String(aaa.getMonth()+1)+'.'+String(aaa.getFullYear()); return(d); }
<xsl:for-each select="/documents/document/rows/row"> <xsl:variable name="paevi" select="artikkel_andmed/garantii"/> <tr> <td height="10" valign="top"> <xsl:value-of select="ribakood"/> </td> <td> <xsl:value-of select="artikkel_lisavaljad/lisa[@kood='REALT']"/> <xsl:value-of select="string(script:dateadd(string(../../lahetusaeg), string($paevi)))"/> </td> </td> </tr>
<msxsl:script language="VbScript" implements-prefix="script"> <![CDATA[ function ddiff(m,d1,d2) ddiff = DateDiff(m,d1,d2) end function ]]> </msxsl:script>
<xsl:value-of select="script:ddiff('d',string(aeg1),string(aeg2))"/>
<xsl:value-of select="script:ddiff('d',string(r_aeg1),string(r_aeg2)) + 1"/>
Kuna reavahetuse ei kajastu HTML-is siis kasutame <pre> tagi.
<td valign="top" style="width:700px" > <pre style="white-space: pre-wrap; word-wrap: break-word;"> <xsl:value-of select="/documents/document/sisu"/> </pre> </td>
Univeraalne summeerimise funktsioon, parameetrid:
Väljund on string tüüpi, seega kui on vaja tulemusega arvutada, tuleb see numbriks konvertida enne. 1 ja 2 nullivad ka hetkel grupi.
<xsl:stylesheet version="1.0" xmlns:str="http://xsltsl.org/string" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt" extension-element-prefixes="str" xmlns:script = "http://topxml.com/forum/script" xmlns:x="ignore" exclude-result-prefixes="script"> <xsl:output method="html"/> <xsl:decimal-format name="ocra" decimal-separator='.' grouping-separator=' ' /> <xsl:for-each select="/documents/document/rows/row[rv=rn]"> <xsl:choose> <xsl:when test ="artikkel='VAHESUMMA'"> <xsl:value-of select="string(script:summer(0,'summ', 1))"/><!-- siin kuvatakse grupi summa--> </xsl:when> <xsl:otherwise> <xsl:if test="kogus!='' and kogus!=0"> <xsl:value-of select="format-number( string(script:summer( number(rv_summa),'summ', 0)) , '### ##0.00', 'ocra')"/> <!-- siin lisatakse grupile mingi väärtus--> </xsl:if> </xsl:otherwise> </xsl:choose> </xsl:for-each> <msxsl:script language="JScript" implements-prefix="script"> <![CDATA[ var sums = []; function summer( v, grp, ret ){ var rt = ''; if( !sums[grp] ){ sums[grp] = 0; } sums[grp]+=Number(v); if( ret == 0 ) rt = ''+v; if( ret == 1 ) rt = ''+Number(sums[grp]); if( ret == 1 || ret == 2 ) sums[grp] = 0; return rt } ]]> </msxsl:script> </xsl:stylesheet>