Fork me on GitHub

NC表型参照类

   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 }

 

posted @ 2016-01-01 22:44  ZZZZW  阅读(932)  评论(0编辑  收藏  举报
AmazingCounters.com