zoukankan      html  css  js  c++  java
  • 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 }
    ---- 动动手指关注我!或许下次你又能在我这里找到你需要的答案!ZZZZW与你一起学习,一起进步!
  • 相关阅读:
    spring注解
    SVN cleanup 反复失败解决办法
    如何改变cmd窗口大小
    JQuery UI
    VS2013装扩展RazorGenerator
    visual studio 2013使用github获取代码
    还原NuGet程序包
    C# linq对分组操作执行子查询
    C# linq创建嵌套组
    linq 在查询表达式中处理异常
  • 原文地址:https://www.cnblogs.com/zzzzw/p/5093911.html
Copyright © 2011-2022 走看看