I was given a task to list down all controls and theirs labels along with some other attributes like style, style class, parent id, etc and prepare an Excel sheet. It was so boring and tedious task for me. This is a repetitive task in which I need to copy attributes value and paste it to the Excel sheet. I decided to automate this task and wrote this piece of code which simplifies my task drastically.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
var Doc = { generate : function (xpage, parent) { //fpfPr(xpage.getId()) var itr = xpage.getChildren().iterator(); while(itr.hasNext()) { var c:com.ibm.xsp.component.xp.XspScriptCollector = itr.next(); if(!parent) parent = xpage; var p = xpage; if(p && p.getId() && !p.getId().match(/^_id/i) && !p.getId().match(/^event/i) && !p.getId().match(/^selectItem/i) && !p.getId().match(/^dateTimeHelper/i) && !p.getId().match(/^br/i)) { parent = xpage; } if(c.getId() && !c.getId().match(/^_id/i) && !c.getId().match(/^event/i) && !c.getId().match(/^selectItem/i) && !c.getId().match(/^dateTimeHelper/i) && !c.getId().match(/^br/i) && !c.getId().match(/^typeAhead/i) && !c.getRendererType().equalsIgnoreCase('com.ibm.xsp.PassThroughTagRenderer')) { var d:NotesDocument = database.createDocument(); d.replaceItemValue("Form", "fDoc"); d.replaceItemValue("control", c.getId()); if(parent) d.replaceItemValue("parent", parent.getId()); d.replaceItemValue("type", this.getType(c.getRendererType())); if(!d.getItemValueString("type").equalsIgnoreCase("Output Script")) { if(this.getType(c.getRendererType()).equalsIgnoreCase('View Panel')) { d.replaceItemValue("style", c.getViewStyle()); if(c.getViewStyleClass()) { d.replaceItemValue("styleClass", c.getViewStyleClass().match(/^xsp/i) ? "" : c.getViewStyleClass()); } } else { try { d.replaceItemValue("style", c.getStyle()); } catch(e) { if(e.getClass().getName().equals('com.ibm.xsp.exception.EvaluationExceptionEx')) { d.replaceItemValue("style", '<computed>'); } else { d.replaceItemValue("style", c.getStyle()); } } try { if(c.getStyleClass()) { d.replaceItemValue("styleClass", c.getStyleClass().match(/^xsp/i) ? "" : c.getStyleClass()); } } catch(e) { d.replaceItemValue("styleClass", "</computed><computed>"); } } } if(this.getType(c.getRendererType()).equalsIgnoreCase("Editbox")) { if(c.getId().equalsIgnoreCase('xc_AppPath')) { d.replaceItemValue("defaultValue", "Application path defined in global parameters"); } else if(c.getId().equalsIgnoreCase("xc_AuditLogKey")) { var lsAType:java.lang.String = c.getDefaultValue().split('_'); d.replaceItemValue("defaultValue", lsAType[0] + '_@Unique()'); } else if(c.getId().equalsIgnoreCase("xc_ServerName")) { d.replaceItemValue("defaultValue", 'Application server name'); } else { try { d.replaceItemValue("defaultValue", c.getDefaultValue()); } catch(e) { d.replaceItemValue("defaultValue", "</computed><computed>"); } } } if(this.getType(c.getRendererType()).equalsIgnoreCase("Button")) { try { d.replaceItemValue("label", c.getValue()); } catch(e) { if(e.getClass().getName().equals('com.ibm.xsp.exception.EvaluationExceptionEx')) { d.replaceItemValue("label", '</computed><computed>'); } else { d.replaceItemValue("label", c.getValue()); } } } else { var l = c.getId().replace(/xc_/i, '').replace('_', ' '); d.replaceItemValue("label", l); } d.save(true); } this.generate(c, parent); } }, getType : function(classname) { if(classname.equalsIgnoreCase("com.ibm.xsp.LineBreak")) { return "LineBreak"; } else if(classname.equalsIgnoreCase("javax.faces.Text") || classname.equalsIgnoreCase("javax.faces.Secret")) { return "Editbox"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.DateTimeHelper")) { return "Datetime/Editbox"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.Text")) { return "Computed Field"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.ButtonEx")) { return "Button"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.LinkEx")) { return "Link"; } else if(classname.equalsIgnoreCase("javax.faces.Menu")) { return "Combobox"; } else if(classname.equalsIgnoreCase("javax.faces.Radio") || classname.equalsIgnoreCase("com.ibm.xsp.Radio")) { return "Radio Button"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.Checkbox")) { return "Checkbox"; } else if(classname.equalsIgnoreCase("javax.faces.Textarea")) { return "Multiline Editbox"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.Table")) { return "Table"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.TableCell")) { return "Table Cell"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.TableRow")) { return "Table Row"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.Section")) { return "Section"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.ImageEx")) { return "Image"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.Div")) { return "Div"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.OutputLabel")) { return "Label"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.OutputScript") || classname.equalsIgnoreCase('com.ibm.xsp.component.xp.XspOutputScript')) { return "Output Script"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.ViewPanel")) { return "View Panel"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.ViewColumn")) { return "View Column"; } else if(classname.equalsIgnoreCase("javax.faces.Panel")) { return "Panel"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.DataIterator")) { return "Repeat Control"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.TableEx")) { return "Data Table"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.Column")) { return "Data Table Column"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.XPager")) { return "Pager"; } else if(classname.equalsIgnoreCase("com.ibm.xsp.Include")) { return "Custom Control"; } else { return classname; } } } |
Paste above code in the script library and following code in afterPageLoad event of XPage
|
1 |
Doc.generate(view, null); |
Now preview your XPage into the browser. A list of documents has been created in the application with form name fDoc. Create a view to display all these documents and its field values.
getType() would benefit from less elseIf
Why not use a JSON object to keep your classname/label relations, so you can extend it easily when adding new classes. Something like:
knownControls = {
“com.ibm.xsp.DataIterator” : “Repeat Control”,
“com.ibm.xsp.XPager” : “Pager”,
…
}
what also might make sense is to document parent
(and eventually grandparent).
Hi Stephan,
First of all I would like to thank you for your valueable comment.
I do agree with your suggestion but at the time of writing of above code I was not aware about JSON objects.