package com.vci.client.uif.engine.client.tableArea; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Cursor; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.regex.Pattern; import javax.swing.Action; import javax.swing.JScrollBar; import javax.swing.JTable; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.jdesktop.swingx.JXCollapsiblePane; import com.vci.client.bof.ClientBusinessObject; import com.vci.client.bof.ClientBusinessObjectOperation; import com.vci.client.bof.ClientLinkObject; import com.vci.client.common.ConfigUtils; import com.vci.client.logon.base.TabPanelManage; import com.vci.client.portal.utility.DataModelFactory; import com.vci.client.portal.utility.PLDefination; import com.vci.client.portal.utility.PRM; import com.vci.client.portal.utility.PRMItem; import com.vci.client.portal.utility.UITools; import com.vci.client.ui.swing.VCISwingUtil; import com.vci.client.ui.swing.components.VCIJButton; import com.vci.client.ui.swing.components.VCIJLabel; import com.vci.client.ui.swing.components.VCIJOptionPane; import com.vci.client.ui.swing.components.VCIJPanel; import com.vci.client.ui.swing.components.table.IndexColumnTableCellRender; import com.vci.client.ui.swing.components.table.VCIJTableNode; import com.vci.client.ui.swing.components.table.VCIJTablePanel; import com.vci.client.uif.actions.client.AbstractBatchBusionessOperationAction; import com.vci.client.uif.actions.client.BrowserAction; import com.vci.client.uif.actions.client.BusinessOperationAction; import com.vci.client.uif.actions.client.UIFUtils; import com.vci.client.uif.engine.client.AbstractRegionPanel; import com.vci.client.uif.engine.client.BasePanel; import com.vci.client.uif.engine.client.IDataModel; import com.vci.client.uif.engine.client.IRegionPanel; import com.vci.client.uif.engine.client.UIHelper; import com.vci.client.uif.engine.client.UILayoutPanel; import com.vci.client.uif.engine.client.event.UIEventConstanct; import com.vci.client.uif.engine.client.objopt.ObjectAddEditDialog; import com.vci.client.uif.engine.client.objopt.ObjectDBClickAddEditDialog; import com.vci.client.uif.engine.common.DefaultTableNode; import com.vci.client.uif.engine.common.IDataNode; import com.vci.client.uif.engine.common.api.CustomActionEvent; import com.vci.client.uif.engine.common.api.ICustomAction; import com.vci.corba.common.VCIError; import com.vci.corba.portal.data.PLAction; import com.vci.corba.portal.data.PLPageDefination; import com.vci.corba.portal.data.PLTabButton; import com.vci.corba.portal.data.PortalVI; import com.vci.mw.ClientContextVariable; public class TablePanel extends AbstractRegionPanel { private static final long serialVersionUID = -1614419631152531040L; private ClientBusinessObject cbo = null; @SuppressWarnings("unused") private boolean isSingleCheckManager = false; private Map dataMap = null; private ClientBusinessObjectOperation boOperation = new ClientBusinessObjectOperation(); public TablePanel(boolean isSingleCheckManager){ this.isSingleCheckManager = isSingleCheckManager; this.setDataModel(tablePanelModel); setComponentPanel(this); } public TablePanel(){ this.setDataModel(tablePanelModel); setComponentPanel(this); } public boolean isSupportEditTableCell(){ return false; } private VCIJPanel palSearchArea = new VCIJPanel(); /** * 按钮区域对象 */ private TablePanelButtonAreaPanel buttonAreaPanel = null; private VCIJPanel palTableListArea = new VCIJPanel(); private VCIJPanel palTableListDetailArea = new VCIJPanel(); private boolean expandSearchArea = false; private DataModelFactory factory = new DataModelFactory(); @Override public void preInit(String type, String context){ super.preInit(type, context); } @Override public Component init() { setLayout(new BorderLayout(3, 3)); String tableTitle = "数据列表"; if(this.getTabPage() != null){ tableTitle = getDefination().getName(); } initSearchArea(tableTitle); initTableListArea(); if(!searchAreaPanel.isHasNormatSearchAttrs() && !searchAreaPanel.isHasAdvanceSearchAttrs()){ add(UIHelper.getTitleBar(tableTitle, "base.png"), BorderLayout.NORTH); add(palTableListArea, BorderLayout.CENTER); } else { add(palSearchArea, BorderLayout.NORTH); add(palTableListArea, BorderLayout.CENTER); } setBuilt(true); setComponentPanel(this); return this; } private TablePanelSearchAreaPanel searchAreaPanel = null; private void initSearchArea(String title){ palSearchArea.setLayout(new BorderLayout()); searchAreaPanel = new TablePanelSearchAreaPanel( getType(), getContext(), getDefination(), factory, this); searchAreaPanel.init(); JXCollapsiblePane jxc = new JXCollapsiblePane(); jxc.add(searchAreaPanel); if(this.isExpandSearchArea()) { jxc.setCollapsed(false); } else { jxc.setCollapsed(true); } Action toggleAction = jxc.getActionMap().get(JXCollapsiblePane.TOGGLE_ACTION); toggleAction.putValue(JXCollapsiblePane.COLLAPSE_ICON, VCISwingUtil.createImageIcon("utilCalendarArrowDown.gif")); toggleAction.putValue(JXCollapsiblePane.EXPAND_ICON, VCISwingUtil.createImageIcon("utilCalendarRightArrow.gif")); //toggleAction.putValue(JXCollapsiblePane.COLLAPSE_ICON, UIManager.getIcon("Tree.expandedIcon")); //toggleAction.putValue(JXCollapsiblePane.EXPAND_ICON, UIManager.getIcon("Tree.collapsedIcon")); JXToggleButton toggleButton = new JXToggleButton(title, toggleAction); toggleButton.setHideActionText(true); palSearchArea.add(toggleButton, BorderLayout.NORTH); palSearchArea.add(jxc, BorderLayout.CENTER); } private void initTableListArea(){ palTableListArea.setLayout(new BorderLayout(3, 3)); initButtonArea(); initTableListDetailArea(); if(buttonAreaPanel != null && buttonAreaPanel.getBtns().length != 0){ palTableListArea.add(buttonAreaPanel, BorderLayout.NORTH); } palTableListArea.add(palTableListDetailArea, BorderLayout.CENTER); } private void initButtonArea(){ buttonAreaPanel = new TablePanelButtonAreaPanel(getTabId(), getType(), getContext(), getDefination(), getFactory(), this); buttonAreaPanel.init(); } private TablePanelDataProvider dataProvider = null; private VCIJTablePanel dataTablePanel = null; private IDataModel tablePanelModel = new TablePanelDataModel(this); private int[] getPageSizeList(){ int[] res = new int[]{10,20,30,40,50,100,200,300,500,800,1000}; String pageSizeCfgVal = ConfigUtils.getConfigValue("tablePanel.pageSizeList"); if(pageSizeCfgVal == null || pageSizeCfgVal.trim().equals("")){ return res; } LinkedList list = new LinkedList(); Pattern ptn = Pattern.compile("[0-9]+"); String[] pageSizes = pageSizeCfgVal.split(","); for(String pageSize : pageSizes){ if(ptn.matcher(pageSize).matches()){ list.add(Integer.valueOf(pageSize)); } } Integer[] ress = list.toArray(new Integer[]{}); res = new int[ress.length]; for (int i = 0; i < ress.length; i++) { Integer integer = ress[i]; res[i] = integer.intValue(); } Arrays.sort(res); return res; } protected Map getDefinationEventMap(){ Map map = new HashMap(); String[] eventKeys = getDefination().getEventKey().split(","); String[] eventValues = getDefination().getEventValue().split(","); for (int i = 0; i < eventKeys.length; i++) { String key = eventKeys[i]; if(key.trim().length() == 0) continue; if(i >= eventValues.length) continue; map.put(key, eventValues[i]); } return map; } protected Map eventMap = new HashMap(); @SuppressWarnings("serial") protected void initTableListDetailArea(){ dataProvider = new TablePanelDataProvider(this, factory, getType(), getContext(), getDefination()); String pageSizes = dataProvider.getTableDefPRM().getPrmItemList().get(0).getItemPageSize().trim(); dataTablePanel = new VCIJTablePanel(dataProvider); if ("".equals(pageSizes) || pageSizes.trim().equals("0")) { dataTablePanel.setPageSizeList(getPageSizeList()); }else { String[] pageStrings = pageSizes.split(","); // int[] res =new int[pageStrings.length]; ArrayList list = new ArrayList(); for (int i = 0; i < pageStrings.length; i++) { //if (pageStrings[i].trim().equals("all")) if (pageStrings[i].trim().contains("#")){ int index = pageStrings[i].indexOf("#"); String defaultsize = pageStrings[i].substring(index+1); pageStrings[i] = pageStrings[i].substring(0, index); list.add(Integer.parseInt(pageStrings[i])); list.add(Integer.parseInt(defaultsize)); continue; }else { // res[i] = Integer.parseInt(pageStrings[i]); list.add(Integer.parseInt(pageStrings[i])); } } Integer [] resa = (Integer [])list.toArray(new Integer[list.size()]); int[] res =new int[resa.length]; for (int i = 0; i < res.length; i++) { res[i] = resa[i]; } dataTablePanel.setPageSizeList(res); } dataTablePanel.setColumnDefaultWidth(250); dataTablePanel.setColumnDefaultWidthMax(1500); dataTablePanel.setColumnWidthMaps(dataProvider.getColumnWidthMap()); dataTablePanel.setEdiableColumnList(dataProvider.getEditableColumnList()); dataTablePanel.setEnableRowColorChangeInMouseHover(false); dataTablePanel.buildTablePanel(); dataTablePanel.getTable().setRowHeight(getRowHeight()); //dataTablePanel.buildTablePanel(isSingleCheckManager); dataTablePanel.refreshTableData(); dataTablePanel.setParentComponent(ClientContextVariable.getFrame()); JScrollBar horScrollBar = dataTablePanel.getDataScrollPane().getHorizontalScrollBar(); JScrollBar verScrollBar = dataTablePanel.getDataScrollPane().getVerticalScrollBar(); AdjustmentListener spAdjustmentListener = new AdjustmentListener(){ @Override public void adjustmentValueChanged(AdjustmentEvent e) { dataTablePanel.repaint(); dataTablePanel.updateUI(); } }; horScrollBar.addAdjustmentListener(spAdjustmentListener); verScrollBar.addAdjustmentListener(spAdjustmentListener); eventMap = getDefinationEventMap(); if(dataProvider.getHrefFieldList().size() != 0){ dataTablePanel.setEnableMouseClickEffect(false); dataTablePanel.setEnableMouseMoveEffect(false); final String hrefField = dataProvider.getHrefFieldList().get(0); int hrefFieldColumnIndex = dataProvider.getFieldToColumnIndex().get(hrefField); final int compareHrefFieldIndex = hrefFieldColumnIndex; // dataTablePanel.getTable().addMouseListener(new MouseAdapter() { // public void mouseClicked(MouseEvent e) { // int row = dataTablePanel.getTable().rowAtPoint(e.getPoint()); // int column = dataTablePanel.getTable().columnAtPoint(e.getPoint()); // if(compareHrefFieldIndex == column){ // VCIJTableNode node = dataTablePanel.getTableModel().getList().get(row); // Map map = node.getObject().getValueMap(); // // // 从主管理界面的数据列表中跳转到数据对象明细数据展示(Navigation\MainData\TabPage) // map.put(UIHelper.TYPE, getRedirectTargetType()); // map.put(UIHelper.CONTEXT, getRedirectTargetContext()); // map.put(UIHelper.OID, map.get(UIHelper.OID)); // // UILayoutPanel uipl = new UILayoutPanel(map); // uipl.setSourceDataNode(node.getObject()); // uipl.setDataValueMap(map); // uipl.prep(); // uipl.initMainPanel(); // // ClientContextVariable.getTabPanel().addTab(map.get(hrefField), uipl, true); // ClientContextVariable.getTabPanel().setSelectedComponent(uipl); // ClientContextVariable.getTabPanel().updateUI(); // } else { // valueChange(null); // } // } // }); dataTablePanel.getTable().getColumnModel().getColumn(hrefFieldColumnIndex).setCellRenderer( new IndexColumnTableCellRender(dataTablePanel){ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component compt = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if(compareHrefFieldIndex == column){ String valueString = value.toString(); valueString = "

" + valueString + "

"; VCIJLabel lbl = new VCIJLabel(valueString); lbl.setIcon(VCISwingUtil.createImageIcon("link.png")); lbl.setFont(UIHelper.Font12B); compt = lbl; VCIJPanel pal = new VCIJPanel(new GridBagLayout()); pal.add(new VCIJLabel(" "), getGBC(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, 2)); pal.add(lbl, getGBC(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, 2)); compt = pal; compt.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } return compt; } }); } dataTablePanel.getTable().getSelectionModel().addListSelectionListener(new ListSelectionListener(){ @Override public void valueChanged(ListSelectionEvent e) { //Add 20150723 if(dataTablePanel.getTable().getSelectionModel().getValueIsAdjusting()){//true为鼠标按下,false为鼠标释放 valueChange(e); } } }); dataTablePanel.getTable().addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { table_mouseClicked(e); } }); palTableListDetailArea.setLayout(new BorderLayout()); palTableListDetailArea.add(dataTablePanel, BorderLayout.CENTER); setDataModel(tablePanelModel); } /** * 获取列表设置的高度 * @return */ private int getRowHeight() { int rowHeight = VCISwingUtil.JTABLE_HEADER_HEIGHT; try { // TODO 暂时使用自定义sql语句的字段进行存储,值为整形,后续再进行调整完善 String sql = dataProvider.getTableDefPRM().getPrmItemList().get(0).getItemAddFilter(); if (sql != null && !sql.trim().equals("")) { rowHeight = Integer.valueOf(sql).intValue(); } } catch (Throwable e) { e.printStackTrace(); } return rowHeight; } private void table_mouseClicked(MouseEvent e){ String clickEventClass = eventMap.get(UIEventConstanct.SINGLE_CLICK_EVENT_KEY); String dbClickEventClass = eventMap.get(UIEventConstanct.DBCLICK_EVENT_KEY); if(e.getButton() == 1 && (clickEventClass != null && !"".equals(clickEventClass))){ responseCustomEvent(clickEventClass); } if(e.getButton() == 1 && e.getClickCount() == 2 ){ //add by caill start 双击表格中的某条数据时执行的事件 boolean flag = false; if (dbClickEventClass != null && !"".equals(dbClickEventClass)) { PLTabButton[] buttons = getTabButtons(getTabId()); if (buttons != null && buttons.length > 0) { for (int i = 0; i < buttons.length; i++) { if (dbClickEventClass.equals(buttons[i].plLabel)) { //遍历配置的按钮,当按钮中含有DBClickEvent设置的事件名字时,双击数据执行对应按钮点击时的效果 try { PLAction action = UITools.getService().getPLActionById(buttons[i].plActionOId); VCIJButton cbtn = new BasePanel().getVCIJButton(buttons[i], (IRegionPanel)getComponentPanel(), action); cbtn.doClick(); flag = true; break; } catch (VCIError e1) { e1.printStackTrace(); } } } } } if(flag == false){ //当按钮中不含有DBClickEvent设置的事件名字时,双击数据执行默认查看的效果 String tableName = this.getDefination().getTemplateId(); //获取数据所对应的表格名称 try { PortalVI pv=null; if(this.getDefination().getLinkType()!=null && !this.getDefination().getLinkType().equals("")){ pv = UITools.getService().getPortalVIByTypeNameAndVIName(this.getDefination().getLinkType(), tableName); }else{ pv = UITools.getService().getPortalVIByTypeNameAndVIName(this.getDefination().getShowType(), tableName); } String prm = pv.prm; PRM p = UITools.getPRM(prm); List list = p.getPrmItemList(); String formId = list.get(0).getItemInObj();//获取表单id System.out.println(formId); PortalVI portalVI = UITools.getService().getPortalVIById(formId);//根据表单id获取表单 dataMap = getBusinessObject(); System.out.println(portalVI); BrowserAction bsa = new BrowserAction(); bsa.setRegionPanel(this); Map paramsMap = new HashMap(); PLDefination pldef = this.getDefination(); ObjectDBClickAddEditDialog oad = new ObjectDBClickAddEditDialog(getType(), this.getContext(), this.getDefination(),portalVI, paramsMap, ObjectDBClickAddEditDialog.OperateType.BROWSER, null, bsa, this.getDataTablePanel()); oad.setTypeFlag(0); oad.init(); oad.setSize(UIHelper.DIALOG_DEFAULT_WIDTH, UIHelper.DIALOG_DEFAULT_HEIGHT); oad.setLocationRelativeTo(ClientContextVariable.getFrame()); //设置属性值 setEditDialogValue2(oad,dataMap); oad.setVisible(true); } catch (VCIError en) { // TODO Auto-generated catch block en.printStackTrace(); } } } if(dataProvider.getHrefFieldList().size() != 0){ responseHrefFieldClick(e); } } //add by caill end private void setEditDialogValue(ObjectAddEditDialog oad, ClientBusinessObject cbo){ oad.getOaep().setValueToUIControl(cbo); } private void setEditDialogValue2(ObjectDBClickAddEditDialog oad, Map dataMap){ oad.getOaep().setValueToUIControl((ClientLinkObject)dataMap.get("lo"), (ClientBusinessObject)dataMap.get("to")); } private PLTabButton[] getTabButtons(String tabId){ PLTabButton[] buttons = null; try { PLPageDefination[] pageDef = UITools.getService().getPLPageDefinationsByPageContextOId(tabId); String pageDefId = pageDef[0].plOId; buttons = UITools.getService().getPLTabButtonsByTableOId(pageDefId); } catch (VCIError e) { e.printStackTrace(); } return buttons; } private void responseHrefFieldClick(MouseEvent e){ final String hrefField = dataProvider.getHrefFieldList().get(0); int hrefFieldColumnIndex = dataProvider.getFieldToColumnIndex().get(hrefField); final int compareHrefFieldIndex = hrefFieldColumnIndex; int row = dataTablePanel.getTable().rowAtPoint(e.getPoint()); int column = dataTablePanel.getTable().columnAtPoint(e.getPoint()); if(compareHrefFieldIndex == column){ VCIJTableNode node = dataTablePanel.getTableModel().getList().get(row); Map map = node.getObject().getValueMap(); // 从主管理界面的数据列表中跳转到数据对象明细数据展示(Navigation\MainData\TabPage) map.put(UIHelper.TYPE, getRedirectTargetType()); map.put(UIHelper.CONTEXT, getRedirectTargetContext()); map.put(UIHelper.OID, map.get(UIHelper.OID)); UILayoutPanel uipl = new UILayoutPanel(map); uipl.setSourceDataNode(node.getObject()); uipl.setDataValueMap(map); uipl.prep(); uipl.initMainPanel(); TabPanelManage.getInstance().getTabPanel().addTab(map.get(hrefField), uipl, true); TabPanelManage.getInstance().getTabPanel().setSelectedComponent(uipl); TabPanelManage.getInstance().getTabPanel().updateUI(); } } private synchronized void responseCustomEvent(String eventClass){ Object impl = getClassInstance(eventClass); try{ if(impl != null && impl instanceof ICustomAction){ ICustomAction ica = (ICustomAction)impl; CustomActionEvent e = new CustomActionEvent(this, this); ica.actionPerformed(e); } }catch (Exception e) { e.printStackTrace(); VCIJOptionPane.showError( ClientContextVariable.getFrame(), "执行自定义‘" + eventClass + "’时发生错误!"); } } private Object getClassInstance(String className){ Object res = null; try{ Class cls = Class.forName(className); if(cls == null) return res; Constructor ctor = cls.getConstructor(); if(ctor == null) return res; res = ctor.newInstance(); }catch(Exception ex){ ex.printStackTrace(); } return res; } private synchronized void valueChange(ListSelectionEvent e){ int row = dataTablePanel.getTable().getSelectedRow(); if (row != -1) { Object selectObj = dataTablePanel.getSpecialObjectByRowIndex(row); TablePanel.this.getTablePanelModel().setClickObject(selectObj); TablePanel.this.getDataModel().getUILayoutModel().notify(TablePanel.this.getTablePanelModel()); } String selectionEventClass = eventMap.get("SelectionEvent"); if(selectionEventClass != null && !"".equals(selectionEventClass)){ responseCustomEvent(selectionEventClass); } } private String getRedirectTargetType(){ String res = ""; res = getType(); return res; } private String getRedirectTargetContext(){ String res = ""; res = getType(); return res; } private GridBagConstraints getGBC(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, int padxy) { return new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, new Insets(padxy, padxy, padxy, padxy), padxy, padxy); } public TablePanelDataProvider getDataProvider() { return dataProvider; } public void setDataProvider(TablePanelDataProvider dataProvider) { this.dataProvider = dataProvider; } public IDataModel getTablePanelModel() { return tablePanelModel; } public void setTablePanelModel(IDataModel tablePanelModel) { this.tablePanelModel = tablePanelModel; } public VCIJTablePanel getDataTablePanel() { return dataTablePanel; } public void setDataTablePanel(VCIJTablePanel dataTablePanel) { this.dataTablePanel = dataTablePanel; } public DataModelFactory getFactory() { return factory; } public void setFactory(DataModelFactory factory) { this.factory = factory; } public boolean isExpandSearchArea() { return expandSearchArea; } public void setExpandSearchArea(boolean expandSearchArea) { this.expandSearchArea = expandSearchArea; } /** * 返回 按钮区域对象 * @return */ public TablePanelButtonAreaPanel getButtonAreaPanel() { return buttonAreaPanel; } /** * 设置 按钮区域对象 * @param buttonAreaPanel */ public void setButtonAreaPanel(TablePanelButtonAreaPanel buttonAreaPanel) { this.buttonAreaPanel = buttonAreaPanel; } /** * 刷新界面 by zhonggy 2015-07 */ public void refreshUI(){ this.getDataTablePanel().refreshTableData(); } //add by caill start private String getSelectionEventValue() { String eventKeys = this.getDefination().getEventKey(); if (eventKeys == null || eventKeys.length() == 0) { return null; } String eventVals = this.getDefination().getEventValue(); if (eventVals == null || eventVals.length() == 0) { return null; } String[] keys = eventKeys.split(","); String[] values = eventVals.split(","); if (keys.length != values.length) { return null; } for (int i = 0; i < keys.length; i++) { if (keys[i] != null && keys[i].equals(UIEventConstanct.DBCLICK_EVENT_KEY)) { return values[i]; } } return null; } /** * 得到用户选择的业务对象数据 * @return */ private Map getBusinessObject(){ //获得业务对象数据 Object[] objs = getDataModel().getSelectObjects(); if(objs == null || objs.length < 1){ return null; } //查询结果 Map resultMap = new HashMap(); DefaultTableNode dtn = (DefaultTableNode) objs[0]; try { //判断主对象类型,修改link是主对象类型一定是link对象 if (dtn.getMaterObject() instanceof ClientLinkObject){ ClientLinkObject lo = (ClientLinkObject) dtn.getMaterObject(); //添加link resultMap.put("lo", lo); }else if(dtn.getMaterObject() instanceof ClientBusinessObject){ ClientBusinessObject cbo = (ClientBusinessObject) dtn.getMaterObject(); if(cbo == null){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.notexistmsg", dtn.getValueMap().get("name")); return null; } resultMap.put("to", cbo); } } catch (Exception e){ UIFUtils.showErrorMessage(ClientContextVariable.getFrame(),e); return null; } return resultMap; } //add by caill end }