package nc.ui.bd.ref;

 /**
* 表参照-其他参照基类。 创建日期:(2001-8-23 20:26:54) 模型里未处理栏目
*
* @author:张扬
*
*/ import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.Vector; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList; import nc.bs.framework.common.InvocationInfoProxy;
import nc.bs.framework.common.RuntimeEnv;
import nc.bs.logging.Logger;
import nc.jdbc.framework.misc.LRUMap;
import nc.ui.bd.BDGLOrgBookAccessor;
import nc.ui.bd.mmpub.DataDictionaryReader;
import nc.ui.uap.bd.def.DefFieldInfo;
import nc.ui.uap.bd.def.UFRefDefTanslateUtil;
import nc.vo.bd.access.BdinfoVO;
import nc.vo.bd.ref.DocSealWherePartMng;
import nc.vo.bd.ref.IFilterStrategy;
import nc.vo.bd.ref.RefColumnDispConvertVO;
import nc.vo.bd.ref.RefQueryResultVO;
import nc.vo.bd.ref.RefQueryVO;
import nc.vo.bd.ref.RefVO_mlang;
import nc.vo.bd.ref.RefcolumnVO;
import nc.vo.bd.ref.ReftableVO;
import nc.vo.bd.refdatatemp.RefdatatempVO;
import nc.vo.jcom.lang.StringUtil;
import nc.vo.logging.Debug;
import nc.vo.ml.NCLangRes4VoTransl;
import nc.vo.pub.BusinessException;
import nc.vo.pub.formulaset.FormulaParseFather;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.sm.nodepower.OrgnizeTypeVO; public abstract class AbstractRefModel implements IRefModel { private String para1 = null; private String para2 = null; private String para3 = null; protected IRefModelHandler modelHandler; private ArrayList hiddenFieldList = new ArrayList(); // V55需求,是否大小写敏感
private boolean isCaseSensitve = false; //
private Vector vecAllColumnNames = null; private RefQueryVO queryVO = new RefQueryVO(); /**
* AbstractRefModel 构造子注解。
*/
public AbstractRefModel() {
super();
try {
Class c;
// 加载服务器类。
if (RuntimeEnv.getInstance().isRunningInServer())
c = Class.forName("nc.ui.bd.ref.impl.RefModelHandlerForServer");
// 加载客户端类
else {
// Server server = (Server)
// NCLocator.getInstance().lookup(Server.class.getName());
// Container container = server.getContainer("uap");
// if(container == null)
// throw new ServletException("无法找到模块uap");
// ClassLoader cl = container.getClassLoader();
c = Class.forName("nc.ui.bd.ref.RefModelHandlerForClient");
} Constructor cs = c
.getConstructor(new Class[] { AbstractRefModel.class });
modelHandler = (IRefModelHandler) cs.newInstance(this);
} catch (Exception e) {
Logger.error(e);
}
} private String[] m_strFieldCode = null; // 业务表的字段名 private String[] m_strFieldName = null; // 业务表的字段中文名 // 业务表字段类型
private int[] m_intFieldType = null; private String m_strPkFieldCode = null; private String m_strTableName = null; // 业务表名 private java.lang.String m_strBlurValue = null; private String m_strRefTitle = null; protected Vector m_vecData = null; private int m_iDefaultFieldCount = 2; private String m_strOrderPart = null; protected java.lang.String m_strPk_corp = null; protected String m_strRefCodeField = null; protected String m_strRefNameField = null; protected Vector m_vecSelectedData = null; private String m_strStrPatch = ""; private String m_strWherePart = null; private boolean m_bCacheEnabled = true; private Hashtable m_htCodeIndex = null; private String m_orgTypeCode = OrgnizeTypeVO.COMPANY_TYPE; // 当前参照所在界面的功能节点号
private String m_fun_code = null; // 参照增加按钮打开节点的功能节点编码
private String m_fun_code_DocOpen = null; // 主体账簿主键
private String m_pk_glOrgBook = null; // 增加从临时表取数的方式 2004-06-10
private boolean isFromTempTable = false; // 是否包含模糊匹配Sql
private boolean isIncludeBlurPart = true; // sxj 返回值是否包含下级节点
private boolean isIncludeSub = false; private boolean isPKMatch = false; // 树表和树型参照可以带一个表型参照,用来匹配助记码等。
private AbstractRefModel m_defGridmodel = null; // sxj 2003-10-31
// 匹配数据时,如果匹配不上,是否刷新数据再匹配一次
private boolean m_isRefreshMatch = true; // sxj 2004-03-17
// 是否显示封存数据
private boolean m_isSealedDataShow = false; // 增加用户可以自定义setPk匹配的列。 2004-09-23
private String m_matchField = null; // 数据匹配
private HashMap m_matchHM = new HashMap(); // 支持助记码2003-02-19
// 支持助记码组 2004-01-12
private String[] m_mnecodes = null; // sxj 2003-11-14
private String querySql = null; // 高级过滤类名
private String refFilterDlgClaseName = null; private String refQueryDlgClaseName = null; // sxj
private Object userPara = null; protected static final String LARGE_NODE_NAME = "客商基本档案:客商档案:客户档案:供应商档案:客商辅助核算:客户辅助核算:供应商辅助核算:客商档案包含冻结:客户档案包含冻结:供应商档案包含冻结:存货基本档案:存货档案:存货辅助核算:物料档案"; // 参照setpk匹配数据时,是否包含参照WherePart的开关
private boolean isMatchPkWithWherePart = false; // 参照的编辑状态,该状态和界面的可编辑性一致
private boolean m_isRefEnable = true; // 参照对公式解析的支持
// 格式举例 formula[0][0] ="字段";formula[0][1]="公式内容"
private String[][] formulas = null; // 树表参照查询是否启用(不是高级查询)
boolean isLocQueryEnable = true; // 是否允许选择非末级
private boolean m_bNotLeafSelectedEnabled = true; // isUseDataPower 2002-09-09
private boolean m_bUserDataPower = true; // 动态列接口名字
private String m_dynamicColClassName = null; // sxj 2003-04-10
// 提供按给定的Pks进行过滤 private int m_filterStrategy = IFilterStrategy.INSECTION; private HashMap m_hmFilterPks = new HashMap(); private String[] m_filterPks = null; // htDispConvert2002-08-30
private Hashtable m_htDispConvertor = null; // sxj 2003-10-28 动态列启用开关
private boolean m_isDynamicCol = false; private int[] m_iShownColumns = null; // 支持助记码多条记录的匹配2003-02-21
private boolean m_mnecodeInput = false; private String[] m_strBlurFields = null; private java.lang.String m_strDataSource = null; // 动态列名称
private String[] m_strDynamicFieldNames = null; private java.lang.String m_strGroupPart = null; private String[] m_strHiddenFieldCode = null; private java.lang.String m_strOriginWherePart; // 新增参照ID(这里是名称)
protected String m_strRefNodeName = null; // 用户调用动态列接口时,要使用到的参数。
private Object m_userParameter = null; //
// private Vector m_vecUnMatchData = null; private String refTempDataWherePart = null; // 模糊匹配时,默认把code+助记码列(数组)作为匹配的列。该参数决定是否只用助记码列来匹配
private boolean isOnlyMneFields = false; // 增补的wherePart
private String m_addWherePart = null; // 处理特殊列显示转换
private Object[][] m_columnDispConverter = null; // 用户
private String m_pk_user = null; FormulaHandler formulaHandler = null; DefFieldsHandler defFieldHandler = null; private EventListenerList eListenerList = new EventListenerList(); private Map eventListMap = new HashMap(); private transient ChangeEvent changeEvent = null; // 是否只显示集团数据
private boolean isGroupAssignData = false; // 参照数据缓存Key前缀字符串
private String refDataCachekeyPreStr = "REFDATACACHE"; private DDReaderVO ddReaderVO = null; // 对于自定义参照数据权限的支持.数据权限优先按资源ID查询。
private int resourceID = -1; private String sealedWherePart = null; // 该条件会根据环境变量变化,同时在setpk时不带此条件
private String envWherePart = null; private BdinfoVO bdinfoVO = null; // 是否已初始化BDInfoVO
private boolean isInitBDinfoVO = false; // 是否要改变关联表的顺序(为缓存)
private boolean isChangeTableSeq = true; // 维护按钮是否可用
private boolean isMaintainButtonEnabled = true; // 数据权限资源字段
private String dataPowerResourceColumn = null; // 记录详细信息显示组件
private String refCardInfoComponentImplClass = null; // 参照显示字段
private String refShowNameField = null; // 自定义项字段,必须是表名.字段名
private String[] defFields = null; // 对齐方式Map
private Map<String, Integer> alignMap = null; // 界面控制自定义组件名称,该实现类必须继承JComponent,且包含AbstractRefMOdel的构造子
private String uiControlComponentClassName = null; // 参照维护接口类,since v5.5 支持自定义档案维护界面
private String refDocEditClassName = null; private class DDReaderVO {
String tableName = null; String[] fieldNames = null; /**
* @return 返回 fieldNames。
*/
public String[] getFieldNames() {
return fieldNames;
} /**
* @param fieldNames
* 要设置的 fieldNames。
*/
public void setFieldNames(String[] fieldNames) {
this.fieldNames = fieldNames;
} /**
* @return 返回 tableName。
*/
public String getTableName() {
return tableName;
} /**
* @param tableName
* 要设置的 tableName。
*/
public void setTableName(String tableName) {
this.tableName = tableName;
}
} /**
* @return 返回 m_columnDispConverterClass。
*/
public Object[][] getColumnDispConverter() {
return m_columnDispConverter;
} /**
* @param dispConverterClass
* 要设置的 m_columnDispConverterClass。
*/
public void setColumnDispConverter(Object[][] dispConverter) {
m_columnDispConverter = dispConverter;
} /**
* 增加where子句 创建日期:(2001-8-16 12:42:02)
*
* @param newWherePart
* java.lang.String
*/
public void addWherePart(String newWherePart) {
// 从原始Where增加
// m_strWherePart = getOriginWherePart();
// if (m_strWherePart == null || m_strWherePart.trim().length() == 0) {
// m_strWherePart = " ( 11 = 11 )";
// }
// if (newWherePart != null && newWherePart.trim().length() > 0) {
// m_strWherePart = "( " + m_strWherePart + " )";
// m_strWherePart += " " + newWherePart + " ";
// } // setAddWherePart(newWherePart); m_addWherePart = newWherePart; // clearData();
resetSelectedData_WhenDataChanged();
} /**
* 创建日期:(2004-9-23 9:03:51)
*
* @param newM_matchField
* java.lang.String 自定义的列。用SetPk方法设的值在该列中匹配。 不建议使用。
*/
public void setMatchField(java.lang.String newM_matchField) {
m_matchField = newM_matchField;
} /**
* 此处插入方法说明。
*
* /** 清除数据及缓存。 创建日期:(2001-8-23 21:01:00)
*/
public void clearData() { clearModelData();
clearCacheData(); } /**
* 删除参照缓存数据
*/
public void clearCacheData() {
modelHandler.clearCacheData();
} protected void clearModelData() {
m_vecData = null;
setSelectedData(null); } protected void clearDataPowerCache() {
modelHandler.clearDataPowerCache();
} /**
* 将一行数据转化为VO,如不使用VO可以虚实现。 创建日期:(2001-8-13 16:34:11)
*
* @return nc.vo.pub.ValueObject
* @param vData
* java.util.Vector
*/
public nc.vo.pub.ValueObject convertToVO(java.util.Vector vData) {
return null;
} /**
* 将多行数据转化为VO数组。 创建日期:(2001-8-13 16:34:11)
*
* @return nc.vo.pub.ValueObject[]
* @param vData
* java.util.Vector
*/
public nc.vo.pub.ValueObject[] convertToVOs(java.util.Vector vData) {
if (vData == null || vData.size() == 0)
return null;
nc.vo.pub.ValueObject[] vos = new nc.vo.pub.ValueObject[vData.size()];
for (int i = 0; i < vData.size(); i++) {
Vector vRecord = (Vector) vData.elementAt(i);
vos[i] = convertToVO(vRecord);
}
return vos;
} /**
* 模糊字段值。 创建日期:(2001-8-17 11:17:42)
*
* @return java.lang.String
*/
public String getBlurValue() {
return m_strBlurValue;
} /**
* 获取缓存或数据库表中的参照数据--二维Vector。
* <p>
* <strong>最后修改人:sxj</strong>
* <p>
* <strong>最后修改日期:2006-7-12</strong>
* <p>
*
* @param
* @return Vector
* @exception BusinessException
* @since NC5.0
*/
public final Vector getRefData() {
return modelHandler.getRefData();
} /**
* 获取参照数据--二维Vector。 自定义参照可以覆盖
*
* @return java.util.Vector
*/ public java.util.Vector getData() { String sql = getRefSql(); Vector v = null;
if (isCacheEnabled()) {
/** 从缓存读数据 */
v = modelHandler.getFromCache(getRefDataCacheKey(),
getRefCacheSqlKey());
} if (v == null) { // 从数据库读--也可以在此定制数据 try { if (isFromTempTable()) {
v = modelHandler.queryRefDataFromTemplateTable(sql);
} else {
// 同时读取参照栏目数据
v = getQueryResultVO();
} } catch (Exception e) {
Debug.debug(e.getMessage(), e);
} } putToCache(v); m_vecData = v;
return m_vecData;
} public void putToCache(Vector v) {
if (v != null && isCacheEnabled()) {
/** 加入到缓存中 */
modelHandler.putToCache(getRefDataCacheKey(), getRefCacheSqlKey(),
v);
}
} public Vector getConvertedData1(boolean isDataFromCache, Vector v,
boolean isDefConverted) {
return getConvertedData(isDataFromCache, v, isDefConverted);
} /**
* <p>
* <strong>最后修改人:sxj</strong>
* <p>
* <strong>最后修改日期:2006-7-12</strong>
* <p>
*
* @param
* @return void
* @exception BusinessException
* @since NC5.0
*/
protected Vector getConvertedData(boolean isDataFromCache, Vector v,
boolean isDefConverted) {
if (v == null) {
return v;
}
Vector vecData = v; // 与总账协商的结果,按传入Pks过滤
if (vecData != null && vecData.size() > 0) {
vecData = getFilterPKsVector(vecData, getFilterStrategy()); }
// 多语言处理
// 缓存中的数据已经处理过了.
if (!isDataFromCache) {
setMlangValues(vecData, getRefVO_mlang());
if (getFormulas() != null) {
getFormulaHandler().setFormulaValues(vecData, getFormulas());
}
// 统计型自定义项pk-->name
if (isDefConverted) {
getDefFieldHandler().setDefFieldValues(vecData);
} }
// 特殊处理结束
// try to convert
handleDispConvertor(vecData);
// end converts
// 处理特殊显示列。
if (getColumnDispConverter() != null) {
setColDispValues(vecData, getColumnDispConverter());
}
return vecData;
} /**
* 枚举类型显示值的转换
* <p>
* <strong>最后修改人:sxj</strong>
* <p>
* <strong>最后修改日期:2006-3-9</strong>
* <p>
*
* @param
* @return void
* @exception
* @since NC5.0
*/
private void handleDispConvertor(Vector v) {
if (getDispConvertor() != null) {
Hashtable convert = getDispConvertor();
Enumeration e = convert.keys();
while (e.hasMoreElements()) {
String convertColumn = (String) e.nextElement();
Hashtable conv = (Hashtable) convert.get(convertColumn);
Integer Idx = (Integer) getHtCodeIndex().get(convertColumn);
if (Idx == null || Idx.intValue() < 0)
continue;
int idx = Idx.intValue();
if (v != null) {
int rows = v.size();
for (int i = 0; i < rows; i++) {
Vector vRow = (Vector) v.elementAt(i);
if (vRow != null) {
Object oldValue = vRow.elementAt(idx);
if (oldValue == null)
continue;
Object newValue = conv.get(oldValue.toString());
if (newValue != null) {
vRow.setElementAt(newValue, idx);
// 如果需求,可以转换为原值,目前先保持翻译后的值
// Object obj =
// getRefValueVO(vRow.elementAt(idx),
// newValue);
// vRow.setElementAt(obj, idx);
}
}
}
}
}
}
} /**
* 默认显示字段中的显示字段数----表示显示前几个字段
*/
public int getDefaultFieldCount() {
return m_iDefaultFieldCount;
} /**
* 得到一个字段在所有字段中的下标。 创建日期:(2001-8-16 15:39:23)
*
* @return int
* @param fieldList
* java.lang.String[]
* @param field
* java.lang.String
*/
public int getFieldIndex(String field) { if (field == null || field.trim().length() == 0
|| getHtCodeIndex() == null || getHtCodeIndex().size() == 0)
return -1;
Object o = getHtCodeIndex().get(field.trim());
if (o == null) {
// 加入动态列
int index = m_htCodeIndex.size();
if (isDynamicCol() && getDynamicFieldNames() != null) {
for (int i = 0; i < getDynamicFieldNames().length; i++) {
m_htCodeIndex.put(getDynamicFieldNames()[i].trim(),
new Integer(index + i));
}
}
o = getHtCodeIndex().get(field.trim());
} return (o == null) ? -1 : ((Integer) o).intValue();
} /**
* 此处插入方法说明。 创建日期:(01-6-17 18:35:14)
*
* @return java.util.Hashtable
*/
public Hashtable getHtCodeIndex() {
if (m_htCodeIndex == null || m_htCodeIndex.size() == 0) {
m_htCodeIndex = new Hashtable();
if (getFieldCode() != null)
for (int i = 0; i < getFieldCode().length; i++) {
m_htCodeIndex.put(getFieldCode()[i].trim(), new Integer(i));
} if (getHiddenFieldCode() != null) {
int index = 0;
if (getFieldCode() != null) {
index = getFieldCode().length;
}
for (int i = 0; i < getHiddenFieldCode().length; i++) {
if (getHiddenFieldCode()[i] != null) {
m_htCodeIndex.put(getHiddenFieldCode()[i].trim(),
new Integer(index + i));
} else {
System.out
.println("Waring: The RefModel has some errors.");
}
}
} }
return m_htCodeIndex;
} /**
* Order子句。
*
* @return java.lang.String
*/
public String getOrderPart() {
if (m_strOrderPart == null && getFieldCode() != null
&& getFieldCode().length > 0)
m_strOrderPart = getFieldCode()[0];
return m_strOrderPart;
} /**
* 得到公司主键--默认参照使用。 创建日期:(2001-8-17 11:17:03)
*
* @return java.lang.String
*/
public String getPk_corp() {
if (m_strPk_corp == null) {
m_strPk_corp = modelHandler.getPk_corp();
}
return m_strPk_corp;
} /**
* 返回值--主键字段
*
* @return java.lang.String
*/
public String getPkValue() {
String strValue = null;
Object objValue = getValue(getPkFieldCode());
if (objValue != null) {
strValue = objValue.toString();
} return strValue;
} /**
* 返回值数组--主键字段
*
* @return java.lang.String
*/
public java.lang.String[] getPkValues() { Object[] oDatas = getValues(getPkFieldCode());
String[] sDatas = objs2Strs(oDatas);
return sDatas;
} /**
* 参照编码字段。 创建日期:(2001-8-13 16:19:24)
*
* @return java.lang.String
*/
public String getRefCodeField() {
if (m_strRefCodeField == null && getFieldCode() != null
&& getFieldCode().length > 0)
m_strRefCodeField = getFieldCode()[0];
return m_strRefCodeField;
} /**
* 返回值--编码字段 创建日期:(2001-8-13 16:19:24)
*
* @return java.lang.String
*/
public String getRefCodeValue() { String strValue = null;
String[] strValues = getRefCodeValues();
if (strValues != null && strValues.length > 0) {
strValue = strValues[0];
}
return strValue;
} /**
* 返回值数组--编码字段 创建日期:(2001-8-13 16:19:24)
*
* @return java.lang.String[]
*/
public java.lang.String[] getRefCodeValues() {
Object[] oDatas = getValues(getRefCodeField());
String[] sDatas = objs2Strs(oDatas);
return sDatas;
} protected String[] objs2Strs(Object[] oDatas) {
if (oDatas == null)
return null;
String[] sDatas = new String[oDatas.length];
for (int i = 0; i < oDatas.length; i++) {
if (oDatas[i] == null)
sDatas[i] = null;
else
sDatas[i] = oDatas[i].toString().trim();
}
return sDatas;
} /**
* 参照名称字段。 创建日期:(2001-8-13 16:19:24)
*
* @return java.lang.String
*/
public String getRefNameField() {
if (m_strRefNameField == null && getFieldCode() != null
&& getFieldCode().length > 1)
m_strRefNameField = getFieldCode()[1];
return m_strRefNameField;
} /**
* 返回值-名称字段 创建日期:(2001-8-13 16:19:24)
*
* @return java.lang.String
*/
public java.lang.String getRefNameValue() { String strValue = null;
String[] strValues = getRefNameValues();
if (strValues != null && strValues.length > 0) {
strValue = strValues[0];
}
return strValue;
} /**
* 返回值-名称字段 创建日期:(2001-8-13 16:19:24)
*
* @return java.lang.String[]
*/
public java.lang.String[] getRefNameValues() {
// 名称列,取翻译后的值
Object[] oDatas = getValues(getRefNameField(), getSelectedData(), false); String[] sDatas = objs2Strs(oDatas); return sDatas;
} public java.lang.String[] getRefShowNameValues() {
// 名称列,取翻译后的值
Object[] oDatas = getValues(getRefShowNameField(), getSelectedData(),
false); return objs2Strs(oDatas);
} /**
* 此处插入方法说明。 创建日期:(2001-8-15 17:30:17)
*
* @return java.lang.String
*/
public String getRefSql() { return getSql(getStrPatch(), getFieldCode(), getHiddenFieldCode(),
getTableName(), getWherePart(), getGroupPart(), getOrderPart()); } /**
* 返回选择数据--二维数组。 创建日期:(2001-8-23 19:10:29)
*
* @return java.util.Vector
*/
public java.util.Vector getSelectedData() {
return m_vecSelectedData;
} /**
* DISTINCT子句
*
* @return java.lang.String
*/
public String getStrPatch() {
return m_strStrPatch;
} /**
* 返回值-根据参数字段 创建日期:(2001-8-13 16:19:24)
*
* @return java.lang.Object
*/
public Object getValue(String field) {
Object[] values = getValues(field); Object value = null; if (values != null && values.length > 0) {
value = values[0];
} return value;
} /**
* 返回值数组-根据参数字段 创建日期:(2001-8-13 16:19:24)
*
* @return java.lang.Object[]
*/
public java.lang.Object[] getValues(String field) { return getValues(field, true);
} /**
* 取参照选中记录给定列的值
*
* <p>
* <strong>最后修改人:sxj</strong>
* <p>
* <strong>最后修改日期:2006-11-16</strong>
* <p>
*
* @param field
* 列
* @param 是否是原值。列可能已被翻译(例如定义了公式,定义了多语翻译,定义了枚举类型的对应值)
*
* @return java.lang.Object[]
* @exception BusinessException
* @since NC5.0
*/
public java.lang.Object[] getValues(String field, boolean isOriginValue) { return getValues(field, getSelectedData(), isOriginValue);
} /**
*
*/
public java.lang.Object[] getValues(String field, Vector datas) { return getValues(field, datas, true);
} protected java.lang.Object[] getValues(String field, Vector datas,
boolean isOriginValue) {
int col = getFieldIndex(field);
if (datas == null || datas.size() == 0)
return null;
if (col < 0) {
throw new RuntimeException("参照中没有该属性");
}
Vector vRecord = null;
Object[] oData = new Object[datas.size()];
for (int i = 0; i < datas.size(); i++) {
vRecord = (Vector) datas.elementAt(i);
if (vRecord == null || vRecord.size() == 0 || col >= vRecord.size())
oData[i] = null;
else {
oData[i] = getValueOfRefvalueVO(vRecord.elementAt(col),
isOriginValue);
}
}
return oData;
} private Object getValueOfRefvalueVO(Object obj, boolean isOriginValue) {
Object value = obj;
if (obj instanceof RefValueVO && isOriginValue) {
value = ((RefValueVO) obj).getOriginValue();
}
/**
* V55 数据库中查出的原始类型为BigDecimal,为NC处理简便,参照对外统一转换为UFDouble
*
*/ value = RefPubUtil.bigDecimal2UFDouble(value); return value; } /**
* 获取已经读出的参照数据--二维Vector。 创建日期:(2001-8-23 18:39:24)
*
* @return java.util.Vector
*/
public java.util.Vector getVecData() {
return m_vecData;
} /**
* 此处插入方法说明。 创建日期:(2001-8-25 12:06:11)
*
* @return nc.vo.pub.ValueObject
*/
public nc.vo.pub.ValueObject getVO() {
if (getSelectedData() != null && getSelectedData().size() > 0)
return convertToVO(((Vector) getSelectedData().elementAt(0)));
else
return null;
} /**
* 此处插入方法说明。 创建日期:(2001-8-25 12:06:11)
*
* @return nc.vo.pub.ValueObject
*/
public nc.vo.pub.ValueObject[] getVOs() {
return convertToVOs(getSelectedData());
} /**
* getWherePart 方法注解。
*/
public String getWherePart() {
return m_strWherePart;
} /**
* 此处插入方法说明。 创建日期:(2001-8-23 21:03:06)
*
* @return boolean
*/
public boolean isCacheEnabled() {
return m_bCacheEnabled;
} /**
* 匹配界面输入数据--选择数据也改变了。 创建日期:(2001-8-23 18:39:24)
*
* @return java.util.Vector
*/
public Vector matchBlurData(String strBlurValue) {
Vector v = null;
if (strBlurValue != null && strBlurValue.trim().length() > 0) {
v = matchData(getBlurFields(), new String[] { strBlurValue });
// 如果是模糊查询的结果或者是编码等多条匹配,处理叶子节点是否可以选中
// 用于树形参照通过模糊匹配变成表型,过滤掉非叶子节点 if (!isNotLeafSelectedEnabled()
&& (!isNull(strBlurValue) || isMnecodeInput())) { v = filterNotLeafNode(v);
} }
// 清空已选择数据
setSelectedData(v);
return v; } private boolean isNull(String str) {
return str == null || str.trim().length() == 0;
} /**
* 获取匹配数据 匹配成功 数据->m_vecSelectedData 匹配不成功 null->m_vecSelectedData
* 创建日期:(2001-8-23 18:39:24)
*
* @return java.util.Vector sxj 修改如果value= null or value.length()=0
* 不做匹配,提高效率,防止重复reloadData()
*/
public Vector matchData(String field, String value) {
return matchData(new String[] { field }, new String[] { value });
} /**
* 匹配主键数据--选择数据也改变了。 创建日期:(2001-8-23 18:39:24)
*
* @return java.util.Vector sxj 2004-06-08 如果是用Pk 进行匹配,则在最大集内进行匹配。 根据
* getMatchField()提供的列进行匹配
*/
public Vector matchPkData(String strPkValue) { if (strPkValue == null || strPkValue.trim().length() == 0) {
setSelectedData(null);
return null; }
return matchPkData(new String[] { strPkValue });
} /**
* 重新载入数据。 1.使用缓存手动调用如刷新按钮。 创建日期:(2001-8-23 21:14:19)
*
* @return java.util.Vector
*/
public java.util.Vector reloadData() { reloadData1(); return getRefData();
} // 重载数据前的处理
public void reloadData1() {
// 刷新前已选择的数据
String[] selectedPKs = getPkValues(); clearData();
// 清数据权限缓存
clearDataPowerCache(); modelHandler.getLRUMap().clear(); // 刷新后重新匹配数据。
if (selectedPKs != null && selectedPKs.length > 0) {
matchPkData(selectedPKs);
}
modelHandler.fireDBCache();
} /**
* 设置模糊值。 创建日期:(2001-8-17 12:57:37)
*/
public void setBlurValue(String strBlurValue) {
m_strBlurValue = strBlurValue;
} /**
* 此处插入方法说明。 创建日期:(2001-8-23 21:03:06)
*/
public void setCacheEnabled(boolean cacheEnabled) {
m_bCacheEnabled = cacheEnabled;
} /**
* 此处插入方法说明。 创建日期:(2001-8-24 10:32:33)
*
* @param vData
* java.util.Vector
*/
public void setData(Vector vData) {
m_vecData = vData;
// 默认参照支持自定义数据
if (isCacheEnabled()) {
String sql = getRefSql();
modelHandler.putToCache(getRefDataCacheKey(), sql, vData);
}
} /**
* 默认显示字段中的显示字段数----表示显示前几个字段
*/
public void setDefaultFieldCount(int iDefaultFieldCount) {
m_iDefaultFieldCount = iDefaultFieldCount;
} /**
* Order子句。
*/
public void setOrderPart(String strOrderPart) {
m_strOrderPart = strOrderPart;
} /**
* 设置公司主键--默认参照使用。 自定义参照不支持动态改变环境变量动态改变WherePart
*
* @return java.lang.String
*/
public void setPk_corp(String strPk_corp) {
if (strPk_corp == null) {
return;
}
// 切换公司,主体账簿主键也会改变(对于会计科目参照等主体账簿)
m_pk_glOrgBook = null;
// 自定义参照,用字符串替换算法来动态改变Wherepart,对于系统默认参照
setPk_corpForDefRef(strPk_corp, m_strPk_corp);
m_strPk_corp = strPk_corp;
// 系统默认参照
// 重置WherePart,也可能有其他信息也要改变,
resetWherePart();
} /**
* <p>
* <strong>最后修改人:sxj</strong>
* <p>
* <strong>最后修改日期:2006-6-16</strong>
* <p>
*
* @param
* @return void
* @exception BusinessException
* @since NC5.0
*/
private void resetWherePart() {
setRefNodeName(getRefNodeName());
// 可能有业务组添加的WherePart
String wherePart = getWherePart();
// 如果WherePart中不包含业务组添加的WherePart,再给添加上
if (getAddWherePart() != null && wherePart != null
&& wherePart.indexOf(getAddWherePart()) < 0) {
addWherePart(getAddWherePart());
}
} /**
* 设置公司主键同时重置参照默认配置条件
*
* @deprecated
*/
public void setPk_corpAndRefreshRefNodeName(String strPk_corp) {
setPk_corp(strPk_corp); } /*
* 自定义参照动态改变公司主键后,要重新设置WherePart
*/
private void setPk_corpForDefRef(String pk_corp, String pk_corpOld) { if (pk_corpOld != null && pk_corp != null
&& (!pk_corpOld.equals(pk_corp))) {
String wherePartOld = getWherePart();
String wherePart = "";
if (wherePartOld != null) {
int index = wherePartOld.indexOf("'" + pk_corpOld + "'");
if (index > 0) {
wherePart = wherePartOld.replaceFirst("'" + pk_corpOld
+ "'", "'" + pk_corp + "'");
setWherePart(wherePart);
}
}
}
} /**
* 设置参照编码字段。 创建日期:(2001-8-13 16:19:24)
*/
public void setRefCodeField(String strRefCodeField) {
m_strRefCodeField = strRefCodeField;
} /**
* 设置参照名称字段。 创建日期:(2001-8-13 16:19:24)
*/
public void setRefNameField(String strRefNameField) {
m_strRefNameField = strRefNameField;
} /**
* 此处插入方法说明。 创建日期:(2001-8-25 18:58:00)
*
* @param vecSelectedData
* java.util.Vector
*/
public void setSelectedData(Vector vecSelectedData) {
m_vecSelectedData = vecSelectedData;
} public void setSelectedDataAndConvertData(Vector vecSelectedData) {
if (vecSelectedData == null) {
setSelectedData(vecSelectedData);
return;
}
Vector matchVec = getConvertedData(false, vecSelectedData, false);
setSelectedData(matchVec);
putLruMap(matchVec);
} /**
* 此处插入方法说明。 创建日期:(01-6-19 21:15:22)
*
* @param newStrPatch
* java.lang.String
*/
public void setStrPatch(java.lang.String newStrPatch) {
m_strStrPatch = newStrPatch;
} /**
* 此处插入方法说明。 创建日期:(2001-8-16 12:42:02)
*
* @param newWherePart
* java.lang.String
*/
public void setWherePart(String newWherePart) { if (newWherePart != null) {
newWherePart = newWherePart.trim();
int index = newWherePart.toLowerCase().indexOf("where ");
if (index == 0)
newWherePart = newWherePart.substring(index + 5, newWherePart
.length());
}
m_strWherePart = newWherePart;
// 同时修改原始where
m_strOriginWherePart = m_strWherePart; resetSelectedData_WhenDataChanged(); } /**
* 当Where 条件改变后,清空m_vecData,重新匹配已经设置的pks.
*/
private void resetSelectedData_WhenDataChanged() { String[] selectedPKs = getPkValues();
// 清数据。
clearModelData(); if (selectedPKs != null && selectedPKs.length > 0) {
matchPkData(selectedPKs);
} Vector selectedData = getSelectedData(); setSelectedData(selectedData);
// 通知UIRefPane,刷新界面
fireChange();
} /**
* java.util.Vector 过滤非末级节点
*/
protected Vector filterNotLeafNode(Vector vec) {
return vec;
} /**
* 模糊字段名。 创建日期:(01-4-4 0:57:23)
*
* @return java.lang.String
*/
public String[] getBlurFields() { if (m_strBlurFields == null || m_strBlurFields.length == 0) { if (isOnlyMneFields()) {
return m_strBlurFields = getMnecodes();
} else if (getFieldCode() != null) {
ArrayList al = new ArrayList();
int len = getFieldCode().length; al.add(getFieldCode()[0]);
if (len >= 2) {
al.add(getFieldCode()[1]);
} if (getMnecodes() != null) {
for (int i = 0; i < getMnecodes().length; i++) {
if (al.contains(getMnecodes()[i])) {
continue;
}
al.add(getMnecodes()[i]);
}
}
m_strBlurFields = new String[al.size()];
al.toArray(m_strBlurFields); } } return m_strBlurFields;
} /**
* 此处插入方法说明。 创建日期:(2001-11-9 8:54:00)
*
* @return java.lang.String
*/
public java.lang.String getDataSource() {
return m_strDataSource;
} /**
* 用于参照内容转换的影射表 如attrib1属性1-上海 2-南京3-北京 Hashtable conv=new Hashtable();
* Hashtable contents=new Hashtable(); contents.put("1","上海");
* contents.put("2","南京"); contents.put("3","北京");
* conv.put("attrib1",contents); return conv; 童志杰2002-08-30
*/
public java.util.Hashtable getDispConvertor() {
if (getDdReaderVO() != null && m_htDispConvertor == null) {
m_htDispConvertor = getDDReaderMap(getDdReaderVO().getTableName(),
getDdReaderVO().getFieldNames());
}
return m_htDispConvertor;
} /**
* 此处插入方法说明。 创建日期:(2003-10-28 19:40:50)
*
* @return java.lang.String
*/
public java.lang.String getDynamicColClassName() {
return m_dynamicColClassName;
} /**
* 此处插入方法说明。 创建日期:(2003-10-30 8:34:51)
*
* @return java.lang.String[]
*/
public java.lang.String[] getDynamicFieldNames() {
return m_strDynamicFieldNames;
} /**
* 此处插入方法说明。 创建日期:(01-4-3 20:08:40)
*
* @return java.util.Hashtable
* @param tableName
* java.lang.String
*/
public Map getFieldCNName() {
return modelHandler.getFieldCNName();
} /**
* 此处插入方法说明。 创建日期:(2003-4-10 18:42:56) 取过滤后的数据集. vecData 当前结果集
*/
public Vector getFilterPKsVector(Vector vecData, int filterStrategy) {
Vector filterVector = null;
int pkIndex = getFieldIndex(getPkFieldCode());
if (vecData != null) {
// 没有过滤的PKs
if (getFilterPks() == null) {
return vecData;
}
filterVector = new Vector();
for (int i = 0; i < vecData.size(); i++) {
Object vecpk = ((Vector) vecData.elementAt(i))
.elementAt(pkIndex); switch (filterStrategy) { case IFilterStrategy.INSECTION: {
if (m_hmFilterPks.size() == 0) {
return null;
}
if (m_hmFilterPks.get(vecpk.toString()) != null) {
filterVector.add(vecData.elementAt(i));
}
break;
} case IFilterStrategy.REFDATACOLLECT_MINUS_INSECTION: {
if (m_hmFilterPks.size() == 0) {
return vecData;
}
if (m_hmFilterPks.get(vecpk.toString()) == null) {
filterVector.add(vecData.elementAt(i));
}
break;
}
default: }
}
}
return filterVector; } /**
* 此处插入方法说明。 创建日期:(2001-11-8 13:31:41)
*
* @return java.lang.String
*/
public java.lang.String getGroupPart() {
return m_strGroupPart;
} /**
* 不显示字段列表
*
* @return java.lang.String
*/
public java.lang.String[] getHiddenFieldCode() {
return m_strHiddenFieldCode;
} /**
* 此处插入方法说明。 创建日期:(2001-11-9 9:38:40)
*
* @return java.lang.String
*/
public java.lang.String getOriginWherePart() {
return m_strOriginWherePart;
} /**
* 此处插入方法说明。 创建日期:(2001-11-8 10:36:45)
*
* @return java.lang.String
*/
public java.lang.String getRefNodeName() {
return m_strRefNodeName == null ? getClass().getName()
: m_strRefNodeName;
} /**
* 此处插入方法说明。 创建日期:(2001-8-29 10:08:50)
*
* @return int[]
*/
public int[] getShownColumns() {
if ((m_iShownColumns == null || m_iShownColumns.length == 0)
&& getDefaultFieldCount() > 0) {
m_iShownColumns = new int[getDefaultFieldCount()];
for (int i = 0; i < getDefaultFieldCount(); i++) {
m_iShownColumns[i] = i;
}
}
return m_iShownColumns;
} /**
* 此处插入方法说明。 创建日期:(02-7-4 18:40:10)
*
* @return java.util.Vector
*/
// public java.util.Vector getUnMatchData() {
// if (m_vecUnMatchData == null)
// m_vecUnMatchData = new Vector();
// return m_vecUnMatchData;
// }
/**
* 此处插入方法说明。 创建日期:(2003-10-28 19:54:29)
*
* @return java.lang.Object
*/
public java.lang.Object getUserParameter() {
return m_userParameter;
} /**
* 此处插入方法说明。 创建日期:(2003-10-28 19:38:34)
*
* @return boolean
*/
public boolean isDynamicCol() {
return m_isDynamicCol;
} /**
* 此处插入方法说明。 创建日期:(2003-2-21 16:27:33)
*
* @return boolean
*/
public boolean isMnecodeInput() {
return m_mnecodeInput;
} /**
* 此处插入方法说明。 创建日期:(2003-4-10 20:39:56)
*
* @return boolean
*/
public boolean isNotLeafSelectedEnabled() {
return m_bNotLeafSelectedEnabled;
} /**
* 是否允许使用数据权限
*
* @return boolean
*/
public boolean isUseDataPower() {
return m_bUserDataPower;
} /**
* 设置模糊字段。 创建日期:(2001-8-17 12:57:37)
*/
public void setBlurFields(String[] strBlurFields) {
m_strBlurFields = strBlurFields;
} /**
* 此处插入方法说明。 创建日期:(2001-11-9 8:54:00)
*
* @param newDataSource
* java.lang.String
*/
public void setDataSource(java.lang.String newDataSource) {
m_strDataSource = newDataSource;
} /**
* 用于参照内容转换的影射表 如attrib1属性1-上海 2-南京3-北京 Hashtable conv=new Hashtable();
* Hashtable contents=new Hashtable(); contents.put("1","上海");
* contents.put("2","南京"); contents.put("3","北京");
* conv.put("attrib1",contents); return conv; 童志杰2002-08-30
*/
public void setDispConvertor(java.util.Hashtable newDispConvertor) {
m_htDispConvertor = newDispConvertor;
} /**
* 此处插入方法说明。 创建日期:(2003-10-28 19:40:50)
*
* @param newColClassName
* java.lang.String
*/
public void setDynamicColClassName(java.lang.String newColClassName) {
m_dynamicColClassName = newColClassName;
} /**
* 此处插入方法说明。 创建日期:(2003-10-30 8:34:51)
*
* @param newDynamicFieldNames
* java.lang.String[]
*/
public void setDynamicFieldNames(java.lang.String[] newDynamicFieldNames) {
m_strDynamicFieldNames = newDynamicFieldNames;
} /**
* 此处插入方法说明。 创建日期:(2003-4-10 18:32:43)
*
* @param newM_filterPks
* java.lang.String[]
*
* 设置过滤的Pks
*/
public void setFilterPks(java.lang.String[] newM_filterPks) {
setFilterPks(newM_filterPks, IFilterStrategy.INSECTION);
} /**
* 此处插入方法说明。 创建日期:(2005-9-02 18:32:43)
*
* @param newM_filterPks
* java.lang.String[]
*
*
* 设置过滤的Pks
*/
public void setFilterPks(java.lang.String[] newM_filterPks,
int filterStrategy) {
m_filterPks = newM_filterPks;
// 过滤策略
m_filterStrategy = filterStrategy;
m_hmFilterPks.clear();
if (m_filterPks != null && m_filterPks.length > 0) { for (int i = 0; i < m_filterPks.length; i++) {
m_hmFilterPks.put(m_filterPks[i], m_filterPks[i]);
}
}
} /**
* 此处插入方法说明。 创建日期:(2001-11-8 13:31:41)
*
* @param newGroupPart
* java.lang.String
*/
public void setGroupPart(java.lang.String newGroupPart) {
m_strGroupPart = newGroupPart;
} /**
* 此处插入方法说明。 创建日期:(01-6-25 10:53:54)
*
* @param newHiddenFieldCode
* java.lang.String[]
*/
public void setHiddenFieldCode(java.lang.String[] newHiddenFieldCode) {
getHtCodeIndex().clear();
hiddenFieldList.clear();
hiddenFieldList.addAll(Arrays.asList(newHiddenFieldCode));
m_strHiddenFieldCode = newHiddenFieldCode;
} /**
* 此处插入方法说明。 创建日期:(01-6-17 18:35:14)
*
* @return java.util.Hashtable
*/
public void setHtCodeIndex(Hashtable ht) {
m_htCodeIndex = ht;
} /**
* 此处插入方法说明。 创建日期:(2003-10-28 19:38:34)
*
* @param newDynamicCol
* boolean
*/
public void setIsDynamicCol(boolean newDynamicCol) {
m_isDynamicCol = newDynamicCol;
} /**
* 此处插入方法说明。 创建日期:(2003-2-21 16:27:33)
*
* @param newM_mnecodeInput
* boolean
*/
public void setMnecodeInput(boolean newM_mnecodeInput) {
m_mnecodeInput = newM_mnecodeInput;
} /**
* 此处插入方法说明。 创建日期:(2003-4-10 20:39:56)
*
* @param newM_bNotLeafSelectedEnabled
* boolean
*/
public void setNotLeafSelectedEnabled(boolean newM_bNotLeafSelectedEnabled) {
m_bNotLeafSelectedEnabled = newM_bNotLeafSelectedEnabled;
} /**
* 此处插入方法说明。 创建日期:(2001-11-8 10:36:45)
*
* @param newRefNodeName
* java.lang.String
*/
public void setRefNodeName(java.lang.String newRefNodeName) {
m_strRefNodeName = newRefNodeName;
} /**
* v5 不建议使用 替换方式,请分步调用 1、setRefNodeName(refnodename); 2、setPk_corp(pk_corp);
*
* @deprecated
*/
public void setRefNodeName(java.lang.String newRefNodeName, String pk_corp) {
m_strPk_corp = pk_corp;
m_strRefNodeName = newRefNodeName;
} /**
* 为了适配三种DefaultModel添加的方法,在DefaultModel里被覆盖 对于自定义model不能直接调用该方法,请覆盖它
*/
public void setRefTitle(java.lang.String newRefTitle) {
m_strRefTitle = newRefTitle;
} /**
* 此处插入方法说明。 创建日期:(2001-8-29 10:08:50)
*
* @return int[]
*/
public void setShownColumns(int[] iShownColumns) {
m_iShownColumns = iShownColumns;
return;
} /**
* 为了适配三种DefaultModel添加的方法,在DefaultModel里被覆盖 对于自定义model不能直接调用该方法,请覆盖它
*/
public void setTableName(java.lang.String newTableName) {
m_strTableName = newTableName;
} /**
* 设置是否使用数据权限。 创建日期:(2001-8-23 21:03:06)
*/
public void setUseDataPower(boolean useDataPower) {
m_bUserDataPower = useDataPower;
} /**
* 此处插入方法说明。 创建日期:(2003-10-28 19:54:29)
*
* @param newParameter
* java.lang.Object
*/
public void setUserParameter(java.lang.Object newParameter) {
m_userParameter = newParameter;
} /**
* 根据记录位置,列名称插入列值
*/
public void setValue(int recordIndex, String field, Object value) {
Vector vecData = getSelectedData();
if (vecData == null || recordIndex >= vecData.size()) {
return;
}
Vector vRecord = (Vector) vecData.get(recordIndex);
int col = getFieldIndex(field); //
if (isDynamicCol()) {
if (vRecord == null || vRecord.size() == 0 || col < 0)
return; if (value != null) { if (col >= vRecord.size()) {
vRecord.add(value);
} else {
vRecord.setElementAt(value, col);
}
return; }
} if (vRecord == null || vRecord.size() == 0 || col < 0
|| col >= vRecord.size())
return; if (value != null) {
vRecord.setElementAt(value, col); } } /**
* 自定义参照,可以添加封存条件
*/
public void addSealedWherePart(String refNodeName, String sealedWherePart) { DocSealWherePartMng.addSealedWherePart(refNodeName, sealedWherePart);
} /**
* sxj 2004-5-26 新增 改变WherePart时是否清除数据
*/
public void addWherePart(String newWherePart, boolean isRrefreshData) {
addWherePart(newWherePart);
if (isRrefreshData) {
clearModelData();
} } /**
* 此处插入方法说明。 创建日期:(2004-6-1 10:21:59)
*
* @return java.lang.String
*/
public java.lang.String getFilterDlgClaseName() {
return refFilterDlgClaseName;
} /**
* 此处插入方法说明。 创建日期:(2004-9-23 9:03:51)
*
* @return java.lang.String
*/
public java.lang.String getMatchField() {
if (m_matchField == null) {
return getPkFieldCode();
}
return m_matchField;
} /**
* 此处插入方法说明。 创建日期:(2004-11-10 10:31:47)
*
* @return java.util.HashMap
*/
private java.util.HashMap getMatchHM() {
return m_matchHM;
} /**
* 此处插入方法说明。 创建日期:(2003-2-19 9:24:17)
*
* @return java.lang.String
*/
public java.lang.String[] getMnecodes() {
return m_mnecodes;
} /**
* 此处插入方法说明。 创建日期:(2004-4-16 10:31:17)
*
* @return java.lang.Object
*/
public java.lang.Object getPara() {
return userPara;
} /**
* 此处插入方法说明。 创建日期:(2003-11-14 15:42:52)
*
* @return java.lang.String
*/
public java.lang.String getQuerySql() {
return querySql;
} /**
* 此处插入方法说明。 创建日期:(2003-11-15 10:51:44)
*
* @return java.lang.String
*/
public java.lang.String getRefQueryDlgClaseName() {
return refQueryDlgClaseName;
} /**
* 此处插入方法说明。 创建日期:(2004-4-14 16:01:25)
*
* @return java.lang.String
*/
public java.lang.String getTempDataWherePart() {
return refTempDataWherePart;
} /**
* 此处插入方法说明。 创建日期:(2004-6-10 12:09:05)
*
* @return boolean
*/
public boolean isFromTempTable() {
return isFromTempTable;
} /**
* 此处插入方法说明。 创建日期:(2004-4-14 16:13:36)
*
* @return boolean
*/
public boolean isIncludeSub() {
return isIncludeSub;
} /**
* 此处插入方法说明。 创建日期:(2003-10-31 15:57:17)
*
* @return boolean
*/
public boolean isRefreshMatch() {
return m_isRefreshMatch;
} /**
* 此处插入方法说明。 创建日期:(2004-3-17 12:53:23)
*
* @return boolean
*/
public boolean isSealedDataShow() {
return m_isSealedDataShow;
} /**
* 获取匹配数据 匹配成功 数据->m_vecSelectedData 匹配不成功 null->m_vecSelectedData
* 创建日期:(2001-8-23 18:39:24)
*
* @return java.util.Vector sxj 修改如果value= null or value.length()=0
* 不做匹配,提高效率,防止重复reloadData() sxj 2004-11-11 add
*/
public Vector matchData(String field, String[] values) {
return matchData(new String[] { field }, values);
} /**
* 匹配主键数据--选择数据也改变了。 创建日期:(2001-8-23 18:39:24)
*
* @return java.util.Vector sxj 2004-06-08 如果是用Pk 进行匹配,则在最大集内进行匹配。 根据
* getMatchField()提供的列进行匹配
*/
public Vector matchPkData(String[] strPkValues) { if (strPkValues == null) {
return null;
} Vector v = null;
String matchsql = null; matchsql = getMatchSql(strPkValues); Vector matchVec = getMatchVectorFromLRU(strPkValues); if (matchVec != null) {
// setSelectedDataAndConvertData(matchVec);
setSelectedData(matchVec); return matchVec;
} try {
if (isNonSqlMatch(matchsql)) {
v = matchData(getMatchField(), strPkValues); } else { if (isFromTempTable()) {
v = modelHandler.queryRefDataFromTemplateTable(matchsql);
} else {
v = modelHandler.matchPK(getDataSource(), matchsql);
}
} } catch (Exception e) {
Debug.error(e.getMessage(), e);
} // putLruMap(strPkValues, v); setSelectedDataAndConvertData(v); return getSelectedData();
} public Vector getMatchVectorFromLRU(String[] strPkValues) {
if (isCacheEnabled()) {
LRUMap<String, Vector> lruMap = modelHandler.getLRUMap(); String lruKey = getLRUKey(strPkValues); Vector matchVec = lruMap.get(lruKey);
return matchVec;
}
return null;
} private void putLruMap(Vector vecData) {
if (isCacheEnabled()) {
String[] pkValues = getPkValues();
if (pkValues == null) {
return;
}
LRUMap<String, Vector> lruMap = modelHandler.getLRUMap();
String lruKey = getLRUKey(pkValues);
lruMap.put(lruKey, vecData);
}
} private String getLRUKey(String[] strPkValues) {
StringBuffer sb = new StringBuffer();
String dsName = getDataSource();
if (dsName == null) {
dsName = InvocationInfoProxy.getInstance().getUserDataSource();
}
sb.append(dsName).append(getRefNodeName()).append(
getMatchSql(strPkValues)); if (strPkValues != null && strPkValues.length > 0) {
for (int i = 0; i < strPkValues.length; i++) {
sb.append(strPkValues[i]);
} }
return sb.toString();
} /**
*
*/
public boolean isNonSqlMatch(String matchsql) {
return modelHandler.isNonSqlMatch(matchsql);
} public String getMatchSql(String[] strPkValues) {
setPKMatch(true);
boolean originSealedDataShow = isSealedDataShow();
boolean originUseDataPower = isUseDataPower(); if (!isRefEnable()) {
// 如果参照不可编辑,不启用数据权限控制;包含封存数据 ---〉V5新需求
setUseDataPower(false);
setSealedDataShow(true);
} String matchsql;
// pk匹配时,带distinct,防止关联表出现重复数据的问题。
String strPatch = IRefConst.DISTINCT;
String strWherePart = null; String[] fieldCodes = getFieldCode(); if (fieldCodes != null && fieldCodes.length > 0) {
if (fieldCodes[0] != null
&& strPatch.indexOf(fieldCodes[0].toLowerCase()) >= 0) {
strPatch = "";
}
}
if (isMatchPkWithWherePart()) {
strWherePart = getWherePart();
} if (isLargeDataRef() && canUseDB())
matchsql = getSpecialMatchSql(new String[] { getMatchField() },
strPkValues, strPatch, getFieldCode(),
getHiddenFieldCode(), getTableName(), strWherePart,
getOrderPart());
// 批处理Sql
else
matchsql = getSql_Match(new String[] { getMatchField() },
strPkValues, strPatch, getFieldCode(),
getHiddenFieldCode(), getTableName(), strWherePart,
getOrderPart());// 批处理Sql setPKMatch(false); setSealedDataShow(originSealedDataShow);
setUseDataPower(originUseDataPower); return matchsql;
} /**
* 此处插入方法说明。 创建日期:(2004-6-1 10:21:59)
*
* @param newFilterDlgClaseName
* java.lang.String
*/
public void setFilterDlgClaseName(java.lang.String newFilterDlgClaseName) {
refFilterDlgClaseName = newFilterDlgClaseName;
} /**
* 此处插入方法说明。 创建日期:(2004-6-10 12:09:05)
*
* @param newFromTempTable
* boolean
*/
public void setFromTempTable(boolean newFromTempTable) {
isFromTempTable = newFromTempTable;
} /**
* 此处插入方法说明。 创建日期:(2004-4-14 16:13:36)
*
* @param newIncludeSub
* boolean
*/
public void setIncludeSub(boolean newIncludeSub) {
isIncludeSub = newIncludeSub;
} /**
* 此处插入方法说明。 创建日期:(2003-10-31 15:57:17)
*
* @param newRefreshMatch
* boolean
*/
public void setIsRefreshMatch(boolean newRefreshMatch) {
m_isRefreshMatch = newRefreshMatch;
} /**
* 此处插入方法说明。 创建日期:(2003-2-19 9:24:17)
*
* @param newM_mnecode
* java.lang.String
*/
public void setMnecode(java.lang.String[] newM_mnecodes) {
m_mnecodes = newM_mnecodes;
} /**
* 此处插入方法说明。 创建日期:(2004-4-16 10:31:17)
*
* @param newPara
* java.lang.Object
*/
public void setPara(java.lang.Object newPara) {
userPara = newPara;
} /**
* sxj 2004-5-26 新增 改变WherePart时是否清除数据
*/
public void setPara(java.lang.Object newPara, boolean isRrefreshData) {
setPara(newPara);
if (isRrefreshData) {
clearModelData();
}
} /**
* sxj 2004-5-26 新增 改变WherePart时是否清除数据
*/
public void setPk_corp(String strPk_corp, boolean isRrefreshData) {
setPk_corp(strPk_corp);
if (isRrefreshData) {
clearModelData();
}
} /**
* 只修改变量的值,不同步WherePart中的值。
*/
public void setPk_corpValue(String strPk_corp) {
m_strPk_corp = strPk_corp;
} /**
* 此处插入方法说明。 创建日期:(2003-11-14 15:42:52)
*
* @param newQuerySql
* java.lang.String
*/
public void setQuerySql(java.lang.String newQuerySql) {
querySql = newQuerySql;
} /**
* 此处插入方法说明。 创建日期:(2003-11-15 10:51:44)
*
* @param newRefQueryDlgClaseName
* java.lang.String
*/
public void setRefQueryDlgClaseName(java.lang.String newRefQueryDlgClaseName) {
refQueryDlgClaseName = newRefQueryDlgClaseName;
} /**
* 此处插入方法说明。 创建日期:(2004-3-17 12:53:23)
*
* @param newSealedDataShow
* boolean
*/
public void setSealedDataShow(boolean newSealedDataShow) {
m_isSealedDataShow = newSealedDataShow;
} /**
* 此处插入方法说明。 创建日期:(2004-4-14 16:01:25)
*
* @param newTempDataWherePart
* java.lang.String
*/
public void setTempDataWherePart(java.lang.String newTempDataWherePart) {
refTempDataWherePart = newTempDataWherePart;
} /**
* sxj 2004-5-26 新增 改变WherePart时是否清除数据
*/
public void setWherePart(String newWherePart, boolean isRrefreshData) {
setWherePart(newWherePart);
if (isRrefreshData) {
clearModelData();
}
} /**
* 此处插入方法描述。 创建日期:(2004-6-3 16:56:59)
*
* @author:毛士福
* @return nc.ui.bd.ref.AbstractRefModel
* @deprecated since v5.0
*/
public AbstractRefModel getM_defGridmodel() {
return m_defGridmodel;
} /**
* @return 返回 m_pk_org。
*/
public String getPk_GlOrgBook() {
return m_pk_glOrgBook;
} /**
* @return 返回 m_orgTypeCode。
*/
public String getOrgTypeCode() {
return m_orgTypeCode;
} /**
* 本方法不支持自定义参照,动态改变主体账簿后,WherePart的动态改变。
*
* @param orgTypeCode
* 要设置的 m_orgTypeCode。
* @param pk_org
* 要设置的 m_pk_org。 多账簿、多会计主体设置接口 主要功能:
* 提供给总账按主体账簿方式设置,其他业务组调用可能会产生问题。
*/
public void setPk_GlOrgBook(String orgTypeCode, String pk_GlOrgBook) {
// 档案的真正类型
String pk = pk_GlOrgBook;
String type = orgTypeCode;
BdinfoVO infoVO = getBdinfoVO();
if (infoVO != null) {
pk = BDGLOrgBookAccessor.getAccuratePK(infoVO.getOrgtypecode(),
orgTypeCode, pk_GlOrgBook);
type = infoVO.getOrgtypecode();
}
setOrgTypeCodeAndPK(type, pk); // 重新设置条件.
resetWherePart(); } /*
* 设置档案类型等属性。
*/
public void setOrgTypeCodeAndPK(String orgTypeCode, String pk) {
// 如果是公司类型
if (OrgnizeTypeVO.COMPANY_TYPE.equals(orgTypeCode)) {
setPk_corp(pk);
m_orgTypeCode = null;
m_pk_glOrgBook = null; } else if (OrgnizeTypeVO.ZHUZHANG_TYPE.equals(orgTypeCode)) {
m_orgTypeCode = orgTypeCode;
m_pk_glOrgBook = pk;
} } /**
* @param newM_defGridmodel
* nc.ui.bd.ref.AbstractRefModel
* @deprecated since v5.0
*/
public void setM_defGridmodel(AbstractRefModel newM_defGridmodel) {
m_defGridmodel = newM_defGridmodel;
} /*
*
*/
public String getDataPowerSubSql(String strTableName,
String strTableShowName) {
String tableName = strTableName;
if (strTableName != null) {
tableName = strTableName.trim();
}
String powerSql = modelHandler.getDataPowerSubSql(tableName,
strTableShowName, this);
return powerSql;
} protected String getDataPowerSqlKey(String strTableName,
String strTableShowName) {
String pk_org = null;
if (getPk_GlOrgBook() != null) {
pk_org = getPk_GlOrgBook();
} else {
pk_org = getPk_corp();
}
String tableName = strTableName;
if (strTableName != null) {
tableName = strTableName.trim();
}
String dataPowerKey = tableName + "_" + strTableShowName + pk_org;
return dataPowerKey;
} /**
* @return 返回 m_fun_code。
*/
public String getFun_code() {
return m_fun_code;
} /**
* @param m_fun_code
* 要设置的 m_fun_code。
*/
public void setFun_code(String m_fun_code) { boolean isEqual = modelHandler.equals(this.m_fun_code, m_fun_code); this.m_fun_code = m_fun_code; // 同时要重新初始化参照的设置
if (!isEqual) {
setRefNodeName(getRefNodeName());
}
} /**
* 为多语言添加此方法, 请覆盖此方法返回要翻译字段数组。
*/
protected RefVO_mlang[] getRefVO_mlang() { return null; } /**
* * 为多语言添加此方法, 并提供默认实现.
*
* vecData:参照中的数据(全集),请用参数传入的vecData,不要用getData()方法得到,否则会死循环。
* vecData中的数据为每一行Record,每一个Record也是一个Vector.
*
* 返回值为Vector,它的数据为翻译后的Object[],注意放置Object[]的顺序一定和refVO_mlangs的顺序一致。
*
* 创建日期:(2005-3-30 16:19:24)
*
* @return Vector
*/
private Vector getValues_mlang(Vector vecData, RefVO_mlang[] refVO_mlangs) {
// 要翻译的列 Vector datas = new Vector(); if (vecData != null && vecData.size() > 0) {
int recordAccout = vecData.size(); // 行记录数。
if (refVO_mlangs != null) {
for (int i = 0; i < refVO_mlangs.length; i++) {
RefVO_mlang refVO_mlang = refVO_mlangs[i];
String resid = "";
String[] resIDFieldNames = refVO_mlangs[i]
.getResIDFieldNames(); Object[] oData_mlang = new Object[recordAccout]; for (int j = 0; j < recordAccout; j++) { Vector record = (Vector) vecData.get(j); // 行记录
resid = "";
if (resIDFieldNames != null) {
resid += refVO_mlang.getPreStr();
for (int k = 0; k < resIDFieldNames.length; k++) {
Object oValue = record
.get(getFieldIndex(resIDFieldNames[k]));
if (oValue != null) {
resid += oValue.toString();
} }
} // 根据资源ID取翻译后的数据
String str_multiLang = NCLangRes4VoTransl
.getNCLangRes().getStrByID(
refVO_mlang.getDirName(), resid);
// 根据资源没有找到,返回原来的值.
if (resid.equals(str_multiLang)) {
str_multiLang = record.get(
getFieldIndex(refVO_mlang.getFieldName()))
.toString();
}
oData_mlang[j] = str_multiLang; }
datas.add(oData_mlang);
} }
} return datas; } /**
* 为多语言添加此方法, 设置翻译后的值到参照数据中. 设置特定列的值 创建日期:(2005-3-30 16:19:24)
*
*/
private void setMlangValues(Vector vecData, RefVO_mlang[] refVO_mlangs) { if (vecData == null || vecData.size() == 0 || refVO_mlangs == null) {
return;
}
Vector vec_malng = getValues_mlang(vecData, refVO_mlangs);
if (vec_malng == null || vec_malng.size() != refVO_mlangs.length) {
return;
}
String[] fieldNames = new String[refVO_mlangs.length];
for (int i = 0; i < refVO_mlangs.length; i++) {
fieldNames[i] = refVO_mlangs[i].getFieldName();
}
setValuesByFieldName(vecData, vec_malng, fieldNames); } class DefFieldsHandler { /**
* 设有公式的参照,按公式取值。 创建日期:(2005-3-30 16:19:24)
*
*/
void setDefFieldValues(Vector vecData) { String[] defFields = getShowDefFields(); if (vecData == null || vecData.size() == 0 || defFields == null
|| defFields.length == 0) {
return;
}
Vector<Object[]> rawData = new Vector<Object[]>();
Vector convertedData = null;
DefFieldInfo defFieldInfo = new DefFieldInfo(defFields); for (int i = 0; i < defFields.length; i++) {
rawData.add(getValues(defFields[i], vecData));
}
try {
convertedData = UFRefDefTanslateUtil.getDefValues(defFieldInfo,
rawData, Integer.valueOf(getOrgTypeCode()).intValue(),
getPk_corp());
} catch (Exception e) {
Logger.error(e.getMessage(), e);
} if (convertedData == null) {
return;
} setValuesByFieldName(vecData, convertedData, defFields); }
} class FormulaHandler { private FormulaParseFather parse = null; /**
* 设有公式的参照,按公式取值。 创建日期:(2005-3-30 16:19:24)
*
*/
void setFormulaValues(Vector vecData, String[][] formulas) { if (vecData == null || vecData.size() == 0 || formulas == null) {
return;
}
String[][] showFormulas = getShowFieldFormulas(formulas);
if (showFormulas == null) {
return;
}
Object[][] datas = getValues_formulas(vecData, showFormulas); if (datas == null || datas.length != showFormulas.length) {
return;
}
Vector v = new Vector();
String[] fieldNames = new String[datas.length];
for (int i = 0; i < datas.length; i++) {
v.add(datas[i]);
fieldNames[i] = (String) showFormulas[i][0];
}
setValuesByFieldName(vecData, v, fieldNames); } private String[][] getShowFieldFormulas(String[][] formulas) {
List<String[]> list = new ArrayList<String[]>();
for (int i = 0; i < formulas.length; i++) {
String formulaField = formulas[i][0];
if (isShowField(formulaField)) {
list.add(formulas[i]);
}
}
String[][] showFormulas = null;
if (list.size() > 0) {
showFormulas = new String[list.size()][];
list.toArray(showFormulas);
}
return showFormulas;
} private Object[][] getValues_formulas(Vector vecData,
String[][] formulas) {
// 要翻译的列 Object[][] datas = null;
int flen = formulas.length;
if (vecData != null && vecData.size() > 0 && flen > 0) { int recordAccout = vecData.size(); // 行记录数。
datas = new Object[flen][recordAccout];
ArrayList list = new ArrayList();
String formulaField = null;
String strFormula = null;
for (int i = 0; i < flen; i++) {
list.clear();
formulaField = formulas[i][0];
strFormula = formulas[i][1]; for (int j = 0; j < recordAccout; j++) {
Vector record = (Vector) vecData.get(j);
list.add(getFormulaValue(record, formulaField));
}
datas[i] = getFormulaValues(formulaField, strFormula, list);
}
} return datas; } /**
* <p>
* <strong>最后修改人:sxj</strong>
* <p>
* <strong>最后修改日期:2006-9-19</strong>
* <p>
*
* @param
* @return String
* @exception BusinessException
* @since NC5.0
*/
private String getFormulaValue(Vector record, String formulaField) {
int fieldIndex = getFieldIndex(formulaField);
if (fieldIndex == -1) {
return null;
}
Object obj = record.get(fieldIndex); String value = null; if (obj instanceof RefValueVO && obj != null) { Object originValue = ((RefValueVO) obj).getOriginValue(); value = originValue == null ? null : originValue.toString(); } else {
if (obj != null) {
value = obj.toString();
}
}
return value;
} private Object[] getFormulaValues(String fieldName, String formulas,
List givenvalues) {
FormulaParseFather parse = getParse();
// String express = formula;
String[] expresses = StringUtil.toArray(formulas, ";");
parse.setExpressArray(expresses);
parse.addVariable(fieldName, givenvalues);
Object[][] values = parse.getValueOArray();
return values[values.length - 1];
} /**
* @return 返回 parse。
*/
private FormulaParseFather getParse() {
if (parse == null) {
parse = new nc.ui.pub.formulaparse.FormulaParse();
}
return parse;
} } /*
* _ add by hetian 2005-04-11 ______________________________________
*/
/**
* 判断该参照是否是大数据表
*
* @return
*/
public boolean isLargeDataRef() {
if (m_strRefNodeName == null || m_strRefNodeName.equals(""))
return false;
if (LARGE_NODE_NAME.indexOf(m_strRefNodeName) >= 0
&& isChangeTableSeq()) {
return true;
}
return false;
} /**
* 改变主表
*
* @param table
* @return
*/
public String changeBaseTable(String table) { if (table == null || table.indexOf("join") < 0)
return table;
StringTokenizer token = new StringTokenizer(table);
String firstTable = "";
String secondTable = "";
String lastElement = "";
String joinStr = "";
String onStr = "";
boolean isJoin = false;
boolean isOn = false;
int index = 0;
while (token.hasMoreTokens()) {
String element = token.nextToken();
if (lastElement.equalsIgnoreCase("join")) {
secondTable = element;
isJoin = false;
}
if (element.equalsIgnoreCase("on")) {
isOn = true;
}
if (isJoin) {
joinStr += new StringBuffer().append(" ").append(element)
.append(" ").toString();
}
if (isOn) {
onStr += new StringBuffer().append(" ").append(element).append(
" ").toString();
}
if (index == 0) {
firstTable = new StringBuffer().append(element).append(" ")
.toString();
isJoin = true;
} lastElement = element;
index++;
} return secondTable + joinStr + firstTable + onStr;
} /**
* 得到匹配语句
*
* @return
*/
public String getSpecialMatchSql(String[] fieldNames, String values[],
String strPatch, String[] strFieldCode, String[] hiddenFields,
String strTableName, String strWherePart, String strOrderField) {
if (strTableName == null || strTableName.trim().length() == 0)
return null;
if (!isPKMatch()) {
strTableName = changeBaseTable(strTableName);
}
if (strOrderField != null) {
strOrderField = filterColumn(strOrderField);
}
return getSql_Match(fieldNames, values, strPatch, strFieldCode,
hiddenFields, strTableName, strWherePart, strOrderField); } /**
* 构造基本 SQL
*/
public String buildBaseSql(String patch, String[] columns,
String[] hiddenColumns, String tableName, String whereCondition) {
StringBuffer whereClause = new StringBuffer();
StringBuffer sql = new StringBuffer("select ").append(patch)
.append(" ");
int columnCount = columns == null ? 0 : columns.length;
addQueryColumn(columnCount, sql, columns, hiddenColumns);
// 加入FROM子句
sql.append(" from ").append(tableName);
// 加入WHERE子句
if (whereCondition != null && whereCondition.trim().length() != 0) {
whereClause.append(" where (").append(whereCondition).append(" )");
} else
whereClause.append(" where 11=11 "); appendAddWherePartCondition(whereClause); addDataPowerCondition(getTableName(), whereClause);
addSealCondition(whereClause);
addEnvWherePart(whereClause);
sql.append(" ").append(whereClause.toString()); return sql.toString();
} protected void addDataPowerCondition(String tableName,
StringBuffer whereClause) {
if (isUseDataPower()) { String powerSql = getDataPowerSubSql(tableName, getDataPowerName()); if (powerSql != null) whereClause.append(" and (").append(
getDataPowerResourceColumn()).append(" in (").append(
powerSql).append("))"); } } public String getDataPowerResourceColumn() {
if (dataPowerResourceColumn == null) {
return getPkFieldCode();
}
return dataPowerResourceColumn;
} private void appendAddWherePartCondition(StringBuffer whereClause) { if (getAddWherePart() == null) {
return;
} if (isPKMatch() && !isMatchPkWithWherePart()) { return; }
whereClause.append(" ").append(getAddWherePart()); } /**
* 给数据权限重定向的机会,子类覆盖。 特殊情况下使用,例如会计科目多版本
*/
protected String getDataPowerName() {
return getRefNodeName();
} /**
* 添加列条件
*
* @param iSelectFieldCount
* @param strSql
* @param strFieldCode
* @param hiddenFields
*/
public void addQueryColumn(int iSelectFieldCount, StringBuffer strSql,
String[] strFieldCode, String[] hiddenFields) {
for (int i = 0; i < iSelectFieldCount; i++) {
strSql.append(strFieldCode[i]);
if (i < iSelectFieldCount - 1)
strSql.append(",");
}
// 加入隐藏字段
if (hiddenFields != null && hiddenFields.length > 0) {
for (int k = 0; k < hiddenFields.length; k++) {
if (hiddenFields[k] != null
&& hiddenFields[k].trim().length() > 0) {
strSql.append(",");
strSql.append(hiddenFields[k]);
}
}
}
} /**
* 添加封存条件
*
* @param whereClause
*/
public void addSealCondition(StringBuffer whereClause) {
// 封存数据不显示,添加Where条件
if (!isSealedDataShow()) { String wherePart = getSealedWherePart();
if (wherePart != null) {
whereClause.append(" and (").append(wherePart).append(") "); }
}
} /**
* 查询参照封存条件。
*
* @param refNodeName
* @return refNodeName对应参照的过滤封存数据的SQL where条件
*/
public String getSealedWherePart() {
if (sealedWherePart != null) {
return sealedWherePart;
} sealedWherePart = DocSealWherePartMng
.getSealedWherePart(getRefNodeName());
if (sealedWherePart == null) {
sealedWherePart = DocSealWherePartMng
.getSealedWherePart(getTableName());
} return sealedWherePart;
} /**
* 设置封存条件
*
* @param sealedWherePart
* 要设置的 sealedWherePart。
*/
public void setSealedWherePart(String sealedWherePart) {
this.sealedWherePart = sealedWherePart;
} /**
* 过滤表名
*
* @param column
* @return
*/
public String filterColumn(String column) {
return column.substring(column.indexOf(".") + 1, column.length());
} /**
* 构造SQL语句
*
* @author 张扬 贺扬修改
*/
protected String getSql(String strPatch, String[] strFieldCode,
String[] hiddenFields, String strTableName, String strWherePart,
String strGroupField, String strOrderField) {
if (strTableName == null || strTableName.trim().length() == 0) {
return null;
} String basSQL = buildBaseSql(strPatch, strFieldCode, hiddenFields,
strTableName, strWherePart);
StringBuffer sqlBuffer = new StringBuffer(basSQL);
if (getQuerySql() != null) {
addQueryCondition(sqlBuffer);
}
if (getBlurValue() != null && isIncludeBlurPart()) {
String blurSql = addBlurWherePart();
sqlBuffer.append(blurSql);
} //
// 加入Group子句
if (strGroupField != null) {
sqlBuffer.append(" group by ").append(strGroupField).toString();
}
// 加入ORDER子句
if (strOrderField != null && strOrderField.trim().length() != 0) {
sqlBuffer.append(" order by ").append(strOrderField).toString();
}
return sqlBuffer.toString();
} protected void addQueryCondition(StringBuffer sqlBuffer) {
sqlBuffer.append(" and (").append(getPkFieldCode()).append(" in (")
.append(getQuerySql()).append("))").toString();
} /**
* @param sqlBuffer
*/
public String addBlurWherePart() {
return modelHandler.addBlurWherePart();
} /**
*/
protected String getSql_Match(String[] fieldNames, String[] values,
String strPatch, String[] strFieldCode, String[] hiddenFields,
String strTableName, String strWherePart, String strOrderField) {
if (strTableName == null || strTableName.trim().length() == 0)
return null; String basSQL = null; basSQL = buildBaseSql(strPatch, strFieldCode, hiddenFields,
strTableName, strWherePart); StringBuffer buffer = new StringBuffer(basSQL); buffer.append(" and (");
if (isPKMatch()) {
buffer.append(getWherePartByFieldsAndValues(fieldNames, values));
} else {
String[] toLowCasefieldNames = new String[fieldNames.length];
String[] toLowCaseValues = new String[values.length];
for (int i = 0; i < toLowCasefieldNames.length; i++) {
toLowCasefieldNames[i] = RefPubUtil.toLowerDBFunctionWrapper(
this, fieldNames[i]);
}
for (int i = 0; i < toLowCaseValues.length; i++) {
toLowCaseValues[i] = RefPubUtil.toLowerCaseStr(this, values[i]);
} buffer.append(getWherePartByFieldsAndValues(toLowCasefieldNames,
toLowCaseValues));
}
buffer.append(") ");
// 加入ORDER子句
if (strOrderField != null) {
buffer.append(" order by ").append(strOrderField).toString();
}
return buffer.toString();
} /*
*
* 在java.util.Hashtable getDispConvertor()中初始化
*
*/
public Hashtable getConvertHT(String tableName, String[] fieldNames) {
// 只设置一个标识
setDdReaderVO(tableName, fieldNames);
// 读取值域
return null;
} /**
* <p>
* <strong>最后修改人:sxj</strong>
* <p>
* <strong>最后修改日期:2006-7-20</strong>
* <p>
*
* @param
* @return Hashtable
* @exception BusinessException
* @since NC5.0
*/
private Hashtable getDDReaderMap(String tableName, String[] fieldNames) {
DataDictionaryReader ddReader = new DataDictionaryReader(tableName);
Hashtable convert = new Hashtable(); for (int i = 0; i < fieldNames.length; i++) {
// 如果列名已经包含表名,去掉表名.值域列没有表名
String newfieldName = fieldNames[i];
if (newfieldName.indexOf(".") > 0) {
newfieldName = newfieldName.substring(
newfieldName.indexOf(".") + 1, newfieldName.length());
}
String[] keys = ddReader.getQzsm(newfieldName);
Hashtable contents = new Hashtable();
for (int j = 0; j < keys.length; j++) {
if (keys[j] != null) {
contents.put(ddReader
.getNumberByQzsm(newfieldName, keys[j]).toString(),
keys[j]);
}
} convert.put(fieldNames[i], contents);
}
return convert;
} /**
* @return 返回 isMatchPkWithWherePart。
*
*/
public boolean isMatchPkWithWherePart() {
return isMatchPkWithWherePart;
} /**
* @param isMatchPkWithWherePart
* 要设置的 isMatchPkWithWherePart。
*/
public void setMatchPkWithWherePart(boolean isMatchPkWithWherePart) {
this.isMatchPkWithWherePart = isMatchPkWithWherePart;
} /**
* @return 返回 m_isRefEnable。
*/
public boolean isRefEnable() {
return m_isRefEnable;
} /**
* 参照是否可编辑 规则: 1、如果参照可以编辑 在matchPK时,包含数据权限和不包含封存数据 2、如果参照不能编辑
* 在matchPK时,不包含数据权限和包含封存数据
* 3、对于规则1,如果isUseDataPower()=false,就不包含数据权限;如果isSealedDataShow=true,就包含封存数据
*/
public void setisRefEnable(boolean refEnable) {
m_isRefEnable = refEnable; } /**
* @return 返回 formulas。
*/
public String[][] getFormulas() {
return formulas;
} /**
* @param formulas
* 要设置的 formulas。
*/
public void setFormulas(String[][] formulas) {
this.formulas = formulas;
} /**
* @return 返回 isLocQueryEnable。
*/
public boolean isLocQueryEnable() {
return isLocQueryEnable;
} /**
* @param isLocQueryEnable
* 要设置的 isLocQueryEnable。
*/
public void setLocQueryEnable(boolean isLocQueryEnable) {
this.isLocQueryEnable = isLocQueryEnable;
} /**
* @return 返回 m_hmFilterPks。
*/
public HashMap getHmFilterPks() {
return m_hmFilterPks;
} /**
* @return 返回 m_filterStrategy。
*/
public int getFilterStrategy() {
return m_filterStrategy;
} /**
* @return 返回 m_filterPks。
*/
public String[] getFilterPks() {
return m_filterPks;
} /**
* 获取匹配数据 匹配成功 数据->m_vecSelectedData 匹配不成功 null->m_vecSelectedData
* 创建日期:(2001-8-23 18:39:24)
*
* @return java.util.Vector sxj 修改如果value= null or value.length()=0
* 不做匹配,提高效率,防止重复reloadData() sxj 2004-11-11 add
*/
public Vector matchData(String[] fields, String[] values) { Vector vMatchData = getMatchedRecords(fields, values); // 使用缓存,并且匹配不到数据,刷新数据再执行一次 if (isCacheEnabled() && vMatchData == null && isRefreshMatch()) {
clearData();
vMatchData = getMatchedRecords(fields, values);
}
// boolean isDefConverted = true;
// if (vMatchData == null || vMatchData.size() == 1) {
// isDefConverted = false;
// }
// if (vMatchData != null) {
// vMatchData = getConvertedData(false, vMatchData, isDefConverted);
// }
setSelectedData(vMatchData); return vMatchData;
} /**
* 此处插入方法说明。 创建日期:(2005-10-21 14:43:00)
*
* @param fieldNames
* java.lang.String[]
* @param values
* java.lang.String
*/
protected Vector getMatchedRecords(String[] fieldNames, String[] values) { Vector vMatchedRecords = null;
// sxj
if (values == null || values.length == 0) {
return vMatchedRecords;
}
//
if (fieldNames == null || fieldNames.length == 0) { return vMatchedRecords;
}
// 要比较的值放到HashMap
getMatchHM().clear();
for (int i = 0; i < values.length; i++) {
if (values[i] != null) {
getMatchHM().put(RefPubUtil.toLowerCaseStr(this, values[i]),
RefPubUtil.toLowerCaseStr(this, values[i]));
}
}
vMatchedRecords = new Vector();
// 在全集中匹配数据
setIncludeBlurPart(false);
// 重新载入数据
Vector data = null; data = getRefData(); if (data != null) {
for (int i = 0; i < data.size(); i++) {
Vector vRecord = (Vector) data.elementAt(i);
if (vRecord != null) for (int j = 0; j < fieldNames.length; j++) {
int col = getFieldIndex(fieldNames[j]);
if (col < 0 || col >= vRecord.size()) {
continue;
}
if (vRecord.elementAt(col) != null
&& getMatchHM().get(
RefPubUtil.toLowerCaseStr(this, vRecord
.elementAt(col).toString()
.trim())) != null) {
vMatchedRecords.addElement(vRecord);
break;
}
} }
} if (vMatchedRecords != null && vMatchedRecords.size() == 0)
vMatchedRecords = null;
setIncludeBlurPart(true); // 恢复原状态 return vMatchedRecords;
} /**
* 此处插入方法说明。 创建日期:(2005-10-21 17:12:01)
*
* @return boolean
*/
public boolean isOnlyMneFields() {
return isOnlyMneFields;
} /**
* 此处插入方法说明。 创建日期:(2005-10-21 17:12:01)
*
* @param newIsOnlyMneFields
* boolean
*/
public void setOnlyMneFields(boolean newIsOnlyMneFields) {
isOnlyMneFields = newIsOnlyMneFields;
} /**
* 此处插入方法说明。 创建日期:(2003-2-19 9:24:17)
*
* @return java.lang.String
*/
public java.lang.String getWherePartByFieldsAndValues(String[] fields,
String[] values) {
String wherePart = "";
StringBuffer sb = new StringBuffer();
if (fields != null && values != null) {
int length = fields.length;
for (int i = 0; i < length; i++) {
if (values.length == 1) {
// =
sb.append(fields[i]).append("='").append(values[0]).append(
"' "); } else {
// in sb.append(RefPubUtil.getInSubSql(fields[i], values)); } if (i == length - 1) {
continue;
}
sb.append(" or "); }
} else {
return null;
} wherePart = sb.toString();
return wherePart; } /**
* @return Returns the m_addWherePart.
*/
public String getAddWherePart() {
return m_addWherePart;
} public void saveTempData(Object[] retPKs) { // 保存Pk 到临时表 if (retPKs == null || retPKs.length == 0) {
setTempDataWherePart(null);
return;
} String pk_ts = null; RefdatatempVO[] vos = new RefdatatempVO[retPKs.length];
for (int i = 0; i < retPKs.length; i++) {
vos[i] = new RefdatatempVO();
vos[i].setPk_selecteddata(retPKs[i].toString());
vos[i].setPk_corp(getPk_corp());
vos[i].setCuserid(getPk_user());
vos[i].setRefnodename(getRefNodeName());
vos[i].setPk_ts("temp"); }
try {
pk_ts = modelHandler.saveRefDataTempVOs(vos); } catch (Exception e) {
Debug.error(e.getMessage(), e);
} String selSql = "select pk_selecteddata from bd_refdatatemp ";
// 设置临时表取树WherePart
String wherePart = selSql + " where pk_corp='" + getPk_corp()
+ "' and cuserid = '" + getPk_user() + "' "
+ " and refnodename='" + getRefNodeName() + "' and pk_ts = '"
+ pk_ts + "'";
setTempDataWherePart(wherePart); } /**
* 设有公式的参照,按公式取值。 创建日期:(2005-3-30 16:19:24)
*
*/
public void setColDispValues(Vector vecData, Object[][] dispConverter) { if (vecData == null || vecData.size() == 0 || dispConverter == null) {
return;
} // 列显示转换器循环
for (int i = 0; i < dispConverter.length; i++) { // 列显示转化配置VO
RefColumnDispConvertVO convertVO = (RefColumnDispConvertVO) dispConverter[i][0];
if (convertVO == null) {
continue;
}
// 实现类名称
String className = dispConverter[i][1].toString(); // 给列显示转化配置VO设置数据主键值
// convertVO.setPks(pks);
convertVO.setRefData(vecData);
// 处理列显示转换
m_vecData = modelHandler.setColDispValue(vecData, convertVO,
className);
}
} /*
*
*/
public ReftableVO getRefTableVO(String pk_corp) { return modelHandler.getRefTableVO(pk_corp);
} /*
* 栏目信息数据放到缓存.
*/
public void setReftableVO2Cache(ReftableVO vo, String pk_org) { modelHandler.setReftableVO2Cache(vo, pk_org);
} public String getReftableVOCacheKey(String pk_org) {
String refNodeName = getRefNodeName(); // if (OrgnizeTypeVO.ZHUZHANG_TYPE.equals(getOrgTypeCode())){
// pk_org = getPk_GlOrgBook();
// }else{
// pk_org = getPk_corp();
// }
// 目前还是按当前登录公司来保存栏目信息,以后有需求可以加入对主体账簿的支持 String key = refNodeName + pk_org;
return key;
} /*
* 查询参照数据以及参照栏目信息数据 1、栏目数据直接放入缓存. 2、参照数据返回
*/
public Vector getQueryResultVO() {
boolean isQueryRefColumn = !modelHandler
.isReftableVOCached(getPk_corp()); RefQueryVO queryVO = getRefQueryVO(); // 目前还是按当前登录公司来保存栏目信息,以后有需求可以加入对主体账簿的支持
queryVO.setPk_org(getPk_corp());
RefQueryResultVO resultVO = null; resultVO = modelHandler.queryRefdataByQueryVO(queryVO); if (resultVO == null) {
return null;
}
Vector v = resultVO.getRefData();
if (isQueryRefColumn) {
setReftableVO2Cache(resultVO.getRefTableVO(), getPk_corp());
} return v;
} protected RefQueryVO getRefQueryVO() {
boolean isQueryRefColumn = !modelHandler
.isReftableVOCached(getPk_corp()); queryVO.setDataSourceName(getDataSource());
queryVO.setRefNodeName(getRefNodeName());
queryVO.setQuerySql(getRefSql());
queryVO.setObj(getPara());
queryVO.setQueryRefColumn(isQueryRefColumn);
return queryVO;
} /**
* 参照标题 创建日期:(01-4-4 0:57:23)
*
* @return java.lang.String
*/
public String getRefTitle() {
if (m_strRefTitle != null) {
return m_strRefTitle;
} m_strRefTitle = modelHandler.getRefNodeName_mLang(getRefNodeName()); if (m_strRefTitle == null) {
m_strRefTitle = getRefNodeName(); }
return m_strRefTitle;
} /**
* @param m_pk_user
* 要设置的 m_pk_user。
*/
public void setPk_user(String m_pk_user) {
this.m_pk_user = m_pk_user;
} /*
* 给名称字段赋值
*/
public void resetFieldName() {
if (getFieldCode() != null && getTableName() != null
&& (getFieldName() == null || getFieldName().length == 0)) { String[] name = new String[getFieldCode().length]; for (int i = 0; i < getFieldCode().length; i++) { String fieldCode = modelHandler
.getFieldCodeWithTableName(getFieldCode()[i]); String resid = modelHandler.getResID(fieldCode); name[i] = modelHandler.getRefMultiLangStr(resid, fieldCode); }
setFieldName(name);
}
} /**
* @return 返回 formulaHandler。
*/
private FormulaHandler getFormulaHandler() {
if (formulaHandler == null) {
formulaHandler = new FormulaHandler();
}
return formulaHandler;
} private DefFieldsHandler getDefFieldHandler() {
if (defFieldHandler == null) {
defFieldHandler = new DefFieldsHandler();
}
return defFieldHandler;
} /**
* 设置自定义数据到指定vecData中的field列。 创建日期:(2005-3-30 16:19:24)
*
* @return java.lang.Object[]
*/
private void setValuesByFieldName(Vector vecData, Vector newVecData,
String[] fieldNames) { int col = -1;
for (int i = 0; i < fieldNames.length; i++) { col = getFieldIndex(fieldNames[i]);
Object[] values = (Object[]) newVecData.get(i);
if (values == null) {
continue;
}
for (int j = 0; j < values.length; j++) {
Vector vRecord = (Vector) vecData.get(j);
if (vRecord == null || vRecord.size() == 0 || col < 0
|| col >= vRecord.size()) {
continue;
} Object obj = getRefValueVO(vRecord.elementAt(col), values[j]); vRecord.setElementAt(obj, col); }
}
} /**
* <p>
* <strong>最后修改人:sxj</strong>
* <p>
* <strong>最后修改日期:2006-5-17</strong>
* <p>
*
* @param
* @return void
* @exception BusinessException
* @since NC5.0
*/
private RefValueVO getRefValueVO(Object originValue, Object newValue) {
if (originValue instanceof RefValueVO) {
return (RefValueVO) originValue;
}
RefValueVO valueVO = new RefValueVO();
valueVO.setOriginValue(originValue);
valueVO.setNewValue(newValue);
return valueVO;
} /**
* @return 返回 m_pk_user。
*/
public String getPk_user() {
if (m_pk_user == null) {
m_pk_user = modelHandler.getPk_user();
}
return m_pk_user;
} /**
* 只添加不重复的监听类。
* <p>
* <strong>最后修改人:sxj</strong>
* <p>
* <strong>最后修改日期:2006-8-10</strong>
* <p>
*
* @param
* @return void
* @exception BusinessException
* @since NC5.0
*/
public void addChangeListener(ChangeListener l) { if (eventListMap.get(l) == null) {
eListenerList.add(ChangeListener.class, l);
eventListMap.put(l, l);
}
} public void removeChangeListener(ChangeListener l) {
eListenerList.add(ChangeListener.class, l);
eventListMap.remove(l);
} public ChangeListener[] getChangeListeners() {
return (ChangeListener[]) eListenerList
.getListeners(ChangeListener.class);
} public void fireChange() {
Object[] listeners = eListenerList.getListenerList();
for (int i = listeners.length - 2; i >= 0; i -= 2) {
if (listeners[i] == ChangeListener.class) {
if (changeEvent == null) {
changeEvent = new ChangeEvent(this);
}
((ChangeListener) listeners[i + 1]).stateChanged(changeEvent);
}
}
} /**
* 显示字段列表 创建日期:(01-4-4 0:57:23)
*
* @return java.lang.String
*/
public java.lang.String[] getFieldCode() {
return m_strFieldCode;
} /**
* 显示字段中文名 创建日期:(01-4-4 0:57:23)
*
* @return java.lang.String
*/
public java.lang.String[] getFieldName() {
return m_strFieldName;
} /**
* 此处插入方法说明。 创建日期:(2001-8-31 18:59:51)
*
* @return java.lang.String
*/
public String getGroupCode() {
return IRefConst.GROUPCORP;
} /**
* 主键字段名
*
* @return java.lang.String
*/
public String getPkFieldCode() {
return m_strPkFieldCode;
} /**
* 参照标题 创建日期:(01-4-4 0:57:23)
*
* @return java.lang.String
*/ /**
* 参照数据库表或者视图名 创建日期:(01-4-4 0:57:23)
*
* @return java.lang.String
*/
public String getTableName() {
return m_strTableName;
} /**
* 此处插入方法说明。 创建日期:(01-3-22 13:22:29)
*
* @param newFieldCode
* java.lang.String[]
*/
public void setFieldCode(java.lang.String[] newFieldCode) {
getHtCodeIndex().clear();
m_strFieldCode = newFieldCode;
} /**
* 此处插入方法说明。 创建日期:(01-3-22 13:22:29)
*
* @param newFieldName
* java.lang.String[]
*/
public void setFieldName(java.lang.String[] newFieldName) {
m_strFieldName = newFieldName;
} /**
* 主键字段名
*/
public void setPkFieldCode(String strPkFieldCode) {
m_strPkFieldCode = strPkFieldCode;
} /**
* @return 返回 m_fun_code_DocOpen。
*/
public String getFun_code_DocOpen() {
return m_fun_code_DocOpen;
} /**
* @param docOpen
* 要设置的 m_fun_code_DocOpen。
*/
public void setFun_code_DocOpen(String docOpen) {
m_fun_code_DocOpen = docOpen;
} /**
* @return 返回 m_intFieldType。
*/
public int[] getIntFieldType() {
return m_intFieldType;
} /**
* @param fieldType
* 要设置的 m_intFieldType。
*/
public void setIntFieldType(int[] fieldType) {
m_intFieldType = fieldType;
} /**
* @return 返回 isGroupAssignData。
*/
public boolean isGroupAssignData() {
return isGroupAssignData;
} /**
* @param isGroupAssignData
* 要设置的 isGroupAssignData。
*/
public void setGroupAssignData(boolean isGroupAssignData) {
this.isGroupAssignData = isGroupAssignData;
} public String getRefDataCacheKey() {
String key = refDataCachekeyPreStr
+ getDataPowerSqlKey(getTableName(), getRefNodeName()); return key;
} public String getFieldShowName(String fieldCode) {
int index = getFieldIndex(fieldCode);
if (index < 0 || index > getFieldName().length - 1) {
return null;
} else {
return getFieldName()[index];
}
} /**
* @return 返回 ddReaderVO。
*/
private DDReaderVO getDdReaderVO() {
return ddReaderVO;
} /**
* @param ddReaderVO
* 要设置的 ddReaderVO。
*/
public void setDdReaderVO(String tableName, String[] fieldnames) {
if (ddReaderVO == null) {
ddReaderVO = new DDReaderVO();
}
ddReaderVO.setTableName(tableName);
ddReaderVO.setFieldNames(fieldnames);
} /**
* @return 返回 resourceID。
*/
public int getResourceID() {
return resourceID;
} /**
* @param resourceID
* 要设置的 resourceID。
*/
public void setResourceID(int resourceID) {
this.resourceID = resourceID;
} /**
* @return 返回 isPKMatch。
*/
public boolean isPKMatch() {
return isPKMatch;
} /**
* @param isPKMatch
* 要设置的 isPKMatch。
*/
public void setPKMatch(boolean isPKMatch) {
this.isPKMatch = isPKMatch;
} /**
* @return 返回 isIncludeBlurPart。
*/
public boolean isIncludeBlurPart() {
return isIncludeBlurPart;
} /**
* @param isIncludeBlurPart
* 要设置的 isIncludeBlurPart。
*/
public void setIncludeBlurPart(boolean isIncludeBlurPart) {
this.isIncludeBlurPart = isIncludeBlurPart;
} /**
* @return 返回 envWherePart。
*/
private String getEnvWherePart() {
return envWherePart;
} /**
* 设置条件时,要利用参照的环境变量的方法去拼条件,否则无法根据环境变量的变化而变化。 例如:
*
* @param envWherePart
* 要设置的 envWherePart。
*/
public void setEnvWherePart(String envWherePart) {
this.envWherePart = envWherePart;
} /**
*
*/
private void addEnvWherePart(StringBuffer whereClause) {
// setpk ,不包含此条件
if (isPKMatch()) {
return;
}
String wherePart = getEnvWherePart();
if (wherePart != null) { whereClause.append(" and (").append(wherePart).append(") "); } } /**
* @return 返回 bdinfoVO。
*/
public BdinfoVO getBdinfoVO() {
if (bdinfoVO == null && !isInitBDinfoVO) {
bdinfoVO = modelHandler.getBdInfoVObyName(getRefNodeName());
isInitBDinfoVO = true;
}
return bdinfoVO;
} /**
* @param bdinfoVO
* 要设置的 bdinfoVO。
*/
public void setBdinfoVO(BdinfoVO bdinfoVO) {
this.bdinfoVO = bdinfoVO;
isInitBDinfoVO = true;
} /**
* @return Returns the isChangeTableSeq.
*/
public boolean isChangeTableSeq() {
return isChangeTableSeq;
} /**
* @param isChangeTableSeq
* The isChangeTableSeq to set.
*/
public void setChangeTableSeq(boolean isChangeTableSeq) {
this.isChangeTableSeq = isChangeTableSeq;
} /**
* @return 返回 isMaintainButtonEnabled。
*/
public boolean isMaintainButtonEnabled() {
return isMaintainButtonEnabled;
} /**
* @param isMaintainButtonEnabled
* 要设置的 isMaintainButtonEnabled。
*/
public void setMaintainButtonEnabled(boolean isMaintainButtonEnabled) {
this.isMaintainButtonEnabled = isMaintainButtonEnabled;
} /**
* @param dataPowerPK_column
* 要设置的 dataPowerPK_column。
*/
public void setDataPowerResourceColumn(String dataPowerResourceColumn) {
this.dataPowerResourceColumn = dataPowerResourceColumn;
} /**
* @return 返回 refCardInfoComponentImplClass。
*/
public String getRefCardInfoComponentImplClass() {
return refCardInfoComponentImplClass;
} /**
* @param refCardInfoComponentImplClass
* 要设置的 refCardInfoComponentImplClass。
*/
public void setRefCardInfoComponentImplClass(
String refCardInfoComponentImplClass) {
this.refCardInfoComponentImplClass = refCardInfoComponentImplClass;
} public String getRefShowNameField() {
return refShowNameField == null ? getRefNameField() : refShowNameField;
} public void setRefShowNameField(String refShowNameField) {
this.refShowNameField = refShowNameField;
} // 初始化自定义项字段
// defFields.length==0表示初始化过了。
public String[] getDefFields() {
return defFields;
} /**
* 栏目显示的自定义项
*
* @return
*/
public String[] getShowDefFields() {
String[] defFieldNames = null;
if (getDefFields() == null || getDefFields().length == 0) {
return defFieldNames;
} Map<String, RefcolumnVO> map = modelHandler.getRefColumnVOsMap(); List<String> list = new ArrayList<String>();
for (int i = 0; i < getDefFields().length; i++) {
if (map.get(getDefFields()[i]) != null
&& map.get(getDefFields()[i]).getIscolumnshow()
.booleanValue()) {
list.add(getDefFields()[i]);
}
} if (list.size() > 0) {
String[] fieldNames = new String[list.size()];
list.toArray(fieldNames);
defFieldNames = fieldNames;
} return defFieldNames;
} public void setDefFields(String[] defFields) {
this.defFields = defFields;
} public Map<String, Integer> getAlignMap() {
return alignMap;
} private void setAlignMap(Map<String, Integer> alignMap) {
this.alignMap = alignMap;
} /**
* 栏目对齐方式
*
* @param fieldName
* 栏目名称 要对齐的列(列名要和fieldCodes中的一致)
* @param alignment
* 对齐方式 常量见SwingConstants,例如 SwingConstants.RIGHT
*/
public void addFieldAlignment(String fieldName, int alignment) {
if (getAlignMap() == null) {
setAlignMap(new HashMap<String, Integer>());
}
getAlignMap().put(fieldName, new Integer(alignment));
} public boolean canUseDB() {
return modelHandler.canUseDB();
} public Vector getCacheValue(String sql) {
return modelHandler.getCacheValue(sql);
} public Vector queryMain(String dsName, String sql) {
return modelHandler.queryMain(dsName, sql);
} public void removeCacheValue(String sql) {
modelHandler.removeCache(sql);
} public void setCacheValue(String sql, Vector value) {
modelHandler.setCacheValue(sql, value);
} public String getCodeRuleFromPara(String orgTypeCode, String pk_GlOrgBook,
String codingRule, UFBoolean boolean1) {
return modelHandler.getCodeRuleFromPara(orgTypeCode, pk_GlOrgBook,
codingRule, boolean1);
} public String getCodeRuleFromPara(String codingRule) {
return modelHandler.getCodeRuleFromPara(codingRule);
} public String getNumberCodingRule(String codingRule) {
return modelHandler.getNumberCodingRule(codingRule);
} public String[] getDefFields(String[] fieldCode) {
return modelHandler.getDefFields(fieldCode);
} public String getPara1() {
return para1;
} public void setPara1(String para1) {
this.para1 = para1;
} public String getPara2() {
return para2;
} public void setPara2(String para2) {
this.para2 = para2;
} public String getPara3() {
return para3;
} public void setPara3(String para3) {
this.para3 = para3;
} protected IRefModelHandler getModelHandler() {
return modelHandler;
} public String getUiControlComponentClassName() {
return uiControlComponentClassName;
} public void setUiControlComponentClassName(
String uiControlComponentClassName) {
this.uiControlComponentClassName = uiControlComponentClassName;
} /**
* 界面控制组件变化时调用该方法,在子类实现具体业务逻辑。
*
* @param eventData
* 暂时返回发生变化的组件名称
*/
public void UiControlClassValueChanged(UIControlClassEvent event) { } public String getRefDocEditClassName() {
return refDocEditClassName;
} public void setRefDocEditClassName(String refDocEditClassName) {
this.refDocEditClassName = refDocEditClassName;
} public boolean isShowField(String fieldName) {
boolean isShowField = false;
int[] showColumns = getShownColumns();
int index = getFieldIndex(fieldName);
for (int i = 0; i < showColumns.length; i++) {
if (showColumns[i] == index) {
isShowField = true;
break;
}
}
return isShowField;
} public String[] getShowFields() {
String[] showFields = new String[getShownColumns().length];
int fieldCodeLength = getFieldCode().length;
for (int i = 0; i < showFields.length; i++) {
int index = getShownColumns()[i];
if (index < fieldCodeLength) {
showFields[i] = getFieldCode()[index];
} else {
Logger.debug("参照栏目信息有误,请点击参照栏目中的重置按钮。该参照为:" + getRefNodeName());
}
}
return showFields;
} public boolean isHiddenField(String fieldCode) { return hiddenFieldList.contains(fieldCode);
} // 输入时是否大小写敏感
public boolean isCaseSensitve() {
return isCaseSensitve;
} public void setCaseSensive(boolean isCaseSensitve) {
this.isCaseSensitve = isCaseSensitve;
} public Vector getAllColumnNames() { if (vecAllColumnNames != null) {
return vecAllColumnNames;
} vecAllColumnNames = new Vector();
if (getFieldCode() != null && getFieldCode().length > 0) {
if (getFieldName() == null || getFieldName().length == 0) {
for (int i = 0; i < getFieldCode().length; i++) {
vecAllColumnNames.addElement(getFieldCode()[i]);
}
} else {
if (getFieldName().length >= getFieldCode().length) {
for (int i = 0; i < getFieldCode().length; i++) {
vecAllColumnNames.addElement(getFieldName()[i]);
}
} else {
for (int i = 0; i < getFieldName().length; i++) {
vecAllColumnNames.addElement(getFieldName()[i]);
}
for (int i = getFieldName().length; i < getFieldCode().length; i++) {
vecAllColumnNames.addElement(getFieldCode()[i]);
}
}
} } if (getHiddenFieldCode() != null)
for (int i = 0; i < getHiddenFieldCode().length; i++) {
vecAllColumnNames.addElement(getHiddenFieldCode()[i]);
} // 加入动态列
if (isDynamicCol()) { String[] dynamicColNames = getDynamicFieldNames();
if (getDynamicFieldNames() != null) { for (int i = 0; i < dynamicColNames.length; i++) { // 加入到显示的列名中
vecAllColumnNames.addElement(dynamicColNames[i]);
}
}
}
return vecAllColumnNames;
} protected String getRefCacheSqlKey() { return getRefSql() == null ? getClass().getName() : getRefSql();
}
}

