44. Memory Management in XPages var dc:NotesDocumentCollection = doc.getResponses(); var rdoc:NotesDocument = dc.getFirstDocument(); while (rdoc) { //do something with rdoc var nextdoc:NotesDocument = dc.getNextDocument (rdoc); rdoc.recycle(); var rdoc = nextdoc; } dc.recycle(); rdoc = dc.getNextDocument(rdoc); }
45.
46. Export to Excel - SSJS var exCon = facesContext.getExternalContext(); var writer = facesContext.getResponseWriter(); var response = exCon.getResponse(); response.setContentType("application/csv-tab-delimited-table;charset=utf-8"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Content-Disposition", "attachment; filename=amp;quot;export.xlsamp;quot;"); continued . . .
47. Excel Export (SSJS cont.) s = "<html><head><meta http-equiv=amp;quot;Content-Typeamp;quot; content=amp;quot;text/html;charset=utf-8amp;quot;/></head> <body><table><tr>"; writer.write(s+""); [put your html here] s = "</tr></table></body></html>"; writer.write(s); writer.endDocument();
48.
49. Write a SSJS function to create the PDF using this template. Window Show Eclipse Views Other Package Explorer
50. SSJS function for PDF generation //1. Load the java packages importPackage(com.itextpdf); importPackage(com.itextpdf.text); importPackage(com.itextpdf.text.pdf); importPackage(com.itextpdf.text.pdf.fonts); importPackage(java.io);
51. 2. Initialise & get the template var theDirectory= session.getEnvironmentString("Directory",true); var reader = new com.itextpdf.text.pdf.PdfReader (theDirectory + "/TaxInvoice.pdf"); var fileOut = new java.io.FileOutputStream(filename); var stamper = new com.itextpdf.text.pdf.PdfStamper(reader, fileOut); var canvas = stamper.getOverContent(1);
52. 3. Embed your fonts var arial = new BaseFont.createFont("c:/windows/fonts/arial.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED); var arialbd = new BaseFont.createFont("c:/windows/fonts/arialbd.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED); var NORMAL = new Font(arial,10); var BOLD = new Font(arialbd,10); var BOLD11 = new Font(arialbd,11); var BOLD12 = new Font(arialbd,12);
53. 4. Create and place your data var client = new Phrase(doc.getItemValueString("Client"),NORMAL); ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, client, 65, 670, 0); var lcost = new Phrase(@Text(resp.getItemValueDouble("Cost"),"C,"), BOLD11); ColumnText.showTextAligned(canvas, Element.ALIGN_RIGHT, lcost, 563, 533 - (i*44), 0);
54. 5.Close and attach stamper.close(); fileOut.close(); //attach the pdf var rtitem:NotesRichTextItem= doc.createRichTextItem("Invoice"); rtitem.embedObject(NotesEmbeddedObject.EMBED_ATTACHMENT, "", filename, null);
55. Download Control fix var serv = session.getHttpURL().split("?")[0]; if (!@IsNewDoc()) {return serv + "/" + sessionScope.invoiceDbName+ "/0/" + document1.getDocument().getUniversalID() + "$FILE/"+ rowData.getName(); } else {return "#";} if (@ClientType()=="Notes") return "/.ibmmodres/" + "domino/OpenAttachment/"+ database.getServer() + "!!"+sessionScope.invoiceDbName + "/"+document1.getDocument().getUniversalID() + "/attachment/"+rowData.getName();
56. Meta tags for iPhone/iPad <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" /> <meta name="apple-mobile-web-app-capable" content="yes" /> Mark Hughes: www-10.lotus.com/ldd/ddwiki.nsf/dx/X-Pages_iPhone_ Application_Tutorial
57. Use of OpenLog for Error Handling import OpenLogXPages; function createAuditRecord() { try { //<some code to run> } catch(e) { requestScope.errMessage = "Error: " + e.toString(); msg = "createAuditRecord Error: " + e.toString(); log.logError(msg, SEVERITY_HIGH, e.toString(), null, "serverSide", "createAuditRecord", null, doc); } } Julian Robichaux & Rob McDonagh