<?xml version="1.0" encoding="UTF-8"?> <bm:model xmlns:o="leaf.database.local.oracle" xmlns:e="leaf.service.exception" xmlns:s="leaf.plugin.script" xmlns:f="leaf.database.features" xmlns:bm="http://www.leaf-framework.org/schema/bm" alias="t1"> <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, queryoperator) { if (query_field) { var qf = new_bm_map('query-field'); qf.field = query_field; qf.queryoperator = queryoperator; //attribute name must in lowercase $this.addQueryField(qf.getData()); //get it's java type... } } function create_order_by_fields() { var robf = $ctx.model.getChild('rootpath_order_by_fields'); var order_by_fields_path = ( !! robf) ? robf.getChildren() : []; var order_by_fields = ''; if (order_by_fields_path.length) { for (var i = 0;i < order_by_fields_path.length;i++) { var order_by_field_result = order_by_fields_path[i]; var order_type = ''; if (order_by_field_result.grid_order_type == 'DESCENDING') { order_type = 'desc'; } else { order_type = 'asc'; } var temp_field_name = ''; if (order_by_field_result.data_type == 'NUMBER') { temp_field_name = 'to_number(' + order_by_field_result.column_name + ')'; } else { temp_field_name = order_by_field_result.column_name; } if (order_by_fields) { order_by_fields = order_by_fields + ',' + temp_field_name + ' ' + order_type; } else { order_by_fields = temp_field_name + ' ' + order_type; } } $this.setDefaultOrderby(order_by_fields); } } function override() { var qf_root = $this.getObjectContext().getChild("query-fields"); for (var i = 0;i < override_queryfields.length;i++) { var override_queryfield = override_queryfields[i]; importClass(Packages.uncertain.composite.CompositeUtil); var field_name = ''; var query_handle = ''; if (override_queryfield['name']) { field_name = 'name'; query_handle = 'queryexpression'; } else if (override_queryfield['field']) { field_name = 'field'; query_handle = 'queryoperator'; } var query_field = CompositeUtil.findChild(qf_root, "query-field", "field", override_queryfield[field_name]); if (query_field) { query_field.remove('field'); query_field.remove('queryoperator'); query_field.put(field_name, override_queryfield[field_name]); query_field.put(query_handle, override_queryfield[query_handle]); } else { var qf = new_bm_map('query-field'); qf[field_name] = override_queryfield[field_name]; qf[query_handle] = override_queryfield[query_handle]; $this.addQueryField(qf.getData()); } } } function add_datafilter() { if (add_datafilters.length) { var model = new CompositeMap($this.getObjectContext()); var datafilters = model.getChild('data-filters'); if (!datafilters) { datafilters = model.createChildNS('data-filters'); } for (var i = 0;i < add_datafilters.length;i++) { var add_datafilter = add_datafilters[i]; var dataf = datafilters.createChildNS('data-filter'); dataf.name = add_datafilter.name; dataf.enforceoperations = 'query'; dataf.expression = add_datafilter.expression; } } } function remove_datafilter(name) { var datafilters = $this.getObjectContext().getChild("data-filters"); importClass(Packages.uncertain.composite.CompositeUtil); if (datafilters) { var dataf = CompositeUtil.findChild(datafilters, "data-filter", "name", name); if (dataf) { datafilters.removeChild(dataf); } var dataf1 = CompositeUtil.findChild(datafilters, "data-filter"); if (!dataf1) { $this.getObjectContext().removeChild(datafilters); } } } function remove_query_field(name) { importClass(Packages.uncertain.composite.CompositeUtil); var qf_root = $this.getObjectContext().getChild("query-fields"); var query_field = CompositeUtil.findChild(qf_root, "query-field", "field", name); if (query_field) { qf_root.removeChild(query_field); } } function import_server_bm_tplt() { var cx = Packages.leaf.javascript.Context.getCurrentContext(); try { if ($ctx.tab_code) { Packages.leaf.plugin.script.engine.ScriptImportor.defineExternScript(cx, this, $ctx.getData(), 'layoutconfig/' + $ctx.parameter.layout_code.toLowerCase() + '_' + $ctx.tab_code.toLowerCase() + '_queryfields.js'); } if ($ctx.parameter.authority_flag == 'Y' && $ctx.query_tab_code) { Packages.leaf.plugin.script.engine.ScriptImportor.defineExternScript(cx, this, $ctx.getData(), "aut_authority_bm_validate.js"); } } catch (e) { var je = e.javaException; while (je && je.getCause()) je = je.getCause(); if (je && je.getClass() == java.io.FileNotFoundException) { if ($ctx.parameter.authority_flag == 'Y' && $ctx.query_tab_code) { Packages.leaf.plugin.script.engine.ScriptImportor.defineExternScript(cx, this, $ctx.getData(), "aut_authority_bm_validate.js"); } } else { throw e; } } } 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(); var bp_seq_flag = 'N', bp_category = 'N'; for (var i = 0;i < flds.length;i++) { var r = flds[i]; if (r.name == 'BP_SEQ') { bp_seq_flag = 'Y'; } else if (r.name == 'BP_CATEGORY') { bp_category = 'Y'; } 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 { if (!r.javatype) { f.setDataType('java.lang.String'); } 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(); if ($ctx.excelSaveFlag == 'Y') { var model = new CompositeMap($this.getObjectContext()); var datafilters = model.getChild('data-filters'); if (!datafilters) { datafilters = model.createChildNS('data-filters'); } dataf = datafilters.createChildNS('data-filter'); dataf.name = pk.name; dataf.enforceoperations = 'query'; dataf.expression = pk.name.toLowerCase() + '=${@' + pk.name.toLowerCase() + '}'; } $this.getObjectContext().getChild('primary-key').addChild(pk.getData()); //get it's java type... } if ($ctx.query_tab_code) { if (r.dbtype != 'DATE' && r.name.toLowerCase() != 'bp_seq' && r.name.toLowerCase() != 'bp_category' && r.name.toLowerCase() != 'copy_contract_id') { create_query_field(r.name.toLowerCase(), 'like'); } } } if (!$ctx.query_tab_code) { 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.getChild('data-filters'); if (!datafilters) { datafilters = model.createChildNS('data-filters'); } // if (bp_seq_flag == 'Y' && $ctx.dynamic_parent_table == 'prj_project') { // qfs.push({ // query_field1: '', // query_field2: 'BP_SEQ' // }); // } if (bp_category == 'Y' && $ctx.dynamic_parent_table == 'prj_project') { qfs.push({ query_field1: '', query_field2: 'BP_CATEGORY' }); } 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; if (($ctx.parameter.tree_code || $ctx.dynamic_tab_type == 'GRIDBOX') && query_field2.toLowerCase() == 'bp_seq') { continue; } var dataf = datafilters.createChildNS('data-filter'); dataf.name = query_field2.toLowerCase(); dataf.enforceoperations = 'query'; if ($ctx.query_bp_category) { if (temp_qf.query_field2 == 'BP_CATEGORY') { if ($ctx.parameter.bp_category == 'TENANT') { dataf.expression = query_field2.toLowerCase() + ' in (' + "'" + "TENANT" + "'," + "'" + "TENANT_SEC" + "'" + ')'; } else { dataf.expression = query_field2.toLowerCase() + '=${@' + query_field2.toLowerCase() + '}'; } } else { dataf.expression = query_field2.toLowerCase() + '=${@' + query_field2.toLowerCase() + '}'; } } else if (!$ctx.query_bp_category && (temp_qf.query_field2 == 'BP_CATEGORY' || temp_qf.query_field2 == 'BP_SEQ')) { dataf.expression = '1=1'; } else { dataf.expression = query_field2.toLowerCase() + '=${@' + query_field2.toLowerCase() + '}'; } } } } import_server_bm_tplt(); create_order_by_fields(); /* println('==============================='); println($ctx.parameter.authority_flag); println('==============================='); println($this.getObjectContext().toXML()); */ ]]></s:bm-script> </bm:features> <bm:relations/> <bm:query-fields/> </bm:model>