1 package nc.ui.bd.ref; 2 3 /** 4 * 表参照-其他参照基类。 创建日期:(2001-8-23 20:26:54) 模型里未处理栏目 5 * 6 * @author:张扬 7 * 8 */ 9 10 import java.lang.reflect.Constructor; 11 import java.util.ArrayList; 12 import java.util.Arrays; 13 import java.util.Enumeration; 14 import java.util.HashMap; 15 import java.util.Hashtable; 16 import java.util.List; 17 import java.util.Map; 18 import java.util.StringTokenizer; 19 import java.util.Vector; 20 21 import javax.swing.event.ChangeEvent; 22 import javax.swing.event.ChangeListener; 23 import javax.swing.event.EventListenerList; 24 25 import nc.bs.framework.common.InvocationInfoProxy; 26 import nc.bs.framework.common.RuntimeEnv; 27 import nc.bs.logging.Logger; 28 import nc.jdbc.framework.misc.LRUMap; 29 import nc.ui.bd.BDGLOrgBookAccessor; 30 import nc.ui.bd.mmpub.DataDictionaryReader; 31 import nc.ui.uap.bd.def.DefFieldInfo; 32 import nc.ui.uap.bd.def.UFRefDefTanslateUtil; 33 import nc.vo.bd.access.BdinfoVO; 34 import nc.vo.bd.ref.DocSealWherePartMng; 35 import nc.vo.bd.ref.IFilterStrategy; 36 import nc.vo.bd.ref.RefColumnDispConvertVO; 37 import nc.vo.bd.ref.RefQueryResultVO; 38 import nc.vo.bd.ref.RefQueryVO; 39 import nc.vo.bd.ref.RefVO_mlang; 40 import nc.vo.bd.ref.RefcolumnVO; 41 import nc.vo.bd.ref.ReftableVO; 42 import nc.vo.bd.refdatatemp.RefdatatempVO; 43 import nc.vo.jcom.lang.StringUtil; 44 import nc.vo.logging.Debug; 45 import nc.vo.ml.NCLangRes4VoTransl; 46 import nc.vo.pub.BusinessException; 47 import nc.vo.pub.formulaset.FormulaParseFather; 48 import nc.vo.pub.lang.UFBoolean; 49 import nc.vo.sm.nodepower.OrgnizeTypeVO; 50 51 public abstract class AbstractRefModel implements IRefModel { 52 53 private String para1 = null; 54 55 private String para2 = null; 56 57 private String para3 = null; 58 59 protected IRefModelHandler modelHandler; 60 61 private ArrayList hiddenFieldList = new ArrayList(); 62 63 // V55需求,是否大小写敏感 64 private boolean isCaseSensitve = false; 65 66 // 67 private Vector vecAllColumnNames = null; 68 69 private RefQueryVO queryVO = new RefQueryVO(); 70 71 /** 72 * AbstractRefModel 构造子注解。 73 */ 74 public AbstractRefModel() { 75 super(); 76 try { 77 Class c; 78 // 加载服务器类。 79 if (RuntimeEnv.getInstance().isRunningInServer()) 80 c = Class.forName("nc.ui.bd.ref.impl.RefModelHandlerForServer"); 81 // 加载客户端类 82 else { 83 // Server server = (Server) 84 // NCLocator.getInstance().lookup(Server.class.getName()); 85 // Container container = server.getContainer("uap"); 86 // if(container == null) 87 // throw new ServletException("无法找到模块uap"); 88 // ClassLoader cl = container.getClassLoader(); 89 c = Class.forName("nc.ui.bd.ref.RefModelHandlerForClient"); 90 } 91 92 Constructor cs = c 93 .getConstructor(new Class[] { AbstractRefModel.class }); 94 modelHandler = (IRefModelHandler) cs.newInstance(this); 95 } catch (Exception e) { 96 Logger.error(e); 97 } 98 } 99 100 private String[] m_strFieldCode = null; // 业务表的字段名 101 102 private String[] m_strFieldName = null; // 业务表的字段中文名 103 104 // 业务表字段类型 105 private int[] m_intFieldType = null; 106 107 private String m_strPkFieldCode = null; 108 109 private String m_strTableName = null; // 业务表名 110 111 private java.lang.String m_strBlurValue = null; 112 113 private String m_strRefTitle = null; 114 115 protected Vector m_vecData = null; 116 117 private int m_iDefaultFieldCount = 2; 118 119 private String m_strOrderPart = null; 120 121 protected java.lang.String m_strPk_corp = null; 122 123 protected String m_strRefCodeField = null; 124 125 protected String m_strRefNameField = null; 126 127 protected Vector m_vecSelectedData = null; 128 129 private String m_strStrPatch = ""; 130 131 private String m_strWherePart = null; 132 133 private boolean m_bCacheEnabled = true; 134 135 private Hashtable m_htCodeIndex = null; 136 137 private String m_orgTypeCode = OrgnizeTypeVO.COMPANY_TYPE; 138 139 // 当前参照所在界面的功能节点号 140 private String m_fun_code = null; 141 142 // 参照增加按钮打开节点的功能节点编码 143 private String m_fun_code_DocOpen = null; 144 145 // 主体账簿主键 146 private String m_pk_glOrgBook = null; 147 148 // 增加从临时表取数的方式 2004-06-10 149 private boolean isFromTempTable = false; 150 151 // 是否包含模糊匹配Sql 152 private boolean isIncludeBlurPart = true; 153 154 // sxj 返回值是否包含下级节点 155 private boolean isIncludeSub = false; 156 157 private boolean isPKMatch = false; 158 159 // 树表和树型参照可以带一个表型参照,用来匹配助记码等。 160 private AbstractRefModel m_defGridmodel = null; 161 162 // sxj 2003-10-31 163 // 匹配数据时,如果匹配不上,是否刷新数据再匹配一次 164 private boolean m_isRefreshMatch = true; 165 166 // sxj 2004-03-17 167 // 是否显示封存数据 168 private boolean m_isSealedDataShow = false; 169 170 // 增加用户可以自定义setPk匹配的列。 2004-09-23 171 private String m_matchField = null; 172 173 // 数据匹配 174 private HashMap m_matchHM = new HashMap(); 175 176 // 支持助记码2003-02-19 177 // 支持助记码组 2004-01-12 178 private String[] m_mnecodes = null; 179 180 // sxj 2003-11-14 181 private String querySql = null; 182 183 // 高级过滤类名 184 private String refFilterDlgClaseName = null; 185 186 private String refQueryDlgClaseName = null; 187 188 // sxj 189 private Object userPara = null; 190 191 protected static final String LARGE_NODE_NAME = "客商基本档案:客商档案:客户档案:供应商档案:客商辅助核算:客户辅助核算:供应商辅助核算:客商档案包含冻结:客户档案包含冻结:供应商档案包含冻结:存货基本档案:存货档案:存货辅助核算:物料档案"; 192 193 // 参照setpk匹配数据时,是否包含参照WherePart的开关 194 private boolean isMatchPkWithWherePart = false; 195 196 // 参照的编辑状态,该状态和界面的可编辑性一致 197 private boolean m_isRefEnable = true; 198 199 // 参照对公式解析的支持 200 // 格式举例 formula[0][0] ="字段";formula[0][1]="公式内容" 201 private String[][] formulas = null; 202 203 // 树表参照查询是否启用(不是高级查询) 204 boolean isLocQueryEnable = true; 205 206 // 是否允许选择非末级 207 private boolean m_bNotLeafSelectedEnabled = true; 208 209 // isUseDataPower 2002-09-09 210 private boolean m_bUserDataPower = true; 211 212 // 动态列接口名字 213 private String m_dynamicColClassName = null; 214 215 // sxj 2003-04-10 216 // 提供按给定的Pks进行过滤 217 218 private int m_filterStrategy = IFilterStrategy.INSECTION; 219 220 private HashMap m_hmFilterPks = new HashMap(); 221 222 private String[] m_filterPks = null; 223 224 // htDispConvert2002-08-30 225 private Hashtable m_htDispConvertor = null; 226 227 // sxj 2003-10-28 动态列启用开关 228 private boolean m_isDynamicCol = false; 229 230 private int[] m_iShownColumns = null; 231 232 // 支持助记码多条记录的匹配2003-02-21 233 private boolean m_mnecodeInput = false; 234 235 private String[] m_strBlurFields = null; 236 237 private java.lang.String m_strDataSource = null; 238 239 // 动态列名称 240 private String[] m_strDynamicFieldNames = null; 241 242 private java.lang.String m_strGroupPart = null; 243 244 private String[] m_strHiddenFieldCode = null; 245 246 private java.lang.String m_strOriginWherePart; 247 248 // 新增参照ID(这里是名称) 249 protected String m_strRefNodeName = null; 250 251 // 用户调用动态列接口时,要使用到的参数。 252 private Object m_userParameter = null; 253 254 // 255 // private Vector m_vecUnMatchData = null; 256 257 private String refTempDataWherePart = null; 258 259 // 模糊匹配时,默认把code+助记码列(数组)作为匹配的列。该参数决定是否只用助记码列来匹配 260 private boolean isOnlyMneFields = false; 261 262 // 增补的wherePart 263 private String m_addWherePart = null; 264 265 // 处理特殊列显示转换 266 private Object[][] m_columnDispConverter = null; 267 268 // 用户 269 private String m_pk_user = null; 270 271 FormulaHandler formulaHandler = null; 272 273 DefFieldsHandler defFieldHandler = null; 274 275 private EventListenerList eListenerList = new EventListenerList(); 276 277 private Map eventListMap = new HashMap(); 278 279 private transient ChangeEvent changeEvent = null; 280 281 // 是否只显示集团数据 282 private boolean isGroupAssignData = false; 283 284 // 参照数据缓存Key前缀字符串 285 private String refDataCachekeyPreStr = "REFDATACACHE"; 286 287 private DDReaderVO ddReaderVO = null; 288 289 // 对于自定义参照数据权限的支持.数据权限优先按资源ID查询。 290 private int resourceID = -1; 291 292 private String sealedWherePart = null; 293 294 // 该条件会根据环境变量变化,同时在setpk时不带此条件 295 private String envWherePart = null; 296 297 private BdinfoVO bdinfoVO = null; 298 299 // 是否已初始化BDInfoVO 300 private boolean isInitBDinfoVO = false; 301 302 // 是否要改变关联表的顺序(为缓存) 303 private boolean isChangeTableSeq = true; 304 305 // 维护按钮是否可用 306 private boolean isMaintainButtonEnabled = true; 307 308 // 数据权限资源字段 309 private String dataPowerResourceColumn = null; 310 311 // 记录详细信息显示组件 312 private String refCardInfoComponentImplClass = null; 313 314 // 参照显示字段 315 private String refShowNameField = null; 316 317 // 自定义项字段,必须是表名.字段名 318 private String[] defFields = null; 319 320 // 对齐方式Map 321 private Map<String, Integer> alignMap = null; 322 323 // 界面控制自定义组件名称,该实现类必须继承JComponent,且包含AbstractRefMOdel的构造子 324 private String uiControlComponentClassName = null; 325 326 // 参照维护接口类,since v5.5 支持自定义档案维护界面 327 private String refDocEditClassName = null; 328 329 private class DDReaderVO { 330 String tableName = null; 331 332 String[] fieldNames = null; 333 334 /** 335 * @return 返回 fieldNames。 336 */ 337 public String[] getFieldNames() { 338 return fieldNames; 339 } 340 341 /** 342 * @param fieldNames 343 * 要设置的 fieldNames。 344 */ 345 public void setFieldNames(String[] fieldNames) { 346 this.fieldNames = fieldNames; 347 } 348 349 /** 350 * @return 返回 tableName。 351 */ 352 public String getTableName() { 353 return tableName; 354 } 355 356 /** 357 * @param tableName 358 * 要设置的 tableName。 359 */ 360 public void setTableName(String tableName) { 361 this.tableName = tableName; 362 } 363 } 364 365 /** 366 * @return 返回 m_columnDispConverterClass。 367 */ 368 public Object[][] getColumnDispConverter() { 369 return m_columnDispConverter; 370 } 371 372 /** 373 * @param dispConverterClass 374 * 要设置的 m_columnDispConverterClass。 375 */ 376 public void setColumnDispConverter(Object[][] dispConverter) { 377 m_columnDispConverter = dispConverter; 378 } 379 380 /** 381 * 增加where子句 创建日期:(2001-8-16 12:42:02) 382 * 383 * @param newWherePart 384 * java.lang.String 385 */ 386 public void addWherePart(String newWherePart) { 387 // 从原始Where增加 388 // m_strWherePart = getOriginWherePart(); 389 // if (m_strWherePart == null || m_strWherePart.trim().length() == 0) { 390 // m_strWherePart = " ( 11 = 11 )"; 391 // } 392 // if (newWherePart != null && newWherePart.trim().length() > 0) { 393 // m_strWherePart = "( " + m_strWherePart + " )"; 394 // m_strWherePart += " " + newWherePart + " "; 395 // } 396 397 // setAddWherePart(newWherePart); 398 399 m_addWherePart = newWherePart; 400 401 // clearData(); 402 resetSelectedData_WhenDataChanged(); 403 } 404 405 /** 406 * 创建日期:(2004-9-23 9:03:51) 407 * 408 * @param newM_matchField 409 * java.lang.String 自定义的列。用SetPk方法设的值在该列中匹配。 不建议使用。 410 */ 411 public void setMatchField(java.lang.String newM_matchField) { 412 m_matchField = newM_matchField; 413 } 414 415 /** 416 * 此处插入方法说明。 417 * 418 * /** 清除数据及缓存。 创建日期:(2001-8-23 21:01:00) 419 */ 420 public void clearData() { 421 422 clearModelData(); 423 clearCacheData(); 424 425 } 426 427 /** 428 * 删除参照缓存数据 429 */ 430 public void clearCacheData() { 431 modelHandler.clearCacheData(); 432 } 433 434 protected void clearModelData() { 435 m_vecData = null; 436 setSelectedData(null); 437 438 } 439 440 protected void clearDataPowerCache() { 441 modelHandler.clearDataPowerCache(); 442 } 443 444 /** 445 * 将一行数据转化为VO,如不使用VO可以虚实现。 创建日期:(2001-8-13 16:34:11) 446 * 447 * @return nc.vo.pub.ValueObject 448 * @param vData 449 * java.util.Vector 450 */ 451 public nc.vo.pub.ValueObject convertToVO(java.util.Vector vData) { 452 return null; 453 } 454 455 /** 456 * 将多行数据转化为VO数组。 创建日期:(2001-8-13 16:34:11) 457 * 458 * @return nc.vo.pub.ValueObject[] 459 * @param vData 460 * java.util.Vector 461 */ 462 public nc.vo.pub.ValueObject[] convertToVOs(java.util.Vector vData) { 463 if (vData == null || vData.size() == 0) 464 return null; 465 nc.vo.pub.ValueObject[] vos = new nc.vo.pub.ValueObject[vData.size()]; 466 for (int i = 0; i < vData.size(); i++) { 467 Vector vRecord = (Vector) vData.elementAt(i); 468 vos[i] = convertToVO(vRecord); 469 } 470 return vos; 471 } 472 473 /** 474 * 模糊字段值。 创建日期:(2001-8-17 11:17:42) 475 * 476 * @return java.lang.String 477 */ 478 public String getBlurValue() { 479 return m_strBlurValue; 480 } 481 482 /** 483 * 获取缓存或数据库表中的参照数据--二维Vector。 484 * <p> 485 * <strong>最后修改人:sxj</strong> 486 * <p> 487 * <strong>最后修改日期:2006-7-12</strong> 488 * <p> 489 * 490 * @param 491 * @return Vector 492 * @exception BusinessException 493 * @since NC5.0 494 */ 495 public final Vector getRefData() { 496 return modelHandler.getRefData(); 497 } 498 499 /** 500 * 获取参照数据--二维Vector。 自定义参照可以覆盖 501 * 502 * @return java.util.Vector 503 */ 504 505 public java.util.Vector getData() { 506 507 String sql = getRefSql(); 508 509 Vector v = null; 510 if (isCacheEnabled()) { 511 /** 从缓存读数据 */ 512 v = modelHandler.getFromCache(getRefDataCacheKey(), 513 getRefCacheSqlKey()); 514 } 515 516 if (v == null) { 517 518 // 从数据库读--也可以在此定制数据 519 520 try { 521 522 if (isFromTempTable()) { 523 v = modelHandler.queryRefDataFromTemplateTable(sql); 524 } else { 525 // 同时读取参照栏目数据 526 v = getQueryResultVO(); 527 } 528 529 } catch (Exception e) { 530 Debug.debug(e.getMessage(), e); 531 } 532 533 } 534 535 putToCache(v); 536 537 m_vecData = v; 538 return m_vecData; 539 } 540 541 public void putToCache(Vector v) { 542 if (v != null && isCacheEnabled()) { 543 /** 加入到缓存中 */ 544 modelHandler.putToCache(getRefDataCacheKey(), getRefCacheSqlKey(), 545 v); 546 } 547 } 548 549 public Vector getConvertedData1(boolean isDataFromCache, Vector v, 550 boolean isDefConverted) { 551 return getConvertedData(isDataFromCache, v, isDefConverted); 552 } 553 554 /** 555 * <p> 556 * <strong>最后修改人:sxj</strong> 557 * <p> 558 * <strong>最后修改日期:2006-7-12</strong> 559 * <p> 560 * 561 * @param 562 * @return void 563 * @exception BusinessException 564 * @since NC5.0 565 */ 566 protected Vector getConvertedData(boolean isDataFromCache, Vector v, 567 boolean isDefConverted) { 568 if (v == null) { 569 return v; 570 } 571 Vector vecData = v; 572 573 // 与总账协商的结果,按传入Pks过滤 574 if (vecData != null && vecData.size() > 0) { 575 vecData = getFilterPKsVector(vecData, getFilterStrategy()); 576 577 } 578 // 多语言处理 579 // 缓存中的数据已经处理过了. 580 if (!isDataFromCache) { 581 setMlangValues(vecData, getRefVO_mlang()); 582 if (getFormulas() != null) { 583 getFormulaHandler().setFormulaValues(vecData, getFormulas()); 584 } 585 // 统计型自定义项pk-->name 586 if (isDefConverted) { 587 getDefFieldHandler().setDefFieldValues(vecData); 588 } 589 590 } 591 // 特殊处理结束 592 // try to convert 593 handleDispConvertor(vecData); 594 // end converts 595 // 处理特殊显示列。 596 if (getColumnDispConverter() != null) { 597 setColDispValues(vecData, getColumnDispConverter()); 598 } 599 return vecData; 600 } 601 602 /** 603 * 枚举类型显示值的转换 604 * <p> 605 * <strong>最后修改人:sxj</strong> 606 * <p> 607 * <strong>最后修改日期:2006-3-9</strong> 608 * <p> 609 * 610 * @param 611 * @return void 612 * @exception 613 * @since NC5.0 614 */ 615 private void handleDispConvertor(Vector v) { 616 if (getDispConvertor() != null) { 617 Hashtable convert = getDispConvertor(); 618 Enumeration e = convert.keys(); 619 while (e.hasMoreElements()) { 620 String convertColumn = (String) e.nextElement(); 621 Hashtable conv = (Hashtable) convert.get(convertColumn); 622 Integer Idx = (Integer) getHtCodeIndex().get(convertColumn); 623 if (Idx == null || Idx.intValue() < 0) 624 continue; 625 int idx = Idx.intValue(); 626 if (v != null) { 627 int rows = v.size(); 628 for (int i = 0; i < rows; i++) { 629 Vector vRow = (Vector) v.elementAt(i); 630 if (vRow != null) { 631 Object oldValue = vRow.elementAt(idx); 632 if (oldValue == null) 633 continue; 634 Object newValue = conv.get(oldValue.toString()); 635 if (newValue != null) { 636 vRow.setElementAt(newValue, idx); 637 // 如果需求,可以转换为原值,目前先保持翻译后的值 638 // Object obj = 639 // getRefValueVO(vRow.elementAt(idx), 640 // newValue); 641 // vRow.setElementAt(obj, idx); 642 } 643 } 644 } 645 } 646 } 647 } 648 } 649 650 /** 651 * 默认显示字段中的显示字段数----表示显示前几个字段 652 */ 653 public int getDefaultFieldCount() { 654 return m_iDefaultFieldCount; 655 } 656 657 /** 658 * 得到一个字段在所有字段中的下标。 创建日期:(2001-8-16 15:39:23) 659 * 660 * @return int 661 * @param fieldList 662 * java.lang.String[] 663 * @param field 664 * java.lang.String 665 */ 666 public int getFieldIndex(String field) { 667 668 if (field == null || field.trim().length() == 0 669 || getHtCodeIndex() == null || getHtCodeIndex().size() == 0) 670 return -1; 671 Object o = getHtCodeIndex().get(field.trim()); 672 if (o == null) { 673 // 加入动态列 674 int index = m_htCodeIndex.size(); 675 if (isDynamicCol() && getDynamicFieldNames() != null) { 676 for (int i = 0; i < getDynamicFieldNames().length; i++) { 677 m_htCodeIndex.put(getDynamicFieldNames()[i].trim(), 678 new Integer(index + i)); 679 } 680 } 681 o = getHtCodeIndex().get(field.trim()); 682 } 683 684 return (o == null) ? -1 : ((Integer) o).intValue(); 685 } 686 687 /** 688 * 此处插入方法说明。 创建日期:(01-6-17 18:35:14) 689 * 690 * @return java.util.Hashtable 691 */ 692 public Hashtable getHtCodeIndex() { 693 if (m_htCodeIndex == null || m_htCodeIndex.size() == 0) { 694 m_htCodeIndex = new Hashtable(); 695 if (getFieldCode() != null) 696 for (int i = 0; i < getFieldCode().length; i++) { 697 m_htCodeIndex.put(getFieldCode()[i].trim(), new Integer(i)); 698 } 699 700 if (getHiddenFieldCode() != null) { 701 int index = 0; 702 if (getFieldCode() != null) { 703 index = getFieldCode().length; 704 } 705 for (int i = 0; i < getHiddenFieldCode().length; i++) { 706 if (getHiddenFieldCode()[i] != null) { 707 m_htCodeIndex.put(getHiddenFieldCode()[i].trim(), 708 new Integer(index + i)); 709 } else { 710 System.out 711 .println("Waring: The RefModel has some errors."); 712 } 713 } 714 } 715 716 } 717 return m_htCodeIndex; 718 } 719 720 /** 721 * Order子句。 722 * 723 * @return java.lang.String 724 */ 725 public String getOrderPart() { 726 if (m_strOrderPart == null && getFieldCode() != null 727 && getFieldCode().length > 0) 728 m_strOrderPart = getFieldCode()[0]; 729 return m_strOrderPart; 730 } 731 732 /** 733 * 得到公司主键--默认参照使用。 创建日期:(2001-8-17 11:17:03) 734 * 735 * @return java.lang.String 736 */ 737 public String getPk_corp() { 738 if (m_strPk_corp == null) { 739 m_strPk_corp = modelHandler.getPk_corp(); 740 } 741 return m_strPk_corp; 742 } 743 744 /** 745 * 返回值--主键字段 746 * 747 * @return java.lang.String 748 */ 749 public String getPkValue() { 750 String strValue = null; 751 Object objValue = getValue(getPkFieldCode()); 752 if (objValue != null) { 753 strValue = objValue.toString(); 754 } 755 756 return strValue; 757 } 758 759 /** 760 * 返回值数组--主键字段 761 * 762 * @return java.lang.String 763 */ 764 public java.lang.String[] getPkValues() { 765 766 Object[] oDatas = getValues(getPkFieldCode()); 767 String[] sDatas = objs2Strs(oDatas); 768 return sDatas; 769 } 770 771 /** 772 * 参照编码字段。 创建日期:(2001-8-13 16:19:24) 773 * 774 * @return java.lang.String 775 */ 776 public String getRefCodeField() { 777 if (m_strRefCodeField == null && getFieldCode() != null 778 && getFieldCode().length > 0) 779 m_strRefCodeField = getFieldCode()[0]; 780 return m_strRefCodeField; 781 } 782 783 /** 784 * 返回值--编码字段 创建日期:(2001-8-13 16:19:24) 785 * 786 * @return java.lang.String 787 */ 788 public String getRefCodeValue() { 789 790 String strValue = null; 791 String[] strValues = getRefCodeValues(); 792 if (strValues != null && strValues.length > 0) { 793 strValue = strValues[0]; 794 } 795 return strValue; 796 } 797 798 /** 799 * 返回值数组--编码字段 创建日期:(2001-8-13 16:19:24) 800 * 801 * @return java.lang.String[] 802 */ 803 public java.lang.String[] getRefCodeValues() { 804 Object[] oDatas = getValues(getRefCodeField()); 805 String[] sDatas = objs2Strs(oDatas); 806 return sDatas; 807 } 808 809 protected String[] objs2Strs(Object[] oDatas) { 810 if (oDatas == null) 811 return null; 812 String[] sDatas = new String[oDatas.length]; 813 for (int i = 0; i < oDatas.length; i++) { 814 if (oDatas[i] == null) 815 sDatas[i] = null; 816 else 817 sDatas[i] = oDatas[i].toString().trim(); 818 } 819 return sDatas; 820 } 821 822 /** 823 * 参照名称字段。 创建日期:(2001-8-13 16:19:24) 824 * 825 * @return java.lang.String 826 */ 827 public String getRefNameField() { 828 if (m_strRefNameField == null && getFieldCode() != null 829 && getFieldCode().length > 1) 830 m_strRefNameField = getFieldCode()[1]; 831 return m_strRefNameField; 832 } 833 834 /** 835 * 返回值-名称字段 创建日期:(2001-8-13 16:19:24) 836 * 837 * @return java.lang.String 838 */ 839 public java.lang.String getRefNameValue() { 840 841 String strValue = null; 842 String[] strValues = getRefNameValues(); 843 if (strValues != null && strValues.length > 0) { 844 strValue = strValues[0]; 845 } 846 return strValue; 847 } 848 849 /** 850 * 返回值-名称字段 创建日期:(2001-8-13 16:19:24) 851 * 852 * @return java.lang.String[] 853 */ 854 public java.lang.String[] getRefNameValues() { 855 // 名称列,取翻译后的值 856 Object[] oDatas = getValues(getRefNameField(), getSelectedData(), false); 857 858 String[] sDatas = objs2Strs(oDatas); 859 860 return sDatas; 861 } 862 863 public java.lang.String[] getRefShowNameValues() { 864 // 名称列,取翻译后的值 865 Object[] oDatas = getValues(getRefShowNameField(), getSelectedData(), 866 false); 867 868 return objs2Strs(oDatas); 869 } 870 871 /** 872 * 此处插入方法说明。 创建日期:(2001-8-15 17:30:17) 873 * 874 * @return java.lang.String 875 */ 876 public String getRefSql() { 877 878 return getSql(getStrPatch(), getFieldCode(), getHiddenFieldCode(), 879 getTableName(), getWherePart(), getGroupPart(), getOrderPart()); 880 881 } 882 883 /** 884 * 返回选择数据--二维数组。 创建日期:(2001-8-23 19:10:29) 885 * 886 * @return java.util.Vector 887 */ 888 public java.util.Vector getSelectedData() { 889 return m_vecSelectedData; 890 } 891 892 /** 893 * DISTINCT子句 894 * 895 * @return java.lang.String 896 */ 897 public String getStrPatch() { 898 return m_strStrPatch; 899 } 900 901 /** 902 * 返回值-根据参数字段 创建日期:(2001-8-13 16:19:24) 903 * 904 * @return java.lang.Object 905 */ 906 public Object getValue(String field) { 907 Object[] values = getValues(field); 908 909 Object value = null; 910 911 if (values != null && values.length > 0) { 912 value = values[0]; 913 } 914 915 return value; 916 } 917 918 /** 919 * 返回值数组-根据参数字段 创建日期:(2001-8-13 16:19:24) 920 * 921 * @return java.lang.Object[] 922 */ 923 public java.lang.Object[] getValues(String field) { 924 925 return getValues(field, true); 926 } 927 928 /** 929 * 取参照选中记录给定列的值 930 * 931 * <p> 932 * <strong>最后修改人:sxj</strong> 933 * <p> 934 * <strong>最后修改日期:2006-11-16</strong> 935 * <p> 936 * 937 * @param field 938 * 列 939 * @param 是否是原值。列可能已被翻译(例如定义了公式,定义了多语翻译,定义了枚举类型的对应值) 940 * 941 * @return java.lang.Object[] 942 * @exception BusinessException 943 * @since NC5.0 944 */ 945 public java.lang.Object[] getValues(String field, boolean isOriginValue) { 946 947 return getValues(field, getSelectedData(), isOriginValue); 948 } 949 950 /** 951 * 952 */ 953 public java.lang.Object[] getValues(String field, Vector datas) { 954 955 return getValues(field, datas, true); 956 } 957 958 protected java.lang.Object[] getValues(String field, Vector datas, 959 boolean isOriginValue) { 960 int col = getFieldIndex(field); 961 if (datas == null || datas.size() == 0) 962 return null; 963 if (col < 0) { 964 throw new RuntimeException("参照中没有该属性"); 965 } 966 Vector vRecord = null; 967 Object[] oData = new Object[datas.size()]; 968 for (int i = 0; i < datas.size(); i++) { 969 vRecord = (Vector) datas.elementAt(i); 970 if (vRecord == null || vRecord.size() == 0 || col >= vRecord.size()) 971 oData[i] = null; 972 else { 973 oData[i] = getValueOfRefvalueVO(vRecord.elementAt(col), 974 isOriginValue); 975 } 976 } 977 return oData; 978 } 979 980 private Object getValueOfRefvalueVO(Object obj, boolean isOriginValue) { 981 Object value = obj; 982 if (obj instanceof RefValueVO && isOriginValue) { 983 value = ((RefValueVO) obj).getOriginValue(); 984 } 985 /** 986 * V55 数据库中查出的原始类型为BigDecimal,为NC处理简便,参照对外统一转换为UFDouble 987 * 988 */ 989 990 value = RefPubUtil.bigDecimal2UFDouble(value); 991 992 return value; 993 994 } 995 996 /** 997 * 获取已经读出的参照数据--二维Vector。 创建日期:(2001-8-23 18:39:24) 998 * 999 * @return java.util.Vector 1000 */ 1001 public java.util.Vector getVecData() { 1002 return m_vecData; 1003 } 1004 1005 /** 1006 * 此处插入方法说明。 创建日期:(2001-8-25 12:06:11) 1007 * 1008 * @return nc.vo.pub.ValueObject 1009 */ 1010 public nc.vo.pub.ValueObject getVO() { 1011 if (getSelectedData() != null && getSelectedData().size() > 0) 1012 return convertToVO(((Vector) getSelectedData().elementAt(0))); 1013 else 1014 return null; 1015 } 1016 1017 /** 1018 * 此处插入方法说明。 创建日期:(2001-8-25 12:06:11) 1019 * 1020 * @return nc.vo.pub.ValueObject 1021 */ 1022 public nc.vo.pub.ValueObject[] getVOs() { 1023 return convertToVOs(getSelectedData()); 1024 } 1025 1026 /** 1027 * getWherePart 方法注解。 1028 */ 1029 public String getWherePart() { 1030 return m_strWherePart; 1031 } 1032 1033 /** 1034 * 此处插入方法说明。 创建日期:(2001-8-23 21:03:06) 1035 * 1036 * @return boolean 1037 */ 1038 public boolean isCacheEnabled() { 1039 return m_bCacheEnabled; 1040 } 1041 1042 /** 1043 * 匹配界面输入数据--选择数据也改变了。 创建日期:(2001-8-23 18:39:24) 1044 * 1045 * @return java.util.Vector 1046 */ 1047 public Vector matchBlurData(String strBlurValue) { 1048 Vector v = null; 1049 if (strBlurValue != null && strBlurValue.trim().length() > 0) { 1050 v = matchData(getBlurFields(), new String[] { strBlurValue }); 1051 // 如果是模糊查询的结果或者是编码等多条匹配,处理叶子节点是否可以选中 1052 // 用于树形参照通过模糊匹配变成表型,过滤掉非叶子节点 1053 1054 if (!isNotLeafSelectedEnabled() 1055 && (!isNull(strBlurValue) || isMnecodeInput())) { 1056 1057 v = filterNotLeafNode(v); 1058 } 1059 1060 } 1061 // 清空已选择数据 1062 setSelectedData(v); 1063 return v; 1064 1065 } 1066 1067 private boolean isNull(String str) { 1068 return str == null || str.trim().length() == 0; 1069 } 1070 1071 /** 1072 * 获取匹配数据 匹配成功 数据->m_vecSelectedData 匹配不成功 null->m_vecSelectedData 1073 * 创建日期:(2001-8-23 18:39:24) 1074 * 1075 * @return java.util.Vector sxj 修改如果value= null or value.length()=0 1076 * 不做匹配,提高效率,防止重复reloadData() 1077 */ 1078 public Vector matchData(String field, String value) { 1079 return matchData(new String[] { field }, new String[] { value }); 1080 } 1081 1082 /** 1083 * 匹配主键数据--选择数据也改变了。 创建日期:(2001-8-23 18:39:24) 1084 * 1085 * @return java.util.Vector sxj 2004-06-08 如果是用Pk 进行匹配,则在最大集内进行匹配。 根据 1086 * getMatchField()提供的列进行匹配 1087 */ 1088 public Vector matchPkData(String strPkValue) { 1089 1090 if (strPkValue == null || strPkValue.trim().length() == 0) { 1091 setSelectedData(null); 1092 return null; 1093 1094 } 1095 return matchPkData(new String[] { strPkValue }); 1096 } 1097 1098 /** 1099 * 重新载入数据。 1.使用缓存手动调用如刷新按钮。 创建日期:(2001-8-23 21:14:19) 1100 * 1101 * @return java.util.Vector 1102 */ 1103 public java.util.Vector reloadData() { 1104 1105 reloadData1(); 1106 1107 return getRefData(); 1108 } 1109 1110 // 重载数据前的处理 1111 public void reloadData1() { 1112 // 刷新前已选择的数据 1113 String[] selectedPKs = getPkValues(); 1114 1115 clearData(); 1116 // 清数据权限缓存 1117 clearDataPowerCache(); 1118 1119 modelHandler.getLRUMap().clear(); 1120 1121 // 刷新后重新匹配数据。 1122 if (selectedPKs != null && selectedPKs.length > 0) { 1123 matchPkData(selectedPKs); 1124 } 1125 modelHandler.fireDBCache(); 1126 } 1127 1128 /** 1129 * 设置模糊值。 创建日期:(2001-8-17 12:57:37) 1130 */ 1131 public void setBlurValue(String strBlurValue) { 1132 m_strBlurValue = strBlurValue; 1133 } 1134 1135 /** 1136 * 此处插入方法说明。 创建日期:(2001-8-23 21:03:06) 1137 */ 1138 public void setCacheEnabled(boolean cacheEnabled) { 1139 m_bCacheEnabled = cacheEnabled; 1140 } 1141 1142 /** 1143 * 此处插入方法说明。 创建日期:(2001-8-24 10:32:33) 1144 * 1145 * @param vData 1146 * java.util.Vector 1147 */ 1148 public void setData(Vector vData) { 1149 m_vecData = vData; 1150 // 默认参照支持自定义数据 1151 if (isCacheEnabled()) { 1152 String sql = getRefSql(); 1153 modelHandler.putToCache(getRefDataCacheKey(), sql, vData); 1154 } 1155 } 1156 1157 /** 1158 * 默认显示字段中的显示字段数----表示显示前几个字段 1159 */ 1160 public void setDefaultFieldCount(int iDefaultFieldCount) { 1161 m_iDefaultFieldCount = iDefaultFieldCount; 1162 } 1163 1164 /** 1165 * Order子句。 1166 */ 1167 public void setOrderPart(String strOrderPart) { 1168 m_strOrderPart = strOrderPart; 1169 } 1170 1171 /** 1172 * 设置公司主键--默认参照使用。 自定义参照不支持动态改变环境变量动态改变WherePart 1173 * 1174 * @return java.lang.String 1175 */ 1176 public void setPk_corp(String strPk_corp) { 1177 if (strPk_corp == null) { 1178 return; 1179 } 1180 // 切换公司,主体账簿主键也会改变(对于会计科目参照等主体账簿) 1181 m_pk_glOrgBook = null; 1182 // 自定义参照,用字符串替换算法来动态改变Wherepart,对于系统默认参照 1183 setPk_corpForDefRef(strPk_corp, m_strPk_corp); 1184 m_strPk_corp = strPk_corp; 1185 // 系统默认参照 1186 // 重置WherePart,也可能有其他信息也要改变, 1187 resetWherePart(); 1188 } 1189 1190 /** 1191 * <p> 1192 * <strong>最后修改人:sxj</strong> 1193 * <p> 1194 * <strong>最后修改日期:2006-6-16</strong> 1195 * <p> 1196 * 1197 * @param 1198 * @return void 1199 * @exception BusinessException 1200 * @since NC5.0 1201 */ 1202 private void resetWherePart() { 1203 setRefNodeName(getRefNodeName()); 1204 // 可能有业务组添加的WherePart 1205 String wherePart = getWherePart(); 1206 // 如果WherePart中不包含业务组添加的WherePart,再给添加上 1207 if (getAddWherePart() != null && wherePart != null 1208 && wherePart.indexOf(getAddWherePart()) < 0) { 1209 addWherePart(getAddWherePart()); 1210 } 1211 } 1212 1213 /** 1214 * 设置公司主键同时重置参照默认配置条件 1215 * 1216 * @deprecated 1217 */ 1218 public void setPk_corpAndRefreshRefNodeName(String strPk_corp) { 1219 setPk_corp(strPk_corp); 1220 1221 } 1222 1223 /* 1224 * 自定义参照动态改变公司主键后,要重新设置WherePart 1225 */ 1226 private void setPk_corpForDefRef(String pk_corp, String pk_corpOld) { 1227 1228 if (pk_corpOld != null && pk_corp != null 1229 && (!pk_corpOld.equals(pk_corp))) { 1230 String wherePartOld = getWherePart(); 1231 String wherePart = ""; 1232 if (wherePartOld != null) { 1233 int index = wherePartOld.indexOf("'" + pk_corpOld + "'"); 1234 if (index > 0) { 1235 wherePart = wherePartOld.replaceFirst("'" + pk_corpOld 1236 + "'", "'" + pk_corp + "'"); 1237 setWherePart(wherePart); 1238 } 1239 } 1240 } 1241 } 1242 1243 /** 1244 * 设置参照编码字段。 创建日期:(2001-8-13 16:19:24) 1245 */ 1246 public void setRefCodeField(String strRefCodeField) { 1247 m_strRefCodeField = strRefCodeField; 1248 } 1249 1250 /** 1251 * 设置参照名称字段。 创建日期:(2001-8-13 16:19:24) 1252 */ 1253 public void setRefNameField(String strRefNameField) { 1254 m_strRefNameField = strRefNameField; 1255 } 1256 1257 /** 1258 * 此处插入方法说明。 创建日期:(2001-8-25 18:58:00) 1259 * 1260 * @param vecSelectedData 1261 * java.util.Vector 1262 */ 1263 public void setSelectedData(Vector vecSelectedData) { 1264 m_vecSelectedData = vecSelectedData; 1265 } 1266 1267 public void setSelectedDataAndConvertData(Vector vecSelectedData) { 1268 if (vecSelectedData == null) { 1269 setSelectedData(vecSelectedData); 1270 return; 1271 } 1272 Vector matchVec = getConvertedData(false, vecSelectedData, false); 1273 setSelectedData(matchVec); 1274 putLruMap(matchVec); 1275 } 1276 1277 /** 1278 * 此处插入方法说明。 创建日期:(01-6-19 21:15:22) 1279 * 1280 * @param newStrPatch 1281 * java.lang.String 1282 */ 1283 public void setStrPatch(java.lang.String newStrPatch) { 1284 m_strStrPatch = newStrPatch; 1285 } 1286 1287 /** 1288 * 此处插入方法说明。 创建日期:(2001-8-16 12:42:02) 1289 * 1290 * @param newWherePart 1291 * java.lang.String 1292 */ 1293 public void setWherePart(String newWherePart) { 1294 1295 if (newWherePart != null) { 1296 newWherePart = newWherePart.trim(); 1297 int index = newWherePart.toLowerCase().indexOf("where "); 1298 if (index == 0) 1299 newWherePart = newWherePart.substring(index + 5, newWherePart 1300 .length()); 1301 } 1302 m_strWherePart = newWherePart; 1303 // 同时修改原始where 1304 m_strOriginWherePart = m_strWherePart; 1305 1306 resetSelectedData_WhenDataChanged(); 1307 1308 } 1309 1310 /** 1311 * 当Where 条件改变后,清空m_vecData,重新匹配已经设置的pks. 1312 */ 1313 private void resetSelectedData_WhenDataChanged() { 1314 1315 String[] selectedPKs = getPkValues(); 1316 // 清数据。 1317 clearModelData(); 1318 1319 if (selectedPKs != null && selectedPKs.length > 0) { 1320 matchPkData(selectedPKs); 1321 } 1322 1323 Vector selectedData = getSelectedData(); 1324 1325 setSelectedData(selectedData); 1326 // 通知UIRefPane,刷新界面 1327 fireChange(); 1328 } 1329 1330 /** 1331 * java.util.Vector 过滤非末级节点 1332 */ 1333 protected Vector filterNotLeafNode(Vector vec) { 1334 return vec; 1335 } 1336 1337 /** 1338 * 模糊字段名。 创建日期:(01-4-4 0:57:23) 1339 * 1340 * @return java.lang.String 1341 */ 1342 public String[] getBlurFields() { 1343 1344 if (m_strBlurFields == null || m_strBlurFields.length == 0) { 1345 1346 if (isOnlyMneFields()) { 1347 return m_strBlurFields = getMnecodes(); 1348 } else if (getFieldCode() != null) { 1349 ArrayList al = new ArrayList(); 1350 int len = getFieldCode().length; 1351 1352 al.add(getFieldCode()[0]); 1353 if (len >= 2) { 1354 al.add(getFieldCode()[1]); 1355 } 1356 1357 if (getMnecodes() != null) { 1358 for (int i = 0; i < getMnecodes().length; i++) { 1359 if (al.contains(getMnecodes()[i])) { 1360 continue; 1361 } 1362 al.add(getMnecodes()[i]); 1363 } 1364 } 1365 m_strBlurFields = new String[al.size()]; 1366 al.toArray(m_strBlurFields); 1367 1368 } 1369 1370 } 1371 1372 return m_strBlurFields; 1373 } 1374 1375 /** 1376 * 此处插入方法说明。 创建日期:(2001-11-9 8:54:00) 1377 * 1378 * @return java.lang.String 1379 */ 1380 public java.lang.String getDataSource() { 1381 return m_strDataSource; 1382 } 1383 1384 /** 1385 * 用于参照内容转换的影射表 如attrib1属性1-上海 2-南京3-北京 Hashtable conv=new Hashtable(); 1386 * Hashtable contents=new Hashtable(); contents.put("1","上海"); 1387 * contents.put("2","南京"); contents.put("3","北京"); 1388 * conv.put("attrib1",contents); return conv; 童志杰2002-08-30 1389 */ 1390 public java.util.Hashtable getDispConvertor() { 1391 if (getDdReaderVO() != null && m_htDispConvertor == null) { 1392 m_htDispConvertor = getDDReaderMap(getDdReaderVO().getTableName(), 1393 getDdReaderVO().getFieldNames()); 1394 } 1395 return m_htDispConvertor; 1396 } 1397 1398 /** 1399 * 此处插入方法说明。 创建日期:(2003-10-28 19:40:50) 1400 * 1401 * @return java.lang.String 1402 */ 1403 public java.lang.String getDynamicColClassName() { 1404 return m_dynamicColClassName; 1405 } 1406 1407 /** 1408 * 此处插入方法说明。 创建日期:(2003-10-30 8:34:51) 1409 * 1410 * @return java.lang.String[] 1411 */ 1412 public java.lang.String[] getDynamicFieldNames() { 1413 return m_strDynamicFieldNames; 1414 } 1415 1416 /** 1417 * 此处插入方法说明。 创建日期:(01-4-3 20:08:40) 1418 * 1419 * @return java.util.Hashtable 1420 * @param tableName 1421 * java.lang.String 1422 */ 1423 public Map getFieldCNName() { 1424 return modelHandler.getFieldCNName(); 1425 } 1426 1427 /** 1428 * 此处插入方法说明。 创建日期:(2003-4-10 18:42:56) 取过滤后的数据集. vecData 当前结果集 1429 */ 1430 public Vector getFilterPKsVector(Vector vecData, int filterStrategy) { 1431 Vector filterVector = null; 1432 int pkIndex = getFieldIndex(getPkFieldCode()); 1433 if (vecData != null) { 1434 // 没有过滤的PKs 1435 if (getFilterPks() == null) { 1436 return vecData; 1437 } 1438 filterVector = new Vector(); 1439 for (int i = 0; i < vecData.size(); i++) { 1440 Object vecpk = ((Vector) vecData.elementAt(i)) 1441 .elementAt(pkIndex); 1442 1443 switch (filterStrategy) { 1444 1445 case IFilterStrategy.INSECTION: { 1446 if (m_hmFilterPks.size() == 0) { 1447 return null; 1448 } 1449 if (m_hmFilterPks.get(vecpk.toString()) != null) { 1450 filterVector.add(vecData.elementAt(i)); 1451 } 1452 break; 1453 } 1454 1455 case IFilterStrategy.REFDATACOLLECT_MINUS_INSECTION: { 1456 if (m_hmFilterPks.size() == 0) { 1457 return vecData; 1458 } 1459 if (m_hmFilterPks.get(vecpk.toString()) == null) { 1460 filterVector.add(vecData.elementAt(i)); 1461 } 1462 break; 1463 } 1464 default: 1465 1466 } 1467 } 1468 } 1469 return filterVector; 1470 1471 } 1472 1473 /** 1474 * 此处插入方法说明。 创建日期:(2001-11-8 13:31:41) 1475 * 1476 * @return java.lang.String 1477 */ 1478 public java.lang.String getGroupPart() { 1479 return m_strGroupPart; 1480 } 1481 1482 /** 1483 * 不显示字段列表 1484 * 1485 * @return java.lang.String 1486 */ 1487 public java.lang.String[] getHiddenFieldCode() { 1488 return m_strHiddenFieldCode; 1489 } 1490 1491 /** 1492 * 此处插入方法说明。 创建日期:(2001-11-9 9:38:40) 1493 * 1494 * @return java.lang.String 1495 */ 1496 public java.lang.String getOriginWherePart() { 1497 return m_strOriginWherePart; 1498 } 1499 1500 /** 1501 * 此处插入方法说明。 创建日期:(2001-11-8 10:36:45) 1502 * 1503 * @return java.lang.String 1504 */ 1505 public java.lang.String getRefNodeName() { 1506 return m_strRefNodeName == null ? getClass().getName() 1507 : m_strRefNodeName; 1508 } 1509 1510 /** 1511 * 此处插入方法说明。 创建日期:(2001-8-29 10:08:50) 1512 * 1513 * @return int[] 1514 */ 1515 public int[] getShownColumns() { 1516 if ((m_iShownColumns == null || m_iShownColumns.length == 0) 1517 && getDefaultFieldCount() > 0) { 1518 m_iShownColumns = new int[getDefaultFieldCount()]; 1519 for (int i = 0; i < getDefaultFieldCount(); i++) { 1520 m_iShownColumns[i] = i; 1521 } 1522 } 1523 return m_iShownColumns; 1524 } 1525 1526 /** 1527 * 此处插入方法说明。 创建日期:(02-7-4 18:40:10) 1528 * 1529 * @return java.util.Vector 1530 */ 1531 // public java.util.Vector getUnMatchData() { 1532 // if (m_vecUnMatchData == null) 1533 // m_vecUnMatchData = new Vector(); 1534 // return m_vecUnMatchData; 1535 // } 1536 /** 1537 * 此处插入方法说明。 创建日期:(2003-10-28 19:54:29) 1538 * 1539 * @return java.lang.Object 1540 */ 1541 public java.lang.Object getUserParameter() { 1542 return m_userParameter; 1543 } 1544 1545 /** 1546 * 此处插入方法说明。 创建日期:(2003-10-28 19:38:34) 1547 * 1548 * @return boolean 1549 */ 1550 public boolean isDynamicCol() { 1551 return m_isDynamicCol; 1552 } 1553 1554 /** 1555 * 此处插入方法说明。 创建日期:(2003-2-21 16:27:33) 1556 * 1557 * @return boolean 1558 */ 1559 public boolean isMnecodeInput() { 1560 return m_mnecodeInput; 1561 } 1562 1563 /** 1564 * 此处插入方法说明。 创建日期:(2003-4-10 20:39:56) 1565 * 1566 * @return boolean 1567 */ 1568 public boolean isNotLeafSelectedEnabled() { 1569 return m_bNotLeafSelectedEnabled; 1570 } 1571 1572 /** 1573 * 是否允许使用数据权限 1574 * 1575 * @return boolean 1576 */ 1577 public boolean isUseDataPower() { 1578 return m_bUserDataPower; 1579 } 1580 1581 /** 1582 * 设置模糊字段。 创建日期:(2001-8-17 12:57:37) 1583 */ 1584 public void setBlurFields(String[] strBlurFields) { 1585 m_strBlurFields = strBlurFields; 1586 } 1587 1588 /** 1589 * 此处插入方法说明。 创建日期:(2001-11-9 8:54:00) 1590 * 1591 * @param newDataSource 1592 * java.lang.String 1593 */ 1594 public void setDataSource(java.lang.String newDataSource) { 1595 m_strDataSource = newDataSource; 1596 } 1597 1598 /** 1599 * 用于参照内容转换的影射表 如attrib1属性1-上海 2-南京3-北京 Hashtable conv=new Hashtable(); 1600 * Hashtable contents=new Hashtable(); contents.put("1","上海"); 1601 * contents.put("2","南京"); contents.put("3","北京"); 1602 * conv.put("attrib1",contents); return conv; 童志杰2002-08-30 1603 */ 1604 public void setDispConvertor(java.util.Hashtable newDispConvertor) { 1605 m_htDispConvertor = newDispConvertor; 1606 } 1607 1608 /** 1609 * 此处插入方法说明。 创建日期:(2003-10-28 19:40:50) 1610 * 1611 * @param newColClassName 1612 * java.lang.String 1613 */ 1614 public void setDynamicColClassName(java.lang.String newColClassName) { 1615 m_dynamicColClassName = newColClassName; 1616 } 1617 1618 /** 1619 * 此处插入方法说明。 创建日期:(2003-10-30 8:34:51) 1620 * 1621 * @param newDynamicFieldNames 1622 * java.lang.String[] 1623 */ 1624 public void setDynamicFieldNames(java.lang.String[] newDynamicFieldNames) { 1625 m_strDynamicFieldNames = newDynamicFieldNames; 1626 } 1627 1628 /** 1629 * 此处插入方法说明。 创建日期:(2003-4-10 18:32:43) 1630 * 1631 * @param newM_filterPks 1632 * java.lang.String[] 1633 * 1634 * 设置过滤的Pks 1635 */ 1636 public void setFilterPks(java.lang.String[] newM_filterPks) { 1637 setFilterPks(newM_filterPks, IFilterStrategy.INSECTION); 1638 } 1639 1640 /** 1641 * 此处插入方法说明。 创建日期:(2005-9-02 18:32:43) 1642 * 1643 * @param newM_filterPks 1644 * java.lang.String[] 1645 * 1646 * 1647 * 设置过滤的Pks 1648 */ 1649 public void setFilterPks(java.lang.String[] newM_filterPks, 1650 int filterStrategy) { 1651 m_filterPks = newM_filterPks; 1652 // 过滤策略 1653 m_filterStrategy = filterStrategy; 1654 m_hmFilterPks.clear(); 1655 if (m_filterPks != null && m_filterPks.length > 0) { 1656 1657 for (int i = 0; i < m_filterPks.length; i++) { 1658 m_hmFilterPks.put(m_filterPks[i], m_filterPks[i]); 1659 } 1660 } 1661 } 1662 1663 /** 1664 * 此处插入方法说明。 创建日期:(2001-11-8 13:31:41) 1665 * 1666 * @param newGroupPart 1667 * java.lang.String 1668 */ 1669 public void setGroupPart(java.lang.String newGroupPart) { 1670 m_strGroupPart = newGroupPart; 1671 } 1672 1673 /** 1674 * 此处插入方法说明。 创建日期:(01-6-25 10:53:54) 1675 * 1676 * @param newHiddenFieldCode 1677 * java.lang.String[] 1678 */ 1679 public void setHiddenFieldCode(java.lang.String[] newHiddenFieldCode) { 1680 getHtCodeIndex().clear(); 1681 hiddenFieldList.clear(); 1682 hiddenFieldList.addAll(Arrays.asList(newHiddenFieldCode)); 1683 m_strHiddenFieldCode = newHiddenFieldCode; 1684 } 1685 1686 /** 1687 * 此处插入方法说明。 创建日期:(01-6-17 18:35:14) 1688 * 1689 * @return java.util.Hashtable 1690 */ 1691 public void setHtCodeIndex(Hashtable ht) { 1692 m_htCodeIndex = ht; 1693 } 1694 1695 /** 1696 * 此处插入方法说明。 创建日期:(2003-10-28 19:38:34) 1697 * 1698 * @param newDynamicCol 1699 * boolean 1700 */ 1701 public void setIsDynamicCol(boolean newDynamicCol) { 1702 m_isDynamicCol = newDynamicCol; 1703 } 1704 1705 /** 1706 * 此处插入方法说明。 创建日期:(2003-2-21 16:27:33) 1707 * 1708 * @param newM_mnecodeInput 1709 * boolean 1710 */ 1711 public void setMnecodeInput(boolean newM_mnecodeInput) { 1712 m_mnecodeInput = newM_mnecodeInput; 1713 } 1714 1715 /** 1716 * 此处插入方法说明。 创建日期:(2003-4-10 20:39:56) 1717 * 1718 * @param newM_bNotLeafSelectedEnabled 1719 * boolean 1720 */ 1721 public void setNotLeafSelectedEnabled(boolean newM_bNotLeafSelectedEnabled) { 1722 m_bNotLeafSelectedEnabled = newM_bNotLeafSelectedEnabled; 1723 } 1724 1725 /** 1726 * 此处插入方法说明。 创建日期:(2001-11-8 10:36:45) 1727 * 1728 * @param newRefNodeName 1729 * java.lang.String 1730 */ 1731 public void setRefNodeName(java.lang.String newRefNodeName) { 1732 m_strRefNodeName = newRefNodeName; 1733 } 1734 1735 /** 1736 * v5 不建议使用 替换方式,请分步调用 1、setRefNodeName(refnodename); 2、setPk_corp(pk_corp); 1737 * 1738 * @deprecated 1739 */ 1740 public void setRefNodeName(java.lang.String newRefNodeName, String pk_corp) { 1741 m_strPk_corp = pk_corp; 1742 m_strRefNodeName = newRefNodeName; 1743 } 1744 1745 /** 1746 * 为了适配三种DefaultModel添加的方法,在DefaultModel里被覆盖 对于自定义model不能直接调用该方法,请覆盖它 1747 */ 1748 public void setRefTitle(java.lang.String newRefTitle) { 1749 m_strRefTitle = newRefTitle; 1750 } 1751 1752 /** 1753 * 此处插入方法说明。 创建日期:(2001-8-29 10:08:50) 1754 * 1755 * @return int[] 1756 */ 1757 public void setShownColumns(int[] iShownColumns) { 1758 m_iShownColumns = iShownColumns; 1759 return; 1760 } 1761 1762 /** 1763 * 为了适配三种DefaultModel添加的方法,在DefaultModel里被覆盖 对于自定义model不能直接调用该方法,请覆盖它 1764 */ 1765 public void setTableName(java.lang.String newTableName) { 1766 m_strTableName = newTableName; 1767 } 1768 1769 /** 1770 * 设置是否使用数据权限。 创建日期:(2001-8-23 21:03:06) 1771 */ 1772 public void setUseDataPower(boolean useDataPower) { 1773 m_bUserDataPower = useDataPower; 1774 } 1775 1776 /** 1777 * 此处插入方法说明。 创建日期:(2003-10-28 19:54:29) 1778 * 1779 * @param newParameter 1780 * java.lang.Object 1781 */ 1782 public void setUserParameter(java.lang.Object newParameter) { 1783 m_userParameter = newParameter; 1784 } 1785 1786 /** 1787 * 根据记录位置,列名称插入列值 1788 */ 1789 public void setValue(int recordIndex, String field, Object value) { 1790 Vector vecData = getSelectedData(); 1791 if (vecData == null || recordIndex >= vecData.size()) { 1792 return; 1793 } 1794 Vector vRecord = (Vector) vecData.get(recordIndex); 1795 int col = getFieldIndex(field); 1796 1797 // 1798 if (isDynamicCol()) { 1799 if (vRecord == null || vRecord.size() == 0 || col < 0) 1800 return; 1801 1802 if (value != null) { 1803 1804 if (col >= vRecord.size()) { 1805 vRecord.add(value); 1806 } else { 1807 vRecord.setElementAt(value, col); 1808 } 1809 return; 1810 1811 } 1812 } 1813 1814 if (vRecord == null || vRecord.size() == 0 || col < 0 1815 || col >= vRecord.size()) 1816 return; 1817 1818 if (value != null) { 1819 vRecord.setElementAt(value, col); 1820 1821 } 1822 1823 } 1824 1825 /** 1826 * 自定义参照,可以添加封存条件 1827 */ 1828 public void addSealedWherePart(String refNodeName, String sealedWherePart) { 1829 1830 DocSealWherePartMng.addSealedWherePart(refNodeName, sealedWherePart); 1831 } 1832 1833 /** 1834 * sxj 2004-5-26 新增 改变WherePart时是否清除数据 1835 */ 1836 public void addWherePart(String newWherePart, boolean isRrefreshData) { 1837 addWherePart(newWherePart); 1838 if (isRrefreshData) { 1839 clearModelData(); 1840 } 1841 1842 } 1843 1844 /** 1845 * 此处插入方法说明。 创建日期:(2004-6-1 10:21:59) 1846 * 1847 * @return java.lang.String 1848 */ 1849 public java.lang.String getFilterDlgClaseName() { 1850 return refFilterDlgClaseName; 1851 } 1852 1853 /** 1854 * 此处插入方法说明。 创建日期:(2004-9-23 9:03:51) 1855 * 1856 * @return java.lang.String 1857 */ 1858 public java.lang.String getMatchField() { 1859 if (m_matchField == null) { 1860 return getPkFieldCode(); 1861 } 1862 return m_matchField; 1863 } 1864 1865 /** 1866 * 此处插入方法说明。 创建日期:(2004-11-10 10:31:47) 1867 * 1868 * @return java.util.HashMap 1869 */ 1870 private java.util.HashMap getMatchHM() { 1871 return m_matchHM; 1872 } 1873 1874 /** 1875 * 此处插入方法说明。 创建日期:(2003-2-19 9:24:17) 1876 * 1877 * @return java.lang.String 1878 */ 1879 public java.lang.String[] getMnecodes() { 1880 return m_mnecodes; 1881 } 1882 1883 /** 1884 * 此处插入方法说明。 创建日期:(2004-4-16 10:31:17) 1885 * 1886 * @return java.lang.Object 1887 */ 1888 public java.lang.Object getPara() { 1889 return userPara; 1890 } 1891 1892 /** 1893 * 此处插入方法说明。 创建日期:(2003-11-14 15:42:52) 1894 * 1895 * @return java.lang.String 1896 */ 1897 public java.lang.String getQuerySql() { 1898 return querySql; 1899 } 1900 1901 /** 1902 * 此处插入方法说明。 创建日期:(2003-11-15 10:51:44) 1903 * 1904 * @return java.lang.String 1905 */ 1906 public java.lang.String getRefQueryDlgClaseName() { 1907 return refQueryDlgClaseName; 1908 } 1909 1910 /** 1911 * 此处插入方法说明。 创建日期:(2004-4-14 16:01:25) 1912 * 1913 * @return java.lang.String 1914 */ 1915 public java.lang.String getTempDataWherePart() { 1916 return refTempDataWherePart; 1917 } 1918 1919 /** 1920 * 此处插入方法说明。 创建日期:(2004-6-10 12:09:05) 1921 * 1922 * @return boolean 1923 */ 1924 public boolean isFromTempTable() { 1925 return isFromTempTable; 1926 } 1927 1928 /** 1929 * 此处插入方法说明。 创建日期:(2004-4-14 16:13:36) 1930 * 1931 * @return boolean 1932 */ 1933 public boolean isIncludeSub() { 1934 return isIncludeSub; 1935 } 1936 1937 /** 1938 * 此处插入方法说明。 创建日期:(2003-10-31 15:57:17) 1939 * 1940 * @return boolean 1941 */ 1942 public boolean isRefreshMatch() { 1943 return m_isRefreshMatch; 1944 } 1945 1946 /** 1947 * 此处插入方法说明。 创建日期:(2004-3-17 12:53:23) 1948 * 1949 * @return boolean 1950 */ 1951 public boolean isSealedDataShow() { 1952 return m_isSealedDataShow; 1953 } 1954 1955 /** 1956 * 获取匹配数据 匹配成功 数据->m_vecSelectedData 匹配不成功 null->m_vecSelectedData 1957 * 创建日期:(2001-8-23 18:39:24) 1958 * 1959 * @return java.util.Vector sxj 修改如果value= null or value.length()=0 1960 * 不做匹配,提高效率,防止重复reloadData() sxj 2004-11-11 add 1961 */ 1962 public Vector matchData(String field, String[] values) { 1963 return matchData(new String[] { field }, values); 1964 } 1965 1966 /** 1967 * 匹配主键数据--选择数据也改变了。 创建日期:(2001-8-23 18:39:24) 1968 * 1969 * @return java.util.Vector sxj 2004-06-08 如果是用Pk 进行匹配,则在最大集内进行匹配。 根据 1970 * getMatchField()提供的列进行匹配 1971 */ 1972 public Vector matchPkData(String[] strPkValues) { 1973 1974 if (strPkValues == null) { 1975 return null; 1976 } 1977 1978 Vector v = null; 1979 String matchsql = null; 1980 1981 matchsql = getMatchSql(strPkValues); 1982 1983 Vector matchVec = getMatchVectorFromLRU(strPkValues); 1984 1985 if (matchVec != null) { 1986 // setSelectedDataAndConvertData(matchVec); 1987 setSelectedData(matchVec); 1988 1989 return matchVec; 1990 } 1991 1992 try { 1993 if (isNonSqlMatch(matchsql)) { 1994 v = matchData(getMatchField(), strPkValues); 1995 1996 } else { 1997 1998 if (isFromTempTable()) { 1999 v = modelHandler.queryRefDataFromTemplateTable(matchsql); 2000 } else { 2001 v = modelHandler.matchPK(getDataSource(), matchsql); 2002 } 2003 } 2004 2005 } catch (Exception e) { 2006 Debug.error(e.getMessage(), e); 2007 } 2008 2009 // putLruMap(strPkValues, v); 2010 2011 setSelectedDataAndConvertData(v); 2012 2013 return getSelectedData(); 2014 } 2015 2016 public Vector getMatchVectorFromLRU(String[] strPkValues) { 2017 if (isCacheEnabled()) { 2018 LRUMap<String, Vector> lruMap = modelHandler.getLRUMap(); 2019 2020 String lruKey = getLRUKey(strPkValues); 2021 2022 Vector matchVec = lruMap.get(lruKey); 2023 return matchVec; 2024 } 2025 return null; 2026 } 2027 2028 private void putLruMap(Vector vecData) { 2029 if (isCacheEnabled()) { 2030 String[] pkValues = getPkValues(); 2031 if (pkValues == null) { 2032 return; 2033 } 2034 LRUMap<String, Vector> lruMap = modelHandler.getLRUMap(); 2035 String lruKey = getLRUKey(pkValues); 2036 lruMap.put(lruKey, vecData); 2037 } 2038 } 2039 2040 private String getLRUKey(String[] strPkValues) { 2041 StringBuffer sb = new StringBuffer(); 2042 String dsName = getDataSource(); 2043 if (dsName == null) { 2044 dsName = InvocationInfoProxy.getInstance().getUserDataSource(); 2045 } 2046 sb.append(dsName).append(getRefNodeName()).append( 2047 getMatchSql(strPkValues)); 2048 2049 if (strPkValues != null && strPkValues.length > 0) { 2050 for (int i = 0; i < strPkValues.length; i++) { 2051 sb.append(strPkValues[i]); 2052 } 2053 2054 } 2055 return sb.toString(); 2056 } 2057 2058 /** 2059 * 2060 */ 2061 public boolean isNonSqlMatch(String matchsql) { 2062 return modelHandler.isNonSqlMatch(matchsql); 2063 } 2064 2065 public String getMatchSql(String[] strPkValues) { 2066 setPKMatch(true); 2067 boolean originSealedDataShow = isSealedDataShow(); 2068 boolean originUseDataPower = isUseDataPower(); 2069 2070 if (!isRefEnable()) { 2071 // 如果参照不可编辑,不启用数据权限控制;包含封存数据 ---〉V5新需求 2072 setUseDataPower(false); 2073 setSealedDataShow(true); 2074 } 2075 2076 String matchsql; 2077 // pk匹配时,带distinct,防止关联表出现重复数据的问题。 2078 String strPatch = IRefConst.DISTINCT; 2079 String strWherePart = null; 2080 2081 String[] fieldCodes = getFieldCode(); 2082 2083 if (fieldCodes != null && fieldCodes.length > 0) { 2084 if (fieldCodes[0] != null 2085 && strPatch.indexOf(fieldCodes[0].toLowerCase()) >= 0) { 2086 strPatch = ""; 2087 } 2088 } 2089 if (isMatchPkWithWherePart()) { 2090 strWherePart = getWherePart(); 2091 } 2092 2093 if (isLargeDataRef() && canUseDB()) 2094 matchsql = getSpecialMatchSql(new String[] { getMatchField() }, 2095 strPkValues, strPatch, getFieldCode(), 2096 getHiddenFieldCode(), getTableName(), strWherePart, 2097 getOrderPart()); 2098 // 批处理Sql 2099 else 2100 matchsql = getSql_Match(new String[] { getMatchField() }, 2101 strPkValues, strPatch, getFieldCode(), 2102 getHiddenFieldCode(), getTableName(), strWherePart, 2103 getOrderPart());// 批处理Sql 2104 2105 setPKMatch(false); 2106 2107 setSealedDataShow(originSealedDataShow); 2108 setUseDataPower(originUseDataPower); 2109 2110 return matchsql; 2111 } 2112 2113 /** 2114 * 此处插入方法说明。 创建日期:(2004-6-1 10:21:59) 2115 * 2116 * @param newFilterDlgClaseName 2117 * java.lang.String 2118 */ 2119 public void setFilterDlgClaseName(java.lang.String newFilterDlgClaseName) { 2120 refFilterDlgClaseName = newFilterDlgClaseName; 2121 } 2122 2123 /** 2124 * 此处插入方法说明。 创建日期:(2004-6-10 12:09:05) 2125 * 2126 * @param newFromTempTable 2127 * boolean 2128 */ 2129 public void setFromTempTable(boolean newFromTempTable) { 2130 isFromTempTable = newFromTempTable; 2131 } 2132 2133 /** 2134 * 此处插入方法说明。 创建日期:(2004-4-14 16:13:36) 2135 * 2136 * @param newIncludeSub 2137 * boolean 2138 */ 2139 public void setIncludeSub(boolean newIncludeSub) { 2140 isIncludeSub = newIncludeSub; 2141 } 2142 2143 /** 2144 * 此处插入方法说明。 创建日期:(2003-10-31 15:57:17) 2145 * 2146 * @param newRefreshMatch 2147 * boolean 2148 */ 2149 public void setIsRefreshMatch(boolean newRefreshMatch) { 2150 m_isRefreshMatch = newRefreshMatch; 2151 } 2152 2153 /** 2154 * 此处插入方法说明。 创建日期:(2003-2-19 9:24:17) 2155 * 2156 * @param newM_mnecode 2157 * java.lang.String 2158 */ 2159 public void setMnecode(java.lang.String[] newM_mnecodes) { 2160 m_mnecodes = newM_mnecodes; 2161 } 2162 2163 /** 2164 * 此处插入方法说明。 创建日期:(2004-4-16 10:31:17) 2165 * 2166 * @param newPara 2167 * java.lang.Object 2168 */ 2169 public void setPara(java.lang.Object newPara) { 2170 userPara = newPara; 2171 } 2172 2173 /** 2174 * sxj 2004-5-26 新增 改变WherePart时是否清除数据 2175 */ 2176 public void setPara(java.lang.Object newPara, boolean isRrefreshData) { 2177 setPara(newPara); 2178 if (isRrefreshData) { 2179 clearModelData(); 2180 } 2181 } 2182 2183 /** 2184 * sxj 2004-5-26 新增 改变WherePart时是否清除数据 2185 */ 2186 public void setPk_corp(String strPk_corp, boolean isRrefreshData) { 2187 setPk_corp(strPk_corp); 2188 if (isRrefreshData) { 2189 clearModelData(); 2190 } 2191 } 2192 2193 /** 2194 * 只修改变量的值,不同步WherePart中的值。 2195 */ 2196 public void setPk_corpValue(String strPk_corp) { 2197 m_strPk_corp = strPk_corp; 2198 } 2199 2200 /** 2201 * 此处插入方法说明。 创建日期:(2003-11-14 15:42:52) 2202 * 2203 * @param newQuerySql 2204 * java.lang.String 2205 */ 2206 public void setQuerySql(java.lang.String newQuerySql) { 2207 querySql = newQuerySql; 2208 } 2209 2210 /** 2211 * 此处插入方法说明。 创建日期:(2003-11-15 10:51:44) 2212 * 2213 * @param newRefQueryDlgClaseName 2214 * java.lang.String 2215 */ 2216 public void setRefQueryDlgClaseName(java.lang.String newRefQueryDlgClaseName) { 2217 refQueryDlgClaseName = newRefQueryDlgClaseName; 2218 } 2219 2220 /** 2221 * 此处插入方法说明。 创建日期:(2004-3-17 12:53:23) 2222 * 2223 * @param newSealedDataShow 2224 * boolean 2225 */ 2226 public void setSealedDataShow(boolean newSealedDataShow) { 2227 m_isSealedDataShow = newSealedDataShow; 2228 } 2229 2230 /** 2231 * 此处插入方法说明。 创建日期:(2004-4-14 16:01:25) 2232 * 2233 * @param newTempDataWherePart 2234 * java.lang.String 2235 */ 2236 public void setTempDataWherePart(java.lang.String newTempDataWherePart) { 2237 refTempDataWherePart = newTempDataWherePart; 2238 } 2239 2240 /** 2241 * sxj 2004-5-26 新增 改变WherePart时是否清除数据 2242 */ 2243 public void setWherePart(String newWherePart, boolean isRrefreshData) { 2244 setWherePart(newWherePart); 2245 if (isRrefreshData) { 2246 clearModelData(); 2247 } 2248 } 2249 2250 /** 2251 * 此处插入方法描述。 创建日期:(2004-6-3 16:56:59) 2252 * 2253 * @author:毛士福 2254 * @return nc.ui.bd.ref.AbstractRefModel 2255 * @deprecated since v5.0 2256 */ 2257 public AbstractRefModel getM_defGridmodel() { 2258 return m_defGridmodel; 2259 } 2260 2261 /** 2262 * @return 返回 m_pk_org。 2263 */ 2264 public String getPk_GlOrgBook() { 2265 return m_pk_glOrgBook; 2266 } 2267 2268 /** 2269 * @return 返回 m_orgTypeCode。 2270 */ 2271 public String getOrgTypeCode() { 2272 return m_orgTypeCode; 2273 } 2274 2275 /** 2276 * 本方法不支持自定义参照,动态改变主体账簿后,WherePart的动态改变。 2277 * 2278 * @param orgTypeCode 2279 * 要设置的 m_orgTypeCode。 2280 * @param pk_org 2281 * 要设置的 m_pk_org。 多账簿、多会计主体设置接口 主要功能: 2282 * 提供给总账按主体账簿方式设置,其他业务组调用可能会产生问题。 2283 */ 2284 public void setPk_GlOrgBook(String orgTypeCode, String pk_GlOrgBook) { 2285 // 档案的真正类型 2286 String pk = pk_GlOrgBook; 2287 String type = orgTypeCode; 2288 BdinfoVO infoVO = getBdinfoVO(); 2289 if (infoVO != null) { 2290 pk = BDGLOrgBookAccessor.getAccuratePK(infoVO.getOrgtypecode(), 2291 orgTypeCode, pk_GlOrgBook); 2292 type = infoVO.getOrgtypecode(); 2293 } 2294 setOrgTypeCodeAndPK(type, pk); 2295 2296 // 重新设置条件. 2297 resetWherePart(); 2298 2299 } 2300 2301 /* 2302 * 设置档案类型等属性。 2303 */ 2304 public void setOrgTypeCodeAndPK(String orgTypeCode, String pk) { 2305 // 如果是公司类型 2306 if (OrgnizeTypeVO.COMPANY_TYPE.equals(orgTypeCode)) { 2307 setPk_corp(pk); 2308 m_orgTypeCode = null; 2309 m_pk_glOrgBook = null; 2310 2311 } else if (OrgnizeTypeVO.ZHUZHANG_TYPE.equals(orgTypeCode)) { 2312 m_orgTypeCode = orgTypeCode; 2313 m_pk_glOrgBook = pk; 2314 } 2315 2316 } 2317 2318 /** 2319 * @param newM_defGridmodel 2320 * nc.ui.bd.ref.AbstractRefModel 2321 * @deprecated since v5.0 2322 */ 2323 public void setM_defGridmodel(AbstractRefModel newM_defGridmodel) { 2324 m_defGridmodel = newM_defGridmodel; 2325 } 2326 2327 /* 2328 * 2329 */ 2330 public String getDataPowerSubSql(String strTableName, 2331 String strTableShowName) { 2332 String tableName = strTableName; 2333 if (strTableName != null) { 2334 tableName = strTableName.trim(); 2335 } 2336 String powerSql = modelHandler.getDataPowerSubSql(tableName, 2337 strTableShowName, this); 2338 return powerSql; 2339 } 2340 2341 protected String getDataPowerSqlKey(String strTableName, 2342 String strTableShowName) { 2343 String pk_org = null; 2344 if (getPk_GlOrgBook() != null) { 2345 pk_org = getPk_GlOrgBook(); 2346 } else { 2347 pk_org = getPk_corp(); 2348 } 2349 String tableName = strTableName; 2350 if (strTableName != null) { 2351 tableName = strTableName.trim(); 2352 } 2353 String dataPowerKey = tableName + "_" + strTableShowName + pk_org; 2354 return dataPowerKey; 2355 } 2356 2357 /** 2358 * @return 返回 m_fun_code。 2359 */ 2360 public String getFun_code() { 2361 return m_fun_code; 2362 } 2363 2364 /** 2365 * @param m_fun_code 2366 * 要设置的 m_fun_code。 2367 */ 2368 public void setFun_code(String m_fun_code) { 2369 2370 boolean isEqual = modelHandler.equals(this.m_fun_code, m_fun_code); 2371 2372 this.m_fun_code = m_fun_code; 2373 2374 // 同时要重新初始化参照的设置 2375 if (!isEqual) { 2376 setRefNodeName(getRefNodeName()); 2377 } 2378 } 2379 2380 /** 2381 * 为多语言添加此方法, 请覆盖此方法返回要翻译字段数组。 2382 */ 2383 protected RefVO_mlang[] getRefVO_mlang() { 2384 2385 return null; 2386 2387 } 2388 2389 /** 2390 * * 为多语言添加此方法, 并提供默认实现. 2391 * 2392 * vecData:参照中的数据(全集),请用参数传入的vecData,不要用getData()方法得到,否则会死循环。 2393 * vecData中的数据为每一行Record,每一个Record也是一个Vector. 2394 * 2395 * 返回值为Vector,它的数据为翻译后的Object[],注意放置Object[]的顺序一定和refVO_mlangs的顺序一致。 2396 * 2397 * 创建日期:(2005-3-30 16:19:24) 2398 * 2399 * @return Vector 2400 */ 2401 private Vector getValues_mlang(Vector vecData, RefVO_mlang[] refVO_mlangs) { 2402 // 要翻译的列 2403 2404 Vector datas = new Vector(); 2405 2406 if (vecData != null && vecData.size() > 0) { 2407 int recordAccout = vecData.size(); // 行记录数。 2408 if (refVO_mlangs != null) { 2409 for (int i = 0; i < refVO_mlangs.length; i++) { 2410 RefVO_mlang refVO_mlang = refVO_mlangs[i]; 2411 String resid = ""; 2412 String[] resIDFieldNames = refVO_mlangs[i] 2413 .getResIDFieldNames(); 2414 2415 Object[] oData_mlang = new Object[recordAccout]; 2416 2417 for (int j = 0; j < recordAccout; j++) { 2418 2419 Vector record = (Vector) vecData.get(j); // 行记录 2420 resid = ""; 2421 if (resIDFieldNames != null) { 2422 resid += refVO_mlang.getPreStr(); 2423 for (int k = 0; k < resIDFieldNames.length; k++) { 2424 Object oValue = record 2425 .get(getFieldIndex(resIDFieldNames[k])); 2426 if (oValue != null) { 2427 resid += oValue.toString(); 2428 } 2429 2430 } 2431 } 2432 2433 // 根据资源ID取翻译后的数据 2434 String str_multiLang = NCLangRes4VoTransl 2435 .getNCLangRes().getStrByID( 2436 refVO_mlang.getDirName(), resid); 2437 // 根据资源没有找到,返回原来的值. 2438 if (resid.equals(str_multiLang)) { 2439 str_multiLang = record.get( 2440 getFieldIndex(refVO_mlang.getFieldName())) 2441 .toString(); 2442 } 2443 oData_mlang[j] = str_multiLang; 2444 2445 } 2446 datas.add(oData_mlang); 2447 } 2448 2449 } 2450 } 2451 2452 return datas; 2453 2454 } 2455 2456 /** 2457 * 为多语言添加此方法, 设置翻译后的值到参照数据中. 设置特定列的值 创建日期:(2005-3-30 16:19:24) 2458 * 2459 */ 2460 private void setMlangValues(Vector vecData, RefVO_mlang[] refVO_mlangs) { 2461 2462 if (vecData == null || vecData.size() == 0 || refVO_mlangs == null) { 2463 return; 2464 } 2465 Vector vec_malng = getValues_mlang(vecData, refVO_mlangs); 2466 if (vec_malng == null || vec_malng.size() != refVO_mlangs.length) { 2467 return; 2468 } 2469 String[] fieldNames = new String[refVO_mlangs.length]; 2470 for (int i = 0; i < refVO_mlangs.length; i++) { 2471 fieldNames[i] = refVO_mlangs[i].getFieldName(); 2472 } 2473 setValuesByFieldName(vecData, vec_malng, fieldNames); 2474 2475 } 2476 2477 class DefFieldsHandler { 2478 2479 /** 2480 * 设有公式的参照,按公式取值。 创建日期:(2005-3-30 16:19:24) 2481 * 2482 */ 2483 void setDefFieldValues(Vector vecData) { 2484 2485 String[] defFields = getShowDefFields(); 2486 2487 if (vecData == null || vecData.size() == 0 || defFields == null 2488 || defFields.length == 0) { 2489 return; 2490 } 2491 Vector<Object[]> rawData = new Vector<Object[]>(); 2492 Vector convertedData = null; 2493 DefFieldInfo defFieldInfo = new DefFieldInfo(defFields); 2494 2495 for (int i = 0; i < defFields.length; i++) { 2496 rawData.add(getValues(defFields[i], vecData)); 2497 } 2498 try { 2499 convertedData = UFRefDefTanslateUtil.getDefValues(defFieldInfo, 2500 rawData, Integer.valueOf(getOrgTypeCode()).intValue(), 2501 getPk_corp()); 2502 } catch (Exception e) { 2503 Logger.error(e.getMessage(), e); 2504 } 2505 2506 if (convertedData == null) { 2507 return; 2508 } 2509 2510 setValuesByFieldName(vecData, convertedData, defFields); 2511 2512 } 2513 } 2514 2515 class FormulaHandler { 2516 2517 private FormulaParseFather parse = null; 2518 2519 /** 2520 * 设有公式的参照,按公式取值。 创建日期:(2005-3-30 16:19:24) 2521 * 2522 */ 2523 void setFormulaValues(Vector vecData, String[][] formulas) { 2524 2525 if (vecData == null || vecData.size() == 0 || formulas == null) { 2526 return; 2527 } 2528 String[][] showFormulas = getShowFieldFormulas(formulas); 2529 if (showFormulas == null) { 2530 return; 2531 } 2532 Object[][] datas = getValues_formulas(vecData, showFormulas); 2533 2534 if (datas == null || datas.length != showFormulas.length) { 2535 return; 2536 } 2537 Vector v = new Vector(); 2538 String[] fieldNames = new String[datas.length]; 2539 for (int i = 0; i < datas.length; i++) { 2540 v.add(datas[i]); 2541 fieldNames[i] = (String) showFormulas[i][0]; 2542 } 2543 setValuesByFieldName(vecData, v, fieldNames); 2544 2545 } 2546 2547 private String[][] getShowFieldFormulas(String[][] formulas) { 2548 List<String[]> list = new ArrayList<String[]>(); 2549 for (int i = 0; i < formulas.length; i++) { 2550 String formulaField = formulas[i][0]; 2551 if (isShowField(formulaField)) { 2552 list.add(formulas[i]); 2553 } 2554 } 2555 String[][] showFormulas = null; 2556 if (list.size() > 0) { 2557 showFormulas = new String[list.size()][]; 2558 list.toArray(showFormulas); 2559 } 2560 return showFormulas; 2561 } 2562 2563 private Object[][] getValues_formulas(Vector vecData, 2564 String[][] formulas) { 2565 // 要翻译的列 2566 2567 Object[][] datas = null; 2568 int flen = formulas.length; 2569 if (vecData != null && vecData.size() > 0 && flen > 0) { 2570 2571 int recordAccout = vecData.size(); // 行记录数。 2572 datas = new Object[flen][recordAccout]; 2573 ArrayList list = new ArrayList(); 2574 String formulaField = null; 2575 String strFormula = null; 2576 for (int i = 0; i < flen; i++) { 2577 list.clear(); 2578 formulaField = formulas[i][0]; 2579 strFormula = formulas[i][1]; 2580 2581 for (int j = 0; j < recordAccout; j++) { 2582 Vector record = (Vector) vecData.get(j); 2583 list.add(getFormulaValue(record, formulaField)); 2584 } 2585 datas[i] = getFormulaValues(formulaField, strFormula, list); 2586 } 2587 } 2588 2589 return datas; 2590 2591 } 2592 2593 /** 2594 * <p> 2595 * <strong>最后修改人:sxj</strong> 2596 * <p> 2597 * <strong>最后修改日期:2006-9-19</strong> 2598 * <p> 2599 * 2600 * @param 2601 * @return String 2602 * @exception BusinessException 2603 * @since NC5.0 2604 */ 2605 private String getFormulaValue(Vector record, String formulaField) { 2606 int fieldIndex = getFieldIndex(formulaField); 2607 if (fieldIndex == -1) { 2608 return null; 2609 } 2610 Object obj = record.get(fieldIndex); 2611 2612 String value = null; 2613 2614 if (obj instanceof RefValueVO && obj != null) { 2615 2616 Object originValue = ((RefValueVO) obj).getOriginValue(); 2617 2618 value = originValue == null ? null : originValue.toString(); 2619 2620 } else { 2621 if (obj != null) { 2622 value = obj.toString(); 2623 } 2624 } 2625 return value; 2626 } 2627 2628 private Object[] getFormulaValues(String fieldName, String formulas, 2629 List givenvalues) { 2630 FormulaParseFather parse = getParse(); 2631 // String express = formula; 2632 String[] expresses = StringUtil.toArray(formulas, ";"); 2633 parse.setExpressArray(expresses); 2634 parse.addVariable(fieldName, givenvalues); 2635 Object[][] values = parse.getValueOArray(); 2636 return values[values.length - 1]; 2637 } 2638 2639 /** 2640 * @return 返回 parse。 2641 */ 2642 private FormulaParseFather getParse() { 2643 if (parse == null) { 2644 parse = new nc.ui.pub.formulaparse.FormulaParse(); 2645 } 2646 return parse; 2647 } 2648 2649 } 2650 2651 /* 2652 * _ add by hetian 2005-04-11 ______________________________________ 2653 */ 2654 /** 2655 * 判断该参照是否是大数据表 2656 * 2657 * @return 2658 */ 2659 public boolean isLargeDataRef() { 2660 if (m_strRefNodeName == null || m_strRefNodeName.equals("")) 2661 return false; 2662 if (LARGE_NODE_NAME.indexOf(m_strRefNodeName) >= 0 2663 && isChangeTableSeq()) { 2664 return true; 2665 } 2666 return false; 2667 } 2668 2669 /** 2670 * 改变主表 2671 * 2672 * @param table 2673 * @return 2674 */ 2675 public String changeBaseTable(String table) { 2676 2677 if (table == null || table.indexOf("join") < 0) 2678 return table; 2679 StringTokenizer token = new StringTokenizer(table); 2680 String firstTable = ""; 2681 String secondTable = ""; 2682 String lastElement = ""; 2683 String joinStr = ""; 2684 String onStr = ""; 2685 boolean isJoin = false; 2686 boolean isOn = false; 2687 int index = 0; 2688 while (token.hasMoreTokens()) { 2689 String element = token.nextToken(); 2690 if (lastElement.equalsIgnoreCase("join")) { 2691 secondTable = element; 2692 isJoin = false; 2693 } 2694 if (element.equalsIgnoreCase("on")) { 2695 isOn = true; 2696 } 2697 if (isJoin) { 2698 joinStr += new StringBuffer().append(" ").append(element) 2699 .append(" ").toString(); 2700 } 2701 if (isOn) { 2702 onStr += new StringBuffer().append(" ").append(element).append( 2703 " ").toString(); 2704 } 2705 if (index == 0) { 2706 firstTable = new StringBuffer().append(element).append(" ") 2707 .toString(); 2708 isJoin = true; 2709 } 2710 2711 lastElement = element; 2712 index++; 2713 } 2714 2715 return secondTable + joinStr + firstTable + onStr; 2716 } 2717 2718 /** 2719 * 得到匹配语句 2720 * 2721 * @return 2722 */ 2723 public String getSpecialMatchSql(String[] fieldNames, String values[], 2724 String strPatch, String[] strFieldCode, String[] hiddenFields, 2725 String strTableName, String strWherePart, String strOrderField) { 2726 if (strTableName == null || strTableName.trim().length() == 0) 2727 return null; 2728 if (!isPKMatch()) { 2729 strTableName = changeBaseTable(strTableName); 2730 } 2731 if (strOrderField != null) { 2732 strOrderField = filterColumn(strOrderField); 2733 } 2734 return getSql_Match(fieldNames, values, strPatch, strFieldCode, 2735 hiddenFields, strTableName, strWherePart, strOrderField); 2736 2737 } 2738 2739 /** 2740 * 构造基本 SQL 2741 */ 2742 public String buildBaseSql(String patch, String[] columns, 2743 String[] hiddenColumns, String tableName, String whereCondition) { 2744 StringBuffer whereClause = new StringBuffer(); 2745 StringBuffer sql = new StringBuffer("select ").append(patch) 2746 .append(" "); 2747 int columnCount = columns == null ? 0 : columns.length; 2748 addQueryColumn(columnCount, sql, columns, hiddenColumns); 2749 // 加入FROM子句 2750 sql.append(" from ").append(tableName); 2751 // 加入WHERE子句 2752 if (whereCondition != null && whereCondition.trim().length() != 0) { 2753 whereClause.append(" where (").append(whereCondition).append(" )"); 2754 } else 2755 whereClause.append(" where 11=11 "); 2756 2757 appendAddWherePartCondition(whereClause); 2758 2759 addDataPowerCondition(getTableName(), whereClause); 2760 addSealCondition(whereClause); 2761 addEnvWherePart(whereClause); 2762 sql.append(" ").append(whereClause.toString()); 2763 2764 return sql.toString(); 2765 } 2766 2767 protected void addDataPowerCondition(String tableName, 2768 StringBuffer whereClause) { 2769 if (isUseDataPower()) { 2770 2771 String powerSql = getDataPowerSubSql(tableName, getDataPowerName()); 2772 2773 if (powerSql != null) 2774 2775 whereClause.append(" and (").append( 2776 getDataPowerResourceColumn()).append(" in (").append( 2777 powerSql).append("))"); 2778 2779 } 2780 2781 } 2782 2783 public String getDataPowerResourceColumn() { 2784 if (dataPowerResourceColumn == null) { 2785 return getPkFieldCode(); 2786 } 2787 return dataPowerResourceColumn; 2788 } 2789 2790 private void appendAddWherePartCondition(StringBuffer whereClause) { 2791 2792 if (getAddWherePart() == null) { 2793 return; 2794 } 2795 2796 if (isPKMatch() && !isMatchPkWithWherePart()) { 2797 2798 return; 2799 2800 } 2801 whereClause.append(" ").append(getAddWherePart()); 2802 2803 } 2804 2805 /** 2806 * 给数据权限重定向的机会,子类覆盖。 特殊情况下使用,例如会计科目多版本 2807 */ 2808 protected String getDataPowerName() { 2809 return getRefNodeName(); 2810 } 2811 2812 /** 2813 * 添加列条件 2814 * 2815 * @param iSelectFieldCount 2816 * @param strSql 2817 * @param strFieldCode 2818 * @param hiddenFields 2819 */ 2820 public void addQueryColumn(int iSelectFieldCount, StringBuffer strSql, 2821 String[] strFieldCode, String[] hiddenFields) { 2822 for (int i = 0; i < iSelectFieldCount; i++) { 2823 strSql.append(strFieldCode[i]); 2824 if (i < iSelectFieldCount - 1) 2825 strSql.append(","); 2826 } 2827 // 加入隐藏字段 2828 if (hiddenFields != null && hiddenFields.length > 0) { 2829 for (int k = 0; k < hiddenFields.length; k++) { 2830 if (hiddenFields[k] != null 2831 && hiddenFields[k].trim().length() > 0) { 2832 strSql.append(","); 2833 strSql.append(hiddenFields[k]); 2834 } 2835 } 2836 } 2837 } 2838 2839 /** 2840 * 添加封存条件 2841 * 2842 * @param whereClause 2843 */ 2844 public void addSealCondition(StringBuffer whereClause) { 2845 // 封存数据不显示,添加Where条件 2846 if (!isSealedDataShow()) { 2847 2848 String wherePart = getSealedWherePart(); 2849 if (wherePart != null) { 2850 whereClause.append(" and (").append(wherePart).append(") "); 2851 2852 } 2853 } 2854 } 2855 2856 /** 2857 * 查询参照封存条件。 2858 * 2859 * @param refNodeName 2860 * @return refNodeName对应参照的过滤封存数据的SQL where条件 2861 */ 2862 public String getSealedWherePart() { 2863 if (sealedWherePart != null) { 2864 return sealedWherePart; 2865 } 2866 2867 sealedWherePart = DocSealWherePartMng 2868 .getSealedWherePart(getRefNodeName()); 2869 if (sealedWherePart == null) { 2870 sealedWherePart = DocSealWherePartMng 2871 .getSealedWherePart(getTableName()); 2872 } 2873 2874 return sealedWherePart; 2875 } 2876 2877 /** 2878 * 设置封存条件 2879 * 2880 * @param sealedWherePart 2881 * 要设置的 sealedWherePart。 2882 */ 2883 public void setSealedWherePart(String sealedWherePart) { 2884 this.sealedWherePart = sealedWherePart; 2885 } 2886 2887 /** 2888 * 过滤表名 2889 * 2890 * @param column 2891 * @return 2892 */ 2893 public String filterColumn(String column) { 2894 return column.substring(column.indexOf(".") + 1, column.length()); 2895 } 2896 2897 /** 2898 * 构造SQL语句 2899 * 2900 * @author 张扬 贺扬修改 2901 */ 2902 protected String getSql(String strPatch, String[] strFieldCode, 2903 String[] hiddenFields, String strTableName, String strWherePart, 2904 String strGroupField, String strOrderField) { 2905 if (strTableName == null || strTableName.trim().length() == 0) { 2906 return null; 2907 } 2908 2909 String basSQL = buildBaseSql(strPatch, strFieldCode, hiddenFields, 2910 strTableName, strWherePart); 2911 StringBuffer sqlBuffer = new StringBuffer(basSQL); 2912 if (getQuerySql() != null) { 2913 addQueryCondition(sqlBuffer); 2914 } 2915 if (getBlurValue() != null && isIncludeBlurPart()) { 2916 String blurSql = addBlurWherePart(); 2917 sqlBuffer.append(blurSql); 2918 } 2919 2920 // 2921 // 加入Group子句 2922 if (strGroupField != null) { 2923 sqlBuffer.append(" group by ").append(strGroupField).toString(); 2924 } 2925 // 加入ORDER子句 2926 if (strOrderField != null && strOrderField.trim().length() != 0) { 2927 sqlBuffer.append(" order by ").append(strOrderField).toString(); 2928 } 2929 return sqlBuffer.toString(); 2930 } 2931 2932 protected void addQueryCondition(StringBuffer sqlBuffer) { 2933 sqlBuffer.append(" and (").append(getPkFieldCode()).append(" in (") 2934 .append(getQuerySql()).append("))").toString(); 2935 } 2936 2937 /** 2938 * @param sqlBuffer 2939 */ 2940 public String addBlurWherePart() { 2941 return modelHandler.addBlurWherePart(); 2942 } 2943 2944 /** 2945 */ 2946 protected String getSql_Match(String[] fieldNames, String[] values, 2947 String strPatch, String[] strFieldCode, String[] hiddenFields, 2948 String strTableName, String strWherePart, String strOrderField) { 2949 if (strTableName == null || strTableName.trim().length() == 0) 2950 return null; 2951 2952 String basSQL = null; 2953 2954 basSQL = buildBaseSql(strPatch, strFieldCode, hiddenFields, 2955 strTableName, strWherePart); 2956 2957 StringBuffer buffer = new StringBuffer(basSQL); 2958 2959 buffer.append(" and ("); 2960 if (isPKMatch()) { 2961 buffer.append(getWherePartByFieldsAndValues(fieldNames, values)); 2962 } else { 2963 String[] toLowCasefieldNames = new String[fieldNames.length]; 2964 String[] toLowCaseValues = new String[values.length]; 2965 for (int i = 0; i < toLowCasefieldNames.length; i++) { 2966 toLowCasefieldNames[i] = RefPubUtil.toLowerDBFunctionWrapper( 2967 this, fieldNames[i]); 2968 } 2969 for (int i = 0; i < toLowCaseValues.length; i++) { 2970 toLowCaseValues[i] = RefPubUtil.toLowerCaseStr(this, values[i]); 2971 } 2972 2973 buffer.append(getWherePartByFieldsAndValues(toLowCasefieldNames, 2974 toLowCaseValues)); 2975 } 2976 buffer.append(") "); 2977 // 加入ORDER子句 2978 if (strOrderField != null) { 2979 buffer.append(" order by ").append(strOrderField).toString(); 2980 } 2981 return buffer.toString(); 2982 } 2983 2984 /* 2985 * 2986 * 在java.util.Hashtable getDispConvertor()中初始化 2987 * 2988 */ 2989 public Hashtable getConvertHT(String tableName, String[] fieldNames) { 2990 // 只设置一个标识 2991 setDdReaderVO(tableName, fieldNames); 2992 // 读取值域 2993 return null; 2994 } 2995 2996 /** 2997 * <p> 2998 * <strong>最后修改人:sxj</strong> 2999 * <p> 3000 * <strong>最后修改日期:2006-7-20</strong> 3001 * <p> 3002 * 3003 * @param 3004 * @return Hashtable 3005 * @exception BusinessException 3006 * @since NC5.0 3007 */ 3008 private Hashtable getDDReaderMap(String tableName, String[] fieldNames) { 3009 DataDictionaryReader ddReader = new DataDictionaryReader(tableName); 3010 Hashtable convert = new Hashtable(); 3011 3012 for (int i = 0; i < fieldNames.length; i++) { 3013 // 如果列名已经包含表名,去掉表名.值域列没有表名 3014 String newfieldName = fieldNames[i]; 3015 if (newfieldName.indexOf(".") > 0) { 3016 newfieldName = newfieldName.substring( 3017 newfieldName.indexOf(".") + 1, newfieldName.length()); 3018 } 3019 String[] keys = ddReader.getQzsm(newfieldName); 3020 Hashtable contents = new Hashtable(); 3021 for (int j = 0; j < keys.length; j++) { 3022 if (keys[j] != null) { 3023 contents.put(ddReader 3024 .getNumberByQzsm(newfieldName, keys[j]).toString(), 3025 keys[j]); 3026 } 3027 } 3028 3029 convert.put(fieldNames[i], contents); 3030 } 3031 return convert; 3032 } 3033 3034 /** 3035 * @return 返回 isMatchPkWithWherePart。 3036 * 3037 */ 3038 public boolean isMatchPkWithWherePart() { 3039 return isMatchPkWithWherePart; 3040 } 3041 3042 /** 3043 * @param isMatchPkWithWherePart 3044 * 要设置的 isMatchPkWithWherePart。 3045 */ 3046 public void setMatchPkWithWherePart(boolean isMatchPkWithWherePart) { 3047 this.isMatchPkWithWherePart = isMatchPkWithWherePart; 3048 } 3049 3050 /** 3051 * @return 返回 m_isRefEnable。 3052 */ 3053 public boolean isRefEnable() { 3054 return m_isRefEnable; 3055 } 3056 3057 /** 3058 * 参照是否可编辑 规则: 1、如果参照可以编辑 在matchPK时,包含数据权限和不包含封存数据 2、如果参照不能编辑 3059 * 在matchPK时,不包含数据权限和包含封存数据 3060 * 3、对于规则1,如果isUseDataPower()=false,就不包含数据权限;如果isSealedDataShow=true,就包含封存数据 3061 */ 3062 public void setisRefEnable(boolean refEnable) { 3063 m_isRefEnable = refEnable; 3064 3065 } 3066 3067 /** 3068 * @return 返回 formulas。 3069 */ 3070 public String[][] getFormulas() { 3071 return formulas; 3072 } 3073 3074 /** 3075 * @param formulas 3076 * 要设置的 formulas。 3077 */ 3078 public void setFormulas(String[][] formulas) { 3079 this.formulas = formulas; 3080 } 3081 3082 /** 3083 * @return 返回 isLocQueryEnable。 3084 */ 3085 public boolean isLocQueryEnable() { 3086 return isLocQueryEnable; 3087 } 3088 3089 /** 3090 * @param isLocQueryEnable 3091 * 要设置的 isLocQueryEnable。 3092 */ 3093 public void setLocQueryEnable(boolean isLocQueryEnable) { 3094 this.isLocQueryEnable = isLocQueryEnable; 3095 } 3096 3097 /** 3098 * @return 返回 m_hmFilterPks。 3099 */ 3100 public HashMap getHmFilterPks() { 3101 return m_hmFilterPks; 3102 } 3103 3104 /** 3105 * @return 返回 m_filterStrategy。 3106 */ 3107 public int getFilterStrategy() { 3108 return m_filterStrategy; 3109 } 3110 3111 /** 3112 * @return 返回 m_filterPks。 3113 */ 3114 public String[] getFilterPks() { 3115 return m_filterPks; 3116 } 3117 3118 /** 3119 * 获取匹配数据 匹配成功 数据->m_vecSelectedData 匹配不成功 null->m_vecSelectedData 3120 * 创建日期:(2001-8-23 18:39:24) 3121 * 3122 * @return java.util.Vector sxj 修改如果value= null or value.length()=0 3123 * 不做匹配,提高效率,防止重复reloadData() sxj 2004-11-11 add 3124 */ 3125 public Vector matchData(String[] fields, String[] values) { 3126 3127 Vector vMatchData = getMatchedRecords(fields, values); 3128 3129 // 使用缓存,并且匹配不到数据,刷新数据再执行一次 3130 3131 if (isCacheEnabled() && vMatchData == null && isRefreshMatch()) { 3132 clearData(); 3133 vMatchData = getMatchedRecords(fields, values); 3134 } 3135 // boolean isDefConverted = true; 3136 // if (vMatchData == null || vMatchData.size() == 1) { 3137 // isDefConverted = false; 3138 // } 3139 // if (vMatchData != null) { 3140 // vMatchData = getConvertedData(false, vMatchData, isDefConverted); 3141 // } 3142 setSelectedData(vMatchData); 3143 3144 return vMatchData; 3145 } 3146 3147 /** 3148 * 此处插入方法说明。 创建日期:(2005-10-21 14:43:00) 3149 * 3150 * @param fieldNames 3151 * java.lang.String[] 3152 * @param values 3153 * java.lang.String 3154 */ 3155 protected Vector getMatchedRecords(String[] fieldNames, String[] values) { 3156 3157 Vector vMatchedRecords = null; 3158 // sxj 3159 if (values == null || values.length == 0) { 3160 return vMatchedRecords; 3161 } 3162 // 3163 if (fieldNames == null || fieldNames.length == 0) { 3164 3165 return vMatchedRecords; 3166 } 3167 // 要比较的值放到HashMap 3168 getMatchHM().clear(); 3169 for (int i = 0; i < values.length; i++) { 3170 if (values[i] != null) { 3171 getMatchHM().put(RefPubUtil.toLowerCaseStr(this, values[i]), 3172 RefPubUtil.toLowerCaseStr(this, values[i])); 3173 } 3174 } 3175 vMatchedRecords = new Vector(); 3176 // 在全集中匹配数据 3177 setIncludeBlurPart(false); 3178 // 重新载入数据 3179 Vector data = null; 3180 3181 data = getRefData(); 3182 3183 if (data != null) { 3184 for (int i = 0; i < data.size(); i++) { 3185 Vector vRecord = (Vector) data.elementAt(i); 3186 if (vRecord != null) 3187 3188 for (int j = 0; j < fieldNames.length; j++) { 3189 int col = getFieldIndex(fieldNames[j]); 3190 if (col < 0 || col >= vRecord.size()) { 3191 continue; 3192 } 3193 if (vRecord.elementAt(col) != null 3194 && getMatchHM().get( 3195 RefPubUtil.toLowerCaseStr(this, vRecord 3196 .elementAt(col).toString() 3197 .trim())) != null) { 3198 vMatchedRecords.addElement(vRecord); 3199 break; 3200 } 3201 } 3202 3203 } 3204 } 3205 3206 if (vMatchedRecords != null && vMatchedRecords.size() == 0) 3207 vMatchedRecords = null; 3208 setIncludeBlurPart(true); // 恢复原状态 3209 3210 return vMatchedRecords; 3211 } 3212 3213 /** 3214 * 此处插入方法说明。 创建日期:(2005-10-21 17:12:01) 3215 * 3216 * @return boolean 3217 */ 3218 public boolean isOnlyMneFields() { 3219 return isOnlyMneFields; 3220 } 3221 3222 /** 3223 * 此处插入方法说明。 创建日期:(2005-10-21 17:12:01) 3224 * 3225 * @param newIsOnlyMneFields 3226 * boolean 3227 */ 3228 public void setOnlyMneFields(boolean newIsOnlyMneFields) { 3229 isOnlyMneFields = newIsOnlyMneFields; 3230 } 3231 3232 /** 3233 * 此处插入方法说明。 创建日期:(2003-2-19 9:24:17) 3234 * 3235 * @return java.lang.String 3236 */ 3237 public java.lang.String getWherePartByFieldsAndValues(String[] fields, 3238 String[] values) { 3239 String wherePart = ""; 3240 StringBuffer sb = new StringBuffer(); 3241 if (fields != null && values != null) { 3242 int length = fields.length; 3243 for (int i = 0; i < length; i++) { 3244 if (values.length == 1) { 3245 // = 3246 sb.append(fields[i]).append("='").append(values[0]).append( 3247 "' "); 3248 3249 } else { 3250 // in 3251 3252 sb.append(RefPubUtil.getInSubSql(fields[i], values)); 3253 3254 } 3255 3256 if (i == length - 1) { 3257 continue; 3258 } 3259 sb.append(" or "); 3260 3261 } 3262 } else { 3263 return null; 3264 } 3265 3266 wherePart = sb.toString(); 3267 return wherePart; 3268 3269 } 3270 3271 /** 3272 * @return Returns the m_addWherePart. 3273 */ 3274 public String getAddWherePart() { 3275 return m_addWherePart; 3276 } 3277 3278 public void saveTempData(Object[] retPKs) { 3279 3280 // 保存Pk 到临时表 3281 3282 if (retPKs == null || retPKs.length == 0) { 3283 setTempDataWherePart(null); 3284 return; 3285 } 3286 3287 String pk_ts = null; 3288 3289 RefdatatempVO[] vos = new RefdatatempVO[retPKs.length]; 3290 for (int i = 0; i < retPKs.length; i++) { 3291 vos[i] = new RefdatatempVO(); 3292 vos[i].setPk_selecteddata(retPKs[i].toString()); 3293 vos[i].setPk_corp(getPk_corp()); 3294 vos[i].setCuserid(getPk_user()); 3295 vos[i].setRefnodename(getRefNodeName()); 3296 vos[i].setPk_ts("temp"); 3297 3298 } 3299 try { 3300 pk_ts = modelHandler.saveRefDataTempVOs(vos); 3301 3302 } catch (Exception e) { 3303 Debug.error(e.getMessage(), e); 3304 } 3305 3306 String selSql = "select pk_selecteddata from bd_refdatatemp "; 3307 // 设置临时表取树WherePart 3308 String wherePart = selSql + " where pk_corp='" + getPk_corp() 3309 + "' and cuserid = '" + getPk_user() + "' " 3310 + " and refnodename='" + getRefNodeName() + "' and pk_ts = '" 3311 + pk_ts + "'"; 3312 setTempDataWherePart(wherePart); 3313 3314 } 3315 3316 /** 3317 * 设有公式的参照,按公式取值。 创建日期:(2005-3-30 16:19:24) 3318 * 3319 */ 3320 public void setColDispValues(Vector vecData, Object[][] dispConverter) { 3321 3322 if (vecData == null || vecData.size() == 0 || dispConverter == null) { 3323 return; 3324 } 3325 3326 // 列显示转换器循环 3327 for (int i = 0; i < dispConverter.length; i++) { 3328 3329 // 列显示转化配置VO 3330 RefColumnDispConvertVO convertVO = (RefColumnDispConvertVO) dispConverter[i][0]; 3331 if (convertVO == null) { 3332 continue; 3333 } 3334 // 实现类名称 3335 String className = dispConverter[i][1].toString(); 3336 3337 // 给列显示转化配置VO设置数据主键值 3338 // convertVO.setPks(pks); 3339 convertVO.setRefData(vecData); 3340 // 处理列显示转换 3341 m_vecData = modelHandler.setColDispValue(vecData, convertVO, 3342 className); 3343 } 3344 } 3345 3346 /* 3347 * 3348 */ 3349 public ReftableVO getRefTableVO(String pk_corp) { 3350 3351 return modelHandler.getRefTableVO(pk_corp); 3352 } 3353 3354 /* 3355 * 栏目信息数据放到缓存. 3356 */ 3357 public void setReftableVO2Cache(ReftableVO vo, String pk_org) { 3358 3359 modelHandler.setReftableVO2Cache(vo, pk_org); 3360 } 3361 3362 public String getReftableVOCacheKey(String pk_org) { 3363 String refNodeName = getRefNodeName(); 3364 3365 // if (OrgnizeTypeVO.ZHUZHANG_TYPE.equals(getOrgTypeCode())){ 3366 // pk_org = getPk_GlOrgBook(); 3367 // }else{ 3368 // pk_org = getPk_corp(); 3369 // } 3370 // 目前还是按当前登录公司来保存栏目信息,以后有需求可以加入对主体账簿的支持 3371 3372 String key = refNodeName + pk_org; 3373 return key; 3374 } 3375 3376 /* 3377 * 查询参照数据以及参照栏目信息数据 1、栏目数据直接放入缓存. 2、参照数据返回 3378 */ 3379 public Vector getQueryResultVO() { 3380 boolean isQueryRefColumn = !modelHandler 3381 .isReftableVOCached(getPk_corp()); 3382 3383 RefQueryVO queryVO = getRefQueryVO(); 3384 3385 // 目前还是按当前登录公司来保存栏目信息,以后有需求可以加入对主体账簿的支持 3386 queryVO.setPk_org(getPk_corp()); 3387 RefQueryResultVO resultVO = null; 3388 3389 resultVO = modelHandler.queryRefdataByQueryVO(queryVO); 3390 3391 if (resultVO == null) { 3392 return null; 3393 } 3394 Vector v = resultVO.getRefData(); 3395 if (isQueryRefColumn) { 3396 setReftableVO2Cache(resultVO.getRefTableVO(), getPk_corp()); 3397 } 3398 3399 return v; 3400 } 3401 3402 protected RefQueryVO getRefQueryVO() { 3403 boolean isQueryRefColumn = !modelHandler 3404 .isReftableVOCached(getPk_corp()); 3405 3406 queryVO.setDataSourceName(getDataSource()); 3407 queryVO.setRefNodeName(getRefNodeName()); 3408 queryVO.setQuerySql(getRefSql()); 3409 queryVO.setObj(getPara()); 3410 queryVO.setQueryRefColumn(isQueryRefColumn); 3411 return queryVO; 3412 } 3413 3414 /** 3415 * 参照标题 创建日期:(01-4-4 0:57:23) 3416 * 3417 * @return java.lang.String 3418 */ 3419 public String getRefTitle() { 3420 if (m_strRefTitle != null) { 3421 return m_strRefTitle; 3422 } 3423 3424 m_strRefTitle = modelHandler.getRefNodeName_mLang(getRefNodeName()); 3425 3426 if (m_strRefTitle == null) { 3427 m_strRefTitle = getRefNodeName(); 3428 3429 } 3430 return m_strRefTitle; 3431 } 3432 3433 /** 3434 * @param m_pk_user 3435 * 要设置的 m_pk_user。 3436 */ 3437 public void setPk_user(String m_pk_user) { 3438 this.m_pk_user = m_pk_user; 3439 } 3440 3441 /* 3442 * 给名称字段赋值 3443 */ 3444 public void resetFieldName() { 3445 if (getFieldCode() != null && getTableName() != null 3446 && (getFieldName() == null || getFieldName().length == 0)) { 3447 3448 String[] name = new String[getFieldCode().length]; 3449 3450 for (int i = 0; i < getFieldCode().length; i++) { 3451 3452 String fieldCode = modelHandler 3453 .getFieldCodeWithTableName(getFieldCode()[i]); 3454 3455 String resid = modelHandler.getResID(fieldCode); 3456 3457 name[i] = modelHandler.getRefMultiLangStr(resid, fieldCode); 3458 3459 } 3460 setFieldName(name); 3461 } 3462 } 3463 3464 /** 3465 * @return 返回 formulaHandler。 3466 */ 3467 private FormulaHandler getFormulaHandler() { 3468 if (formulaHandler == null) { 3469 formulaHandler = new FormulaHandler(); 3470 } 3471 return formulaHandler; 3472 } 3473 3474 private DefFieldsHandler getDefFieldHandler() { 3475 if (defFieldHandler == null) { 3476 defFieldHandler = new DefFieldsHandler(); 3477 } 3478 return defFieldHandler; 3479 } 3480 3481 /** 3482 * 设置自定义数据到指定vecData中的field列。 创建日期:(2005-3-30 16:19:24) 3483 * 3484 * @return java.lang.Object[] 3485 */ 3486 private void setValuesByFieldName(Vector vecData, Vector newVecData, 3487 String[] fieldNames) { 3488 3489 int col = -1; 3490 for (int i = 0; i < fieldNames.length; i++) { 3491 3492 col = getFieldIndex(fieldNames[i]); 3493 Object[] values = (Object[]) newVecData.get(i); 3494 if (values == null) { 3495 continue; 3496 } 3497 for (int j = 0; j < values.length; j++) { 3498 Vector vRecord = (Vector) vecData.get(j); 3499 if (vRecord == null || vRecord.size() == 0 || col < 0 3500 || col >= vRecord.size()) { 3501 continue; 3502 } 3503 3504 Object obj = getRefValueVO(vRecord.elementAt(col), values[j]); 3505 3506 vRecord.setElementAt(obj, col); 3507 3508 } 3509 } 3510 } 3511 3512 /** 3513 * <p> 3514 * <strong>最后修改人:sxj</strong> 3515 * <p> 3516 * <strong>最后修改日期:2006-5-17</strong> 3517 * <p> 3518 * 3519 * @param 3520 * @return void 3521 * @exception BusinessException 3522 * @since NC5.0 3523 */ 3524 private RefValueVO getRefValueVO(Object originValue, Object newValue) { 3525 if (originValue instanceof RefValueVO) { 3526 return (RefValueVO) originValue; 3527 } 3528 RefValueVO valueVO = new RefValueVO(); 3529 valueVO.setOriginValue(originValue); 3530 valueVO.setNewValue(newValue); 3531 return valueVO; 3532 } 3533 3534 /** 3535 * @return 返回 m_pk_user。 3536 */ 3537 public String getPk_user() { 3538 if (m_pk_user == null) { 3539 m_pk_user = modelHandler.getPk_user(); 3540 } 3541 return m_pk_user; 3542 } 3543 3544 /** 3545 * 只添加不重复的监听类。 3546 * <p> 3547 * <strong>最后修改人:sxj</strong> 3548 * <p> 3549 * <strong>最后修改日期:2006-8-10</strong> 3550 * <p> 3551 * 3552 * @param 3553 * @return void 3554 * @exception BusinessException 3555 * @since NC5.0 3556 */ 3557 public void addChangeListener(ChangeListener l) { 3558 3559 if (eventListMap.get(l) == null) { 3560 eListenerList.add(ChangeListener.class, l); 3561 eventListMap.put(l, l); 3562 } 3563 } 3564 3565 public void removeChangeListener(ChangeListener l) { 3566 eListenerList.add(ChangeListener.class, l); 3567 eventListMap.remove(l); 3568 } 3569 3570 public ChangeListener[] getChangeListeners() { 3571 return (ChangeListener[]) eListenerList 3572 .getListeners(ChangeListener.class); 3573 } 3574 3575 public void fireChange() { 3576 Object[] listeners = eListenerList.getListenerList(); 3577 for (int i = listeners.length - 2; i >= 0; i -= 2) { 3578 if (listeners[i] == ChangeListener.class) { 3579 if (changeEvent == null) { 3580 changeEvent = new ChangeEvent(this); 3581 } 3582 ((ChangeListener) listeners[i + 1]).stateChanged(changeEvent); 3583 } 3584 } 3585 } 3586 3587 /** 3588 * 显示字段列表 创建日期:(01-4-4 0:57:23) 3589 * 3590 * @return java.lang.String 3591 */ 3592 public java.lang.String[] getFieldCode() { 3593 return m_strFieldCode; 3594 } 3595 3596 /** 3597 * 显示字段中文名 创建日期:(01-4-4 0:57:23) 3598 * 3599 * @return java.lang.String 3600 */ 3601 public java.lang.String[] getFieldName() { 3602 return m_strFieldName; 3603 } 3604 3605 /** 3606 * 此处插入方法说明。 创建日期:(2001-8-31 18:59:51) 3607 * 3608 * @return java.lang.String 3609 */ 3610 public String getGroupCode() { 3611 return IRefConst.GROUPCORP; 3612 } 3613 3614 /** 3615 * 主键字段名 3616 * 3617 * @return java.lang.String 3618 */ 3619 public String getPkFieldCode() { 3620 return m_strPkFieldCode; 3621 } 3622 3623 /** 3624 * 参照标题 创建日期:(01-4-4 0:57:23) 3625 * 3626 * @return java.lang.String 3627 */ 3628 3629 /** 3630 * 参照数据库表或者视图名 创建日期:(01-4-4 0:57:23) 3631 * 3632 * @return java.lang.String 3633 */ 3634 public String getTableName() { 3635 return m_strTableName; 3636 } 3637 3638 /** 3639 * 此处插入方法说明。 创建日期:(01-3-22 13:22:29) 3640 * 3641 * @param newFieldCode 3642 * java.lang.String[] 3643 */ 3644 public void setFieldCode(java.lang.String[] newFieldCode) { 3645 getHtCodeIndex().clear(); 3646 m_strFieldCode = newFieldCode; 3647 } 3648 3649 /** 3650 * 此处插入方法说明。 创建日期:(01-3-22 13:22:29) 3651 * 3652 * @param newFieldName 3653 * java.lang.String[] 3654 */ 3655 public void setFieldName(java.lang.String[] newFieldName) { 3656 m_strFieldName = newFieldName; 3657 } 3658 3659 /** 3660 * 主键字段名 3661 */ 3662 public void setPkFieldCode(String strPkFieldCode) { 3663 m_strPkFieldCode = strPkFieldCode; 3664 } 3665 3666 /** 3667 * @return 返回 m_fun_code_DocOpen。 3668 */ 3669 public String getFun_code_DocOpen() { 3670 return m_fun_code_DocOpen; 3671 } 3672 3673 /** 3674 * @param docOpen 3675 * 要设置的 m_fun_code_DocOpen。 3676 */ 3677 public void setFun_code_DocOpen(String docOpen) { 3678 m_fun_code_DocOpen = docOpen; 3679 } 3680 3681 /** 3682 * @return 返回 m_intFieldType。 3683 */ 3684 public int[] getIntFieldType() { 3685 return m_intFieldType; 3686 } 3687 3688 /** 3689 * @param fieldType 3690 * 要设置的 m_intFieldType。 3691 */ 3692 public void setIntFieldType(int[] fieldType) { 3693 m_intFieldType = fieldType; 3694 } 3695 3696 /** 3697 * @return 返回 isGroupAssignData。 3698 */ 3699 public boolean isGroupAssignData() { 3700 return isGroupAssignData; 3701 } 3702 3703 /** 3704 * @param isGroupAssignData 3705 * 要设置的 isGroupAssignData。 3706 */ 3707 public void setGroupAssignData(boolean isGroupAssignData) { 3708 this.isGroupAssignData = isGroupAssignData; 3709 } 3710 3711 public String getRefDataCacheKey() { 3712 String key = refDataCachekeyPreStr 3713 + getDataPowerSqlKey(getTableName(), getRefNodeName()); 3714 3715 return key; 3716 } 3717 3718 public String getFieldShowName(String fieldCode) { 3719 int index = getFieldIndex(fieldCode); 3720 if (index < 0 || index > getFieldName().length - 1) { 3721 return null; 3722 } else { 3723 return getFieldName()[index]; 3724 } 3725 } 3726 3727 /** 3728 * @return 返回 ddReaderVO。 3729 */ 3730 private DDReaderVO getDdReaderVO() { 3731 return ddReaderVO; 3732 } 3733 3734 /** 3735 * @param ddReaderVO 3736 * 要设置的 ddReaderVO。 3737 */ 3738 public void setDdReaderVO(String tableName, String[] fieldnames) { 3739 if (ddReaderVO == null) { 3740 ddReaderVO = new DDReaderVO(); 3741 } 3742 ddReaderVO.setTableName(tableName); 3743 ddReaderVO.setFieldNames(fieldnames); 3744 } 3745 3746 /** 3747 * @return 返回 resourceID。 3748 */ 3749 public int getResourceID() { 3750 return resourceID; 3751 } 3752 3753 /** 3754 * @param resourceID 3755 * 要设置的 resourceID。 3756 */ 3757 public void setResourceID(int resourceID) { 3758 this.resourceID = resourceID; 3759 } 3760 3761 /** 3762 * @return 返回 isPKMatch。 3763 */ 3764 public boolean isPKMatch() { 3765 return isPKMatch; 3766 } 3767 3768 /** 3769 * @param isPKMatch 3770 * 要设置的 isPKMatch。 3771 */ 3772 public void setPKMatch(boolean isPKMatch) { 3773 this.isPKMatch = isPKMatch; 3774 } 3775 3776 /** 3777 * @return 返回 isIncludeBlurPart。 3778 */ 3779 public boolean isIncludeBlurPart() { 3780 return isIncludeBlurPart; 3781 } 3782 3783 /** 3784 * @param isIncludeBlurPart 3785 * 要设置的 isIncludeBlurPart。 3786 */ 3787 public void setIncludeBlurPart(boolean isIncludeBlurPart) { 3788 this.isIncludeBlurPart = isIncludeBlurPart; 3789 } 3790 3791 /** 3792 * @return 返回 envWherePart。 3793 */ 3794 private String getEnvWherePart() { 3795 return envWherePart; 3796 } 3797 3798 /** 3799 * 设置条件时,要利用参照的环境变量的方法去拼条件,否则无法根据环境变量的变化而变化。 例如: 3800 * 3801 * @param envWherePart 3802 * 要设置的 envWherePart。 3803 */ 3804 public void setEnvWherePart(String envWherePart) { 3805 this.envWherePart = envWherePart; 3806 } 3807 3808 /** 3809 * 3810 */ 3811 private void addEnvWherePart(StringBuffer whereClause) { 3812 // setpk ,不包含此条件 3813 if (isPKMatch()) { 3814 return; 3815 } 3816 String wherePart = getEnvWherePart(); 3817 if (wherePart != null) { 3818 3819 whereClause.append(" and (").append(wherePart).append(") "); 3820 3821 } 3822 3823 } 3824 3825 /** 3826 * @return 返回 bdinfoVO。 3827 */ 3828 public BdinfoVO getBdinfoVO() { 3829 if (bdinfoVO == null && !isInitBDinfoVO) { 3830 bdinfoVO = modelHandler.getBdInfoVObyName(getRefNodeName()); 3831 isInitBDinfoVO = true; 3832 } 3833 return bdinfoVO; 3834 } 3835 3836 /** 3837 * @param bdinfoVO 3838 * 要设置的 bdinfoVO。 3839 */ 3840 public void setBdinfoVO(BdinfoVO bdinfoVO) { 3841 this.bdinfoVO = bdinfoVO; 3842 isInitBDinfoVO = true; 3843 } 3844 3845 /** 3846 * @return Returns the isChangeTableSeq. 3847 */ 3848 public boolean isChangeTableSeq() { 3849 return isChangeTableSeq; 3850 } 3851 3852 /** 3853 * @param isChangeTableSeq 3854 * The isChangeTableSeq to set. 3855 */ 3856 public void setChangeTableSeq(boolean isChangeTableSeq) { 3857 this.isChangeTableSeq = isChangeTableSeq; 3858 } 3859 3860 /** 3861 * @return 返回 isMaintainButtonEnabled。 3862 */ 3863 public boolean isMaintainButtonEnabled() { 3864 return isMaintainButtonEnabled; 3865 } 3866 3867 /** 3868 * @param isMaintainButtonEnabled 3869 * 要设置的 isMaintainButtonEnabled。 3870 */ 3871 public void setMaintainButtonEnabled(boolean isMaintainButtonEnabled) { 3872 this.isMaintainButtonEnabled = isMaintainButtonEnabled; 3873 } 3874 3875 /** 3876 * @param dataPowerPK_column 3877 * 要设置的 dataPowerPK_column。 3878 */ 3879 public void setDataPowerResourceColumn(String dataPowerResourceColumn) { 3880 this.dataPowerResourceColumn = dataPowerResourceColumn; 3881 } 3882 3883 /** 3884 * @return 返回 refCardInfoComponentImplClass。 3885 */ 3886 public String getRefCardInfoComponentImplClass() { 3887 return refCardInfoComponentImplClass; 3888 } 3889 3890 /** 3891 * @param refCardInfoComponentImplClass 3892 * 要设置的 refCardInfoComponentImplClass。 3893 */ 3894 public void setRefCardInfoComponentImplClass( 3895 String refCardInfoComponentImplClass) { 3896 this.refCardInfoComponentImplClass = refCardInfoComponentImplClass; 3897 } 3898 3899 public String getRefShowNameField() { 3900 return refShowNameField == null ? getRefNameField() : refShowNameField; 3901 } 3902 3903 public void setRefShowNameField(String refShowNameField) { 3904 this.refShowNameField = refShowNameField; 3905 } 3906 3907 // 初始化自定义项字段 3908 // defFields.length==0表示初始化过了。 3909 public String[] getDefFields() { 3910 return defFields; 3911 } 3912 3913 /** 3914 * 栏目显示的自定义项 3915 * 3916 * @return 3917 */ 3918 public String[] getShowDefFields() { 3919 String[] defFieldNames = null; 3920 if (getDefFields() == null || getDefFields().length == 0) { 3921 return defFieldNames; 3922 } 3923 3924 Map<String, RefcolumnVO> map = modelHandler.getRefColumnVOsMap(); 3925 3926 List<String> list = new ArrayList<String>(); 3927 for (int i = 0; i < getDefFields().length; i++) { 3928 if (map.get(getDefFields()[i]) != null 3929 && map.get(getDefFields()[i]).getIscolumnshow() 3930 .booleanValue()) { 3931 list.add(getDefFields()[i]); 3932 } 3933 } 3934 3935 if (list.size() > 0) { 3936 String[] fieldNames = new String[list.size()]; 3937 list.toArray(fieldNames); 3938 defFieldNames = fieldNames; 3939 } 3940 3941 return defFieldNames; 3942 } 3943 3944 public void setDefFields(String[] defFields) { 3945 this.defFields = defFields; 3946 } 3947 3948 public Map<String, Integer> getAlignMap() { 3949 return alignMap; 3950 } 3951 3952 private void setAlignMap(Map<String, Integer> alignMap) { 3953 this.alignMap = alignMap; 3954 } 3955 3956 /** 3957 * 栏目对齐方式 3958 * 3959 * @param fieldName 3960 * 栏目名称 要对齐的列(列名要和fieldCodes中的一致) 3961 * @param alignment 3962 * 对齐方式 常量见SwingConstants,例如 SwingConstants.RIGHT 3963 */ 3964 public void addFieldAlignment(String fieldName, int alignment) { 3965 if (getAlignMap() == null) { 3966 setAlignMap(new HashMap<String, Integer>()); 3967 } 3968 getAlignMap().put(fieldName, new Integer(alignment)); 3969 } 3970 3971 public boolean canUseDB() { 3972 return modelHandler.canUseDB(); 3973 } 3974 3975 public Vector getCacheValue(String sql) { 3976 return modelHandler.getCacheValue(sql); 3977 } 3978 3979 public Vector queryMain(String dsName, String sql) { 3980 return modelHandler.queryMain(dsName, sql); 3981 } 3982 3983 public void removeCacheValue(String sql) { 3984 modelHandler.removeCache(sql); 3985 } 3986 3987 public void setCacheValue(String sql, Vector value) { 3988 modelHandler.setCacheValue(sql, value); 3989 } 3990 3991 public String getCodeRuleFromPara(String orgTypeCode, String pk_GlOrgBook, 3992 String codingRule, UFBoolean boolean1) { 3993 return modelHandler.getCodeRuleFromPara(orgTypeCode, pk_GlOrgBook, 3994 codingRule, boolean1); 3995 } 3996 3997 public String getCodeRuleFromPara(String codingRule) { 3998 return modelHandler.getCodeRuleFromPara(codingRule); 3999 } 4000 4001 public String getNumberCodingRule(String codingRule) { 4002 return modelHandler.getNumberCodingRule(codingRule); 4003 } 4004 4005 public String[] getDefFields(String[] fieldCode) { 4006 return modelHandler.getDefFields(fieldCode); 4007 } 4008 4009 public String getPara1() { 4010 return para1; 4011 } 4012 4013 public void setPara1(String para1) { 4014 this.para1 = para1; 4015 } 4016 4017 public String getPara2() { 4018 return para2; 4019 } 4020 4021 public void setPara2(String para2) { 4022 this.para2 = para2; 4023 } 4024 4025 public String getPara3() { 4026 return para3; 4027 } 4028 4029 public void setPara3(String para3) { 4030 this.para3 = para3; 4031 } 4032 4033 protected IRefModelHandler getModelHandler() { 4034 return modelHandler; 4035 } 4036 4037 public String getUiControlComponentClassName() { 4038 return uiControlComponentClassName; 4039 } 4040 4041 public void setUiControlComponentClassName( 4042 String uiControlComponentClassName) { 4043 this.uiControlComponentClassName = uiControlComponentClassName; 4044 } 4045 4046 /** 4047 * 界面控制组件变化时调用该方法,在子类实现具体业务逻辑。 4048 * 4049 * @param eventData 4050 * 暂时返回发生变化的组件名称 4051 */ 4052 public void UiControlClassValueChanged(UIControlClassEvent event) { 4053 4054 } 4055 4056 public String getRefDocEditClassName() { 4057 return refDocEditClassName; 4058 } 4059 4060 public void setRefDocEditClassName(String refDocEditClassName) { 4061 this.refDocEditClassName = refDocEditClassName; 4062 } 4063 4064 public boolean isShowField(String fieldName) { 4065 boolean isShowField = false; 4066 int[] showColumns = getShownColumns(); 4067 int index = getFieldIndex(fieldName); 4068 for (int i = 0; i < showColumns.length; i++) { 4069 if (showColumns[i] == index) { 4070 isShowField = true; 4071 break; 4072 } 4073 } 4074 return isShowField; 4075 } 4076 4077 public String[] getShowFields() { 4078 String[] showFields = new String[getShownColumns().length]; 4079 int fieldCodeLength = getFieldCode().length; 4080 for (int i = 0; i < showFields.length; i++) { 4081 int index = getShownColumns()[i]; 4082 if (index < fieldCodeLength) { 4083 showFields[i] = getFieldCode()[index]; 4084 } else { 4085 Logger.debug("参照栏目信息有误,请点击参照栏目中的重置按钮。该参照为:" + getRefNodeName()); 4086 } 4087 } 4088 return showFields; 4089 } 4090 4091 public boolean isHiddenField(String fieldCode) { 4092 4093 return hiddenFieldList.contains(fieldCode); 4094 } 4095 4096 // 输入时是否大小写敏感 4097 public boolean isCaseSensitve() { 4098 return isCaseSensitve; 4099 } 4100 4101 public void setCaseSensive(boolean isCaseSensitve) { 4102 this.isCaseSensitve = isCaseSensitve; 4103 } 4104 4105 public Vector getAllColumnNames() { 4106 4107 if (vecAllColumnNames != null) { 4108 return vecAllColumnNames; 4109 } 4110 4111 vecAllColumnNames = new Vector(); 4112 if (getFieldCode() != null && getFieldCode().length > 0) { 4113 if (getFieldName() == null || getFieldName().length == 0) { 4114 for (int i = 0; i < getFieldCode().length; i++) { 4115 vecAllColumnNames.addElement(getFieldCode()[i]); 4116 } 4117 } else { 4118 if (getFieldName().length >= getFieldCode().length) { 4119 for (int i = 0; i < getFieldCode().length; i++) { 4120 vecAllColumnNames.addElement(getFieldName()[i]); 4121 } 4122 } else { 4123 for (int i = 0; i < getFieldName().length; i++) { 4124 vecAllColumnNames.addElement(getFieldName()[i]); 4125 } 4126 for (int i = getFieldName().length; i < getFieldCode().length; i++) { 4127 vecAllColumnNames.addElement(getFieldCode()[i]); 4128 } 4129 } 4130 } 4131 4132 } 4133 4134 if (getHiddenFieldCode() != null) 4135 for (int i = 0; i < getHiddenFieldCode().length; i++) { 4136 vecAllColumnNames.addElement(getHiddenFieldCode()[i]); 4137 } 4138 4139 // 加入动态列 4140 if (isDynamicCol()) { 4141 4142 String[] dynamicColNames = getDynamicFieldNames(); 4143 if (getDynamicFieldNames() != null) { 4144 4145 for (int i = 0; i < dynamicColNames.length; i++) { 4146 4147 // 加入到显示的列名中 4148 vecAllColumnNames.addElement(dynamicColNames[i]); 4149 } 4150 } 4151 } 4152 return vecAllColumnNames; 4153 } 4154 4155 protected String getRefCacheSqlKey() { 4156 4157 return getRefSql() == null ? getClass().getName() : getRefSql(); 4158 } 4159 }