<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-6199583130946364292</atom:id><lastBuildDate>Sun, 18 Mar 2012 06:39:00 +0000</lastBuildDate><title>BBj Support</title><description></description><link>http://www.bbjsupport.com/</link><managingEditor>noreply@blogger.com (Doug)</managingEditor><generator>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6199583130946364292.post-4144003664918098597</guid><pubDate>Tue, 01 Nov 2011 13:43:00 +0000</pubDate><atom:updated>2011-11-01T09:43:57.930-04:00</atom:updated><title>Using XML in BBj</title><description>Here's the program I use to handle most XML requests. I'll try to expand on this later.&lt;br /&gt;&lt;br /&gt;Rem XML.PUB.BBJ 10/19/2005 &lt;br /&gt;&lt;br /&gt;Escape; rem no ::label&lt;br /&gt;&lt;br /&gt;EscapeIllegalChars:&lt;br /&gt;&lt;br /&gt;Enter V!,text$&lt;br /&gt;&lt;br /&gt;text$=java.lang.String.valueOf(text$).replaceAll("&amp;lt;","&amp;lt;")&lt;br /&gt;text$=java.lang.String.valueOf(text$).replaceAll("&amp;gt;","&amp;gt;")&lt;br /&gt;text$=java.lang.String.valueOf(text$).replaceAll("'"," '")&lt;br /&gt;text$=java.lang.String.valueOf(text$).replaceAll(Chr(34),""")&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;Init:&lt;br /&gt;&lt;br /&gt;Enter V!&lt;br /&gt;&lt;br /&gt;V!=new java.util.HashMap()&lt;br /&gt;V!.put("NAME",pgm(-2))&lt;br /&gt;&lt;br /&gt;XML$=""&lt;br /&gt;XML$=STBL("ASPConfig.xml",err=*next)&lt;br /&gt;If XML$&amp;lt;&amp;gt;""&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ctapi!=new com.ctaa.API()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XML$=java.lang.String.valueOf(XML$).replaceAll(CHR(10),"")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call PGM(-2)+"::DecodeXML",XML$,document!&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("BBjTmpDir",ctapi!.getNodeValue(document!.getDocumentElement(),"BBjTmpDir"))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("Excel",ctapi!.getNodeValue(document!.getDocumentElement(),"Excel"))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("Browser",ctapi!.getNodeValue(document!.getDocumentElement(),"Browser"))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("WindowsTmpDir",ctapi!.getNodeValue(document!.getDocumentElement(),"WindowsTmpDir"))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("StyleSheets",ctapi!.getNodeValue(document!.getDocumentElement(),"StyleSheets"))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("StyleSheetsDirectory",ctapi!.getNodeValue(document!.getDocumentElement(),"StyleSheetsDirectory"))&lt;br /&gt;&lt;br /&gt;Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If info(0,0)="Linux" then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("BBjTmpDir","/home/groups/tmp/")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("Excel",CHR(34)+"D:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE"+CHR(34))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("Browser",CHR(34)+"C:\Program Files\Internet Explorer\iexplore.exe"+chr(34))&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("BBjTmpDir","c:\tmp\")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("Excel",CHR(34)+"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE"+CHR(34))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("Browser",CHR(34)+"C:\Program Files\Internet Explorer\iexplore.exe"+chr(34))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("WindowsTmpDir",V!.get("BBjTmpDir"))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("StyleSheets","c:\asp\asp5\XSL\")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; V!.put("StyleSheetsDirectory","c:\asp\asp5\XSL\")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fi&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;CreateDocument:&lt;br /&gt;&lt;br /&gt;Enter V!,document!,stylesheet$&lt;br /&gt;&lt;br /&gt;If V!=null()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call PGM(-2)+"::Init",V!&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;dbf!=javax.xml.parsers.DocumentBuilderFactory.newInstance()&lt;br /&gt;builder!=dbf!.newDocumentBuilder()&lt;br /&gt;document! = builder!.newDocument()&lt;br /&gt;&lt;br /&gt;If stylesheet$&amp;lt;&amp;gt;"" then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; document!.appendChild(document!.createProcessingInstruction("xml-stylesheet","type="+chr(34)+"text/xsl"+chr(34)+" href="+chr(34)+V!.get("StyleSheets")+stylesheet$+".xsl"+Chr(34)))&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;CreateXMLFile:&lt;br /&gt;&lt;br /&gt;Enter hmXML!,FileName$,ch&lt;br /&gt;&lt;br /&gt;If FileName$&amp;lt;&amp;gt;"" then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Erase STBL("TMPDIR")+FileName$,err=*next&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; STRING STBL("TMPDIR")+FileName$,err=*next&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ch=unt; Open(ch)STBL("TMPDIR")+FileName$&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;AddElementNode:&lt;br /&gt;&lt;br /&gt;Enter V!,document!,ParentNode!,Element$,ChildNode!&lt;br /&gt;&lt;br /&gt;Element$=java.lang.String.valueOf(Element$).replaceAll("&amp;amp;","&amp;amp;")&lt;br /&gt;&lt;br /&gt;Call V!.get("NAME")+"::EscapeIllegalChars",V!,Element$&lt;br /&gt;&lt;br /&gt;Element$=cvs(Element$,3)&lt;br /&gt;E$=java.lang.String.valueOf(Element$).replaceAll(" ","_") &lt;br /&gt;If E$(1,1)&amp;lt;"A" then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; E$="_"+E$&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;ChildNode! = document!.createElement(E$) &lt;br /&gt;rem Probably not used anywhere: ChildNode!.setAttribute("Display",Element$)&lt;br /&gt;ParentNode!.appendChild(ChildNode!)&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;AddTextElement:&lt;br /&gt;&lt;br /&gt;Enter V!,document!,ChildNode!,FieldName$,Value$&lt;br /&gt;&lt;br /&gt;REM Value$=java.lang.String.valueOf(Value$).replaceAll("&amp;amp;",CHR(177))&lt;br /&gt;&lt;br /&gt;REM Call V!.get("NAME")+"::EscapeIllegalChars",V!,Value$&lt;br /&gt;&lt;br /&gt;TextElement!=document!.createElement(FieldName$)&lt;br /&gt;ChildNode!.appendChild(TextElement!)&lt;br /&gt;TextElement!.appendChild(document!.createTextNode(new java.lang.String(Value$).trim()))&lt;br /&gt;V!.put("TextElement",TextElement!)&lt;br /&gt;&lt;br /&gt;rem CVS(Value$,3)))&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;ClassToString:&lt;br /&gt;&lt;br /&gt;Enter hmXML!,document!,XML$&lt;br /&gt;&lt;br /&gt;Call PGM(-2)+"::Transform",hmXML!,document!,stringWriter!&lt;br /&gt;&lt;br /&gt;XML$=stringWriter!.getBuffer().toString()&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;Rem Transform is used normally to convert the XML class to string&lt;br /&gt;Transform:&lt;br /&gt;&lt;br /&gt;Enter hmXML!,document!,stringWriter!&lt;br /&gt;&lt;br /&gt;source! = new javax.xml.transform.dom.DOMSource(document!)&lt;br /&gt;stringwriter! = new java.io.StringWriter()&lt;br /&gt;result! = new javax.xml.transform.stream.StreamResult(stringwriter!)&lt;br /&gt;factory! = javax.xml.transform.TransformerFactory.newInstance()&lt;br /&gt;transformer! = factory!.newTransformer()&lt;br /&gt;&lt;br /&gt;transformer!.transform(source!,result!)&lt;br /&gt;&lt;br /&gt;rem ? stringWriter!.getBuffer().toString()&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If 1=2 and hmXML!.get("hmParameters")&amp;lt;&amp;gt;null() then&lt;br /&gt;&lt;br /&gt;Rem I'm disabling this because this does not do an xsl transform&lt;br /&gt;rem So it shouldn't be needed now, only my oldest reports did the transform in &lt;br /&gt;Rem Excel. If this needs to be reenabled hmParameters must be saved in PrintReport below. &lt;br /&gt;&lt;br /&gt;hmParameters!=hmXML!.get("hmParameters")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; itParameters!=hmParameters!.entrySet().iterator()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; While itParameters!.hasNext()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; map!=itParameters!.next()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; transformer!.setParameter(map!.getKey(),map!.getValue())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wend&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hmXML!.remove("hmParameters"); rem trash hmParameters, prepare for next job&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;TransformXSL:&lt;br /&gt;&lt;br /&gt;Enter V!,hmXMLRep!,StyleSheet$,document!,stringWriter!&lt;br /&gt;&lt;br /&gt;source! = new javax.xml.transform.dom.DOMSource(document!)&lt;br /&gt;stringwriter! = new java.io.StringWriter()&lt;br /&gt;result! = new javax.xml.transform.stream.StreamResult(stringwriter!)&lt;br /&gt;factory! = javax.xml.transform.TransformerFactory.newInstance()&lt;br /&gt;&lt;br /&gt;rem xslt!=new java.io.File(V!.get("StyleSheets")+StyleSheet$) Wouldn't work in ShowXMLReport&lt;br /&gt;xslt!=new java.io.File(V!.get("StyleSheetsDirectory")+StyleSheet$)&lt;br /&gt;ss!=new javax.xml.transform.stream.StreamSource(xslt!)&lt;br /&gt;transformer! = factory!.newTransformer(ss!); rem if this fails try to open xslt!.getPath() before saving XML and seeing how it translates in the IDE&lt;br /&gt;If hmXMLRep!.get("hmParameters")&amp;lt;&amp;gt;null() then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hmParameters!=hmXMLRep!.get("hmParameters")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; itParameters!=hmParameters!.entrySet().iterator()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; While itParameters!.hasNext()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; map!=itParameters!.next()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; transformer!.setParameter(map!.getKey(),map!.getValue())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wend&lt;br /&gt;Fi&lt;br /&gt;transformer!.transform(source!,result!)&lt;br /&gt;&lt;br /&gt;rem ? stringWriter!.getBuffer().toString()&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;DecodeXML: &lt;br /&gt;&lt;br /&gt;Enter XML$,document!&lt;br /&gt;&lt;br /&gt;Call PGM(-2)+"::ConvertXMLtoDocument",XML$,d!&lt;br /&gt;&lt;br /&gt;document!=d!.getChildNodes()&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;ConvertXMLtoDocument:&lt;br /&gt;Enter XML$,document!&lt;br /&gt;sr!=new java.io.StringReader(XML$) &lt;br /&gt;is!=new org.xml.sax.InputSource(sr!) &lt;br /&gt;dbf!=javax.xml.parsers.DocumentBuilderFactory.newInstance()&lt;br /&gt;rem dbf!.setIgnoringElementContentWhitespace(1)&lt;br /&gt;builder!=dbf!.newDocumentBuilder()&lt;br /&gt;document!=builder!.parse(is!)&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;DecodeXMLElementNode:&lt;br /&gt;&lt;br /&gt;Rem Get the nodelist this way&lt;br /&gt;Rem Call "XML.PUB.BBJ::DecodeXMLElementNode",document!.getElementsByTagName("Item"),bvXML!&lt;br /&gt;&lt;br /&gt;Enter nodelist!,bvXML!&lt;br /&gt;&lt;br /&gt;bvXML!=BBjAPI().makeVector()&lt;br /&gt;i=0&lt;br /&gt;While nodelist!.getLength()&amp;gt;i&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i!=nodelist!.item(i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i=i+1&lt;br /&gt;&amp;nbsp; Rem Load HashMap&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hmRecord!=new java.util.HashMap()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; For y=0 to i!.getLength()-1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; If i!.item(y).getChildNodes().getLength()=0 then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Value$=""&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; If i!.item(y).getChildNodes().getLength()=1 then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Value$=i!.item(y).getChildNodes().item(0).getNodeValue() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Escape; rem More than 1 item in childnodes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Fi&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Fi&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; hmRecord!.put(i!.item(y).getTagName(),Value$)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next y&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bvXML!.add(hmRecord!)&lt;br /&gt;Wend&lt;br /&gt;&lt;br /&gt;exit&lt;br /&gt;&lt;br /&gt;PDF:&lt;br /&gt;&lt;br /&gt;Enter hmXML!,hmXMLRep!,document!,stringWriter!&lt;br /&gt;&lt;br /&gt;xslt!=new java.io.File(hmXML!.get("StyleSheetsDirectory")+hmXMLRep!.get("StyleSheet"))&lt;br /&gt;&lt;br /&gt;rem xml!=new java.io.File("/tmp/SalvageBids.xml")&lt;br /&gt;If hmXMLRep!.get("TempFile")=null()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TempDir!=new java.io.File(STBL("TMPDIR"))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdf!=java.io.File.createTempFile("XMLReport",".pdf",TempDir!)&lt;br /&gt;Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rem use this in calling program if you don't like "XMLReport" name or need a different path&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TempFile$=hmXMLRep!.get("TempFile")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If pos("/"=TempFile$)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pdf!=new java.io.File(TempFile$)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pdf!=new java.io.File(stbl("TMPDIR")+TempFile$)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fi&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;d!=new org.apache.fop.apps.Driver()&lt;br /&gt;&lt;br /&gt;logger!=new org.apache.avalon.framework.logger.ConsoleLogger()&lt;br /&gt;d!.setLogger(logger!)&lt;br /&gt;org.apache.fop.messaging.MessageHandler.setScreenLogger(logger!)&lt;br /&gt;&lt;br /&gt;d!.setRenderer(d!.RENDER_PDF) &lt;br /&gt;&lt;br /&gt;out!=new java.io.FileOutputStream(pdf!) &lt;br /&gt;&lt;br /&gt;d!.setOutputStream(out!) &lt;br /&gt;factory!=javax.xml.transform.TransformerFactory.newInstance()&lt;br /&gt;ss!=new javax.xml.transform.stream.StreamSource(xslt!)&lt;br /&gt;transformer!=factory!.newTransformer(ss!); rem Check xslt!.getPath() 1st, Mismatched tags, unknown syntax&lt;br /&gt;&lt;br /&gt;If hmXML!.get("hmParameters")&amp;lt;&amp;gt;null() then&lt;br /&gt;&lt;br /&gt;hmParameters!=hmXML!.get("hmParameters")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; itParameters!=hmParameters!.entrySet().iterator()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; While itParameters!.hasNext()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; map!=itParameters!.next()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; transformer!.setParameter(map!.getKey(),map!.getValue())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wend&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hmXML!.remove("hmParameters"); rem trash hmParameters, prepare for next job&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;sr!=new java.io.StringReader(stringWriter!.getBuffer().toString())&lt;br /&gt;is!=new javax.xml.transform.stream.StreamSource(sr!)&lt;br /&gt;rem is!=new javax.xml.transform.stream.StreamSource(xml!)&lt;br /&gt;&lt;br /&gt;res!=new javax.xml.transform.sax.SAXResult(d!.getContentHandler())&lt;br /&gt;&lt;br /&gt;rem transformer!.transform(stringWriter!.getBuffer().toString(),res!) &lt;br /&gt;transformer!.transform(is!,res!) &lt;br /&gt;&lt;br /&gt;out!.close()&lt;br /&gt;&lt;br /&gt;If hmXMLRep!.get("OpenWith")&amp;lt;&amp;gt;null() then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If hmXMLRep!.get("OpenWith")="Browser" then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CM$=hmXML!.get("Browser")+" "+STBL("CLIENT_TEMP_DIRECTORY")+pdf!.getName()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rs!=BBJAPI().getThinClient().clientExec(cm$)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fi&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;ShowMSOfficeML:&lt;br /&gt;&lt;br /&gt;Enter hmXML!,hmXMLRep!,StyleSheet$,document!,stringWriter!&lt;br /&gt;&lt;br /&gt;Call PGM(-2)+"::TransformXSL",hmXML!,hmXMLRep!,StyleSheet$,document!,stringWriter!&lt;br /&gt;&lt;br /&gt;TempDir!=new java.io.File(STBL("TMPDIR"))&lt;br /&gt;TempFile!=java.io.File.createTempFile("XMLReport",".xml",TempDir!)&lt;br /&gt;rem escape; rem ? TempFile!.getPath()&lt;br /&gt;fw! = new java.io.FileWriter(TempFile!)&lt;br /&gt;bwr! = new java.io.BufferedWriter(fw!) &lt;br /&gt;bwr!.write(stringWriter!.getBuffer().toString())&lt;br /&gt;bwr!.close()&lt;br /&gt;fw!.close() &lt;br /&gt;If hmXMLRep!.get("OpenWith")="Excel" then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CM$=hmXML!.get("Excel")+" "+STBL("CLIENT_TEMP_DIRECTORY")+TempFile!.getName()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs!=BBJAPI().getThinClient().clientExec(cm$)&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;Exit&lt;br /&gt;&lt;br /&gt;ShowXMLReport:&lt;br /&gt;&lt;br /&gt;Enter hmXML!,hmXMLRep!,StyleSheet$,document!,stringWriter!&lt;br /&gt;&lt;br /&gt;Rem html - Browser or Excel&lt;br /&gt;&lt;br /&gt;Call PGM(-2)+"::TransformXSL",hmXML!,hmXMLRep!,StyleSheet$,document!,stringWriter!&lt;br /&gt;&lt;br /&gt;TempDir!=new java.io.File(STBL("TMPDIR"))&lt;br /&gt;If hmXMLRep!.get("OpenWith")="Excel" then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ext$=".xls"&lt;br /&gt;Fi&lt;br /&gt;If hmXMLRep!.get("OpenWith")="Browser" then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ext$=".html"&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;If hmXMLRep!.get("TempFile")=null()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TempFile!=java.io.File.createTempFile("XMLReport",ext$,TempDir!)&lt;br /&gt;Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TempFile$=hmXMLRep!.get("TempFile")+ext$&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If pos("/"=TempFile$)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TempFile!=new java.io.File(TempFile$)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TempFile!=new java.io.File(stbl("TMPDIR")+TempFile$)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fi&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;fw! = new java.io.FileWriter(TempFile!)&lt;br /&gt;bwr! = new java.io.BufferedWriter(fw!) &lt;br /&gt;bwr!.write(stringWriter!.getBuffer().toString())&lt;br /&gt;bwr!.close()&lt;br /&gt;fw!.close() &lt;br /&gt;&lt;br /&gt;If hmXMLRep!.get("OpenWith")="Excel" then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CM$=hmXML!.get("Excel")+" "+stbl("CLIENT_TEMP_DIRECTORY")+TempFile!.getName()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs!=BBJAPI().getThinClient().clientExec(cm$)&lt;br /&gt;Fi&lt;br /&gt;If hmXMLRep!.get("OpenWith")="Browser" then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CM$=hmXML!.get("Browser")+" "+STBL("CLIENT_TEMP_DIRECTORY")+TempFile!.getName()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs!=BBJAPI().getThinClient().clientExec(cm$)&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;hmXMLRep!.put("TempFile",TempFile!.getName())&lt;br /&gt;&lt;br /&gt;exit&lt;br /&gt;&lt;br /&gt;PrintReport:&lt;br /&gt;rem Using printerjob&lt;br /&gt;&lt;br /&gt;Enter hmXML!,StyleSheet$,document!,stringWriter!,printerJob!&lt;br /&gt;&lt;br /&gt;Call hmXML!.get("NAME")+"::Transform",hmXML!,document!,stringWriter!&lt;br /&gt;ch=unt&lt;br /&gt;open(ch)hmXML!.get("StyleSheetsDirectory")+StyleSheet$&lt;br /&gt;read record(ch,siz=100000)XSL$ &lt;br /&gt;close(ch)&lt;br /&gt;&lt;br /&gt;somexslstring!=XSL$&lt;br /&gt;baXSLContent!=somexslstring!.getBytes("utf-8")&lt;br /&gt;xslis!=new java.io.ByteArrayInputStream(baXSLContent!)&lt;br /&gt;disXSL!=new org.xml.sax.InputSource(xslis!)&lt;br /&gt;&lt;br /&gt;xmlis!=new java.io.ByteArrayInputStream(stringWriter!.getBuffer().toString().getBytes())&lt;br /&gt;disXML!=new org.xml.sax.InputSource(xmlis!)&lt;br /&gt;&lt;br /&gt;input!=new org.apache.fop.apps.XSLTInputHandler(disXML!,disXSL!)&lt;br /&gt;&lt;br /&gt;If hmXML!.get("hmParameters")&amp;lt;&amp;gt;null() then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hmParameters!=hmXML!.get("hmParameters")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; itParameters!=hmParameters!.entrySet().iterator()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; While itParameters!.hasNext()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; map!=itParameters!.next()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; input!.setParameter(map!.getKey(),map!.getValue())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wend&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hmXML!.remove("hmParameters"); rem trash hmParameters, prepare for next job&lt;br /&gt;Fi&lt;br /&gt;&lt;br /&gt;driver!=new org.apache.fop.apps.Driver()&lt;br /&gt;renderer!=new com.ctaa.PrintRenderer(printerJob!)&lt;br /&gt;printerJob!.setCopies(1)&lt;br /&gt;driver!.setRenderer(renderer!)&lt;br /&gt;input!.run(driver!)&lt;br /&gt;printerJob!.print(); rem If there's a null exception here there's no data.&lt;br /&gt;&lt;br /&gt;Exit&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6199583130946364292-4144003664918098597?l=www.bbjsupport.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.bbjsupport.com/2011/11/using-xml-in-bbj.html</link><author>noreply@blogger.com (Doug)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6199583130946364292.post-4844579127153818239</guid><pubDate>Sun, 13 Feb 2011 20:45:00 +0000</pubDate><atom:updated>2011-02-20T18:58:01.971-05:00</atom:updated><title>Indroduction</title><description>&lt;span style="font-size: small;"&gt;BBj is probably the greatest opportunity for Business Basic programmers I've ever seen.                                 For years we have programmed away in our little niche, successful because accounting                                  systems can be programmed in Business Basic quicker than in any other language, but, not                                  being buzz-word compliant, unable to break out of our niche.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;BBj allows us to use the power of Java, and SQL databases, to reach a world that otherwise                             would not consider our products.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Lots of cool things here. All of my new files on in mysql. My program DATABASE.PUB.BBJ is                                  set up to figure out whether my file is in bbj or mysql, and act accordingly. I'm also                                 using optimistic field locking, where I compare the field changed to what's on disk before                                 issuing a stop.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;I no longer use BBj print objects in my new reports. By seperating the data from the                                  presentation, XML and XSL are much more flexible for reports and forms. I can't emphasize                                 enough how important it is to move your printing to XML. Not only is report development                                 much, much faster, but it is much more flexible. Customising a report for a customer                                  involves changing just a small XSL file. Throwing a report into Excel or a PDF becomes a                                 no-brainer. Or you can throw it into a webservice and let websites and external customers                                 format the XML however they want.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Even more importantly, you can use the XML you generate for one report in other reports.      Let's say you have a complex sales analysis report, involving very complex business logic.      This very recently happened to me. The report itself took weeks, as it involved     calculating business days and complex percentages. Later we decided to put this information into a sales brochure&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Since I had done the original report in XML, this was no problem for me. I merely set up      a program that called the report program, took that XML and extracted the numbers I needed.      These numbers I then put into another XML document which I then transformed using      an XSL file using Microsoft's SpreadsheetML syntax. In a few days I had a     sales brochure. Not only was this quick, but this ensures that the customer is going to be      getting the same figures whether from the report or from the brochure.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Here's the steps for speeding up report development. First, use SQL or something like my                                 Query_BBJ routine in DATABASE.PUB.BBJ so you're not always writing custom file read                                  procedures. Second, make extensive use of java collections using                                 routines such as the one described here in Using "TreeMaps like Print Sort Files". Thirdly, throw the                                 collections into an XML object, and then transform it with an XSL file to obtain the desired                                 output.                              &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6199583130946364292-4844579127153818239?l=www.bbjsupport.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.bbjsupport.com/2011/02/indroduction.html</link><author>noreply@blogger.com (Doug)</author><thr:total>0</thr:total></item></channel></rss>