NC表型参照类的更多相关文章

  1. NC 自定义参照类

    package nc.ui.hzctr.costctr.ref; import nc.ui.bd.ref.AbstractRefModel; import nc.vo.pubapp.pattern.p ...

  2. 用友UAP NC 单据节点_打开参照字段的问题_从打不开参照放大镜_到成功打开了但是取不到值_到修复成功

    项目的这个功能是17年开发的,但是当时没有测试通过,今年拿出来测试(通过后会上线). 有两个表数据一开始只打算用来计算时查询,没打算放到目标单据中做表体参照字段.后来改细节问题后放到目标单据中做参照字 ...

  3. NC开发笔记指导

    修改端口 InvocationInfoProxy.getInstance().get().getUserCode(); 前台 Nchome F:\JAVA\Projects\ERPEHROA\ufid ...

  4. Java日期操作工具类

    /** * 格式化日期显示格式 * * @param sdate * 原始日期格式 s - 表示 "yyyy-mm-dd" 形式的日期的 String 对象 * @param fo ...

  5. PYTHON-面向对象 类 绑定方法

    面向对象三大特性(*****) 1继承 1. 什么是继承 继承是一种新建类的方式,新建的类称之为子类/派生类,被继承的类称之为父类/基类/超类 继承与现实生活中的继承一个意思 (例如 小明继承小明他爹 ...

  6. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  7. python面向编程:类继承、继承案例、单继承下属性查找、super方法

    一.类的继承 二.基于继承解决类与类的代码冗余问题 三.在单继承背景下属性的查找 四.super的方法 一.类的继承 1.什么是继承? 在程序中继承是一种新建子类的方法的方式,新创建的类成为子类\派生 ...

  8. NC57,NC63-NC二开经验总结

    版主2010级市场营销专业本科生 2013年8月入达内培训Java相关技术 12月入职,做用友NC的二次开发工作 2015年4月离职,4中下旬入职一家互联网金融企业 下面是做NC二开期间积累的一些常用 ...

  9. PHP代码编写规范

    一. 变量命名 a) 所有字母都使用小写 b) 首字母根据变量值类型指定 i. 整数i ii. 浮点数f iii. 字符串s iv. 布尔值b v. 数组a vi. 对象o vii. 资源r viii ...

随机推荐

  1. AJAX— 异步传输

    AJAX异步传输 AJAX— 异步传输 AJAX浏览器与服务器异步传输数据,通过异步请求大大减少数据信息访问量,通俗:AJAX对局部刷新而不是对整个页面刷新,AJAX使得程序更快,更友好. AJAX处 ...

  2. 45种Javascript技巧大全(转)

      6.小心使用typeof.instanceof和constructor typeof:不要忘了typeof null返回object,而大多数对象,typeof(Array, Date, and ...

  3. 【转】 bash简介及通配符、扩展通配符 shopt -s extglob

    http://www.rhce.cc/?p=1005 当我们执行一些命令的时候,很多的命令是由bash提供的.如果我们想知道某个命令是否是由bash内置的命令的话,我们可以使用type bash内置命 ...

  4. HW7.11

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  5. Android-Native-Server 启动和注册详细分析

    Android-Native-Server 启动和注册详细分析     以mediaService为实例来讲解: mediaService的启动入口 是一个 传统的  main()函数 源码位置E:\ ...

  6. 使用Intent在活动之间穿梭(《第一行代码》读书笔记)

    以下全是个人理解//瞎扯 其实活动理解理解起来就像一个个函数 那么Intent就是调用函数和参数传递 可以有无参,仅仅是调用 Intent intent = new Intent(A.this, B. ...

  7. 【AwayPhysics学习笔记】:Away3D物理引擎的简介与使用

    首先我们要了解的是AwayPhysics这个物理引擎并不是重头开始写的新物理引擎,而是使用Flascc技术把一个已经很成熟的Bullet物理引擎引入到了Flash中,同时为了让as3可以使用这个C++ ...

  8. SQLite使用教程5 分离数据库

    http://www.runoob.com/sqlite/sqlite-detach-database.html SQLite 分离数据库 SQLite的 DETACH DTABASE 语句是用来把命 ...

  9. 记一次js中和php中的字符串长度计算截取的终极问题和完美解决方案

    1.js是用unicode算长度的,比如单字节的算1,中文也算1,但是正常我们想让两个单字节算1,如何计算这个长度 第一种解决方案,用正则,如下 /[\u0x00-\u0xff]/,天真的想着,这样就 ...

  10. iOS调用系统通讯录获取姓名电话号码(转)

    原文地址:http://blog.csdn.net/idoshi201109/article/details/46007125 OS调用系统通讯录获取姓名电话号码 (iOS 8.0 Xcode6.3可 ...