<?xml version="1.0" encoding="UTF-8"?> <bm:model xmlns:e="leaf.service.exception" xmlns:s="leaf.plugin.script" xmlns:o="leaf.database.local.oracle" xmlns:bm="http://www.leaf-framework.org/schema/bm" xmlns:f="leaf.database.features" alias="e"> <bm:fields/> <bm:primary-key/> <bm:features> <o:sequence-pk/> <f:standard-who/> <!-- make sure bm-script must be the LAST feature --> <s:bm-script><![CDATA[ function new_bm_map(name) { return new CompositeMap("bm", 'http://www.leaf-framework.org/schema/bm', name); } function create_query_field(query_field) { if (query_field) { var qf = new_bm_map('query-field'); qf.field = query_field; qf.queryoperator = '='; //attribute name must in lowercase $this.addQueryField(qf.getData()); //get it's java type... } } var table_name = $ctx.dynamic_base_table; // println("table_name:"+table_name); if (!table_name) raise_app_error("table name not found"); $this.setBaseTable(table_name); //get base table from somewhere... var dsf = $instance('leaf.database.service.DatabaseServiceFactory'); var it = new Packages.leaf.plugin.entity.OracleTableFields(); var tableName = $this.getBaseTable(); var fMap = new CompositeMap(it.getTableFields(dsf, tableName)); // println(fMap.toXML()); if (fMap.msg) raise_app_error('error while get table fields:' + fMap.msg + " :" + table_name); var flds = fMap.getChildren(); for (var i = 0;i < flds.length;i++) { var r = flds[i]; var f = Packages.leaf.bm.Field().createField(r.name.toLowerCase()); f.setPhysicalName(r.name); if (r.dbtype == 'NUMBER') { f.setDataType('java.lang.Double'); }else if(r.dbtype == 'CLOB'){ f.setDataType('java.sql.Clob'); } else { f.setDataType(r.javatype); } f.setDatabaseType(r.dbtype); f.setPrompt(r.prompt); $this.addField(f); if (r.ispk) { //dynamic primary-key if (!$ctx.pkmap) $ctx.pkmap = {}; $ctx.pkmap[table_name] = r.name.toLowerCase(); var pk = new_bm_map('pk-field'); // println("pk:" + r.toXML()); //f.setInsertExpression(table_name+'_s.nextval'); pk.name = r.name.toLowerCase(); $this.getObjectContext().getChild('primary-key').addChild(pk.getData()); //get it's java type... } } var qf_root = $ctx.model.getChild('rootpath_query_field'); // println("pk:" + qf_root.toXML()); var qfs = ( !! qf_root) ? qf_root.getChildren() : []; var model = new CompositeMap($this.getObjectContext()); var datafilters = model.createChildNS('data-filters'); for (var i = 0;i < qfs.length;i++) { //dynamic query field var temp_qf = qfs[i]; create_query_field(temp_qf.query_field1); create_query_field(temp_qf.query_field2); if (temp_qf.query_field2) { var query_field2 = temp_qf.query_field2; var dataf = datafilters.createChildNS('data-filter'); dataf.name = query_field2.toLowerCase(); dataf.enforceoperations = 'query'; dataf.expression = query_field2.toLowerCase() + '=${@' + query_field2.toLowerCase() + '}'; } } //println($this.getObjectContext().toXML()); ]]></s:bm-script> </bm:features> <bm:relations/> <bm:query-fields/> </bm:model>