/// <summary>
        ///  Load Table/Column Info
        /// baseLanguage in English
        /// </summary>
        /// <param name="baseLanguage"></param>
        private void LoadInfo(bool baseLanguage)
        {
            List <POInfoColumn> list = new List <POInfoColumn>(20);

            StringBuilder sql = new StringBuilder();

            sql.Append("SELECT t.TableName, c.ColumnName,c.AD_Reference_ID,"       //  1..3
                       + "c.IsMandatory,c.IsUpdateable,c.DefaultValue,"            //  4..6
                       + "e.Name,e.Description, c.AD_Column_ID, "                  //  7..9
                       + "c.IsKey,c.IsParent, "                                    //	10..11
                       + "c.AD_Reference_Value_ID, vr.Code, "                      //	12..13
                       + "c.FieldLength, c.ValueMin, c.ValueMax, c.IsTranslated, " //	14..17
                       + "t.AccessLevel, c.ColumnSQL, c.IsEncrypted ");            //	18..20
            sql.Append("FROM AD_Table t"
                       + " INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID)"
                       + " LEFT OUTER JOIN AD_Val_Rule vr ON (c.AD_Val_Rule_ID=vr.AD_Val_Rule_ID)"
                       + " INNER JOIN AD_Element");
            if (!baseLanguage)
            {
                sql.Append("_Trl");
            }
            sql.Append(" e "
                       + " ON (c.AD_Element_ID=e.AD_Element_ID) "
                       + "WHERE t.AD_Table_ID=" + _AD_Table_ID + " "
                       + " AND c.IsActive='Y'");
            if (!baseLanguage)
            {
                sql.Append(" AND e.AD_Language='").Append(Env.GetAD_Language(m_ctx)).Append("'");
            }

            IDataReader dr = null;

            try
            {
                dr = DB.ExecuteReader(sql.ToString(), null, null);
                while (dr.Read())
                {
                    if (m_TableName == "")
                    {
                        m_TableName = Util.GetValueOfString(dr[0]);
                    }
                    string ColumnName      = Util.GetValueOfString(dr[1]);
                    int    AD_Reference_ID = Util.GetValueOfInt(dr[2]);
                    bool   IsMandatory     = "Y".Equals(dr[3]);
                    bool   IsUpdateable    = "Y".Equals(dr[4]);
                    string DefaultLogic    = Util.GetValueOfString(dr[5]);
                    string Name            = Util.GetValueOfString(dr[6]);
                    string Description     = Util.GetValueOfString(dr[7]);
                    int    AD_Column_ID    = Util.GetValueOfInt(dr[8]);
                    bool   IsKey           = "Y".Equals(Util.GetValueOfString(dr[9]));
                    if (IsKey)
                    {
                        m_hasKeyColumn = true;
                    }
                    bool   IsParent = "Y".Equals(Util.GetValueOfString(dr[10]));
                    int    AD_Reference_Value_ID = Util.GetValueOfInt(dr[11]);
                    string ValidationCode        = Util.GetValueOfString(dr[12]);
                    int    FieldLength           = Util.GetValueOfInt(dr[13]);
                    string ValueMin     = Util.GetValueOfString(dr[14]);
                    string ValueMax     = Util.GetValueOfString(dr[15]);
                    bool   IsTranslated = "Y".Equals(Util.GetValueOfString(dr[16]));
                    //
                    m_AccessLevel = Util.GetValueOfString(dr[17]);
                    String ColumnSQL   = Util.GetValueOfString(dr[18]);
                    bool   IsEncrypted = "Y".Equals(Util.GetValueOfString(dr[19]));

                    POInfoColumn col = new POInfoColumn(
                        AD_Column_ID, ColumnName, ColumnSQL, AD_Reference_ID,
                        IsMandatory, IsUpdateable,
                        DefaultLogic, Name, Description,
                        IsKey, IsParent,
                        AD_Reference_Value_ID, ValidationCode,
                        FieldLength, ValueMin, ValueMax,
                        IsTranslated, IsEncrypted);
                    list.Add(col);
                }
                dr.Close();
                dr = null;
            }
            catch (Exception e)
            {
                if (dr != null)
                {
                    dr.Close();
                    dr = null;
                }
                VLogger.Get().Log(Level.SEVERE, sql.ToString(), e);
            }
            m_columns = list.ToArray();
        }
        /// <summary>
        ///  Validate Content
        /// </summary>
        /// <param name="index"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public string Validate(int index, Object value)
        {
            if (index < 0 || index >= m_columns.Length)
            {
                return("RangeError");
            }
            //	Mandatory (i.e. not null
            if (m_columns[index].IsMandatory && value == null)
            {
                return("IsMandatory");
            }
            if (value == null)
            {
                return(null);
            }

            //	Length ignored
            POInfoColumn column = m_columns[index];

            //
            //if (column.ValueMin != null && column.ValueMin != "")
            //{
            //    decimal? value_BD = null;
            //    try
            //    {
            //        if (column.ValueMin_BD != 0)
            //            value_BD = decimal.Parse(value.ToString());
            //    }
            //    catch { }
            //    //	Both are Numeric
            //    if (column.ValueMin_BD != 0 && value_BD != null)
            //    {	//	error: 1 - 0 => 1  -  OK: 1 - 1 => 0 & 1 - 10 => -1
            //        int comp = column.ValueMin_BD.CompareTo(value_BD);
            //        if (comp > 0)
            //        {
            //            //return "MinValue=" + column.ValueMin_BD
            //            //    + "(" + column.ValueMin + ")"
            //            //    + " - compared with Numeric Value=" + value_BD + "(" + value + ")"
            //            //    + " - results in " + comp;
            //            return Msg.GetMsg(m_ctx, "ExceedMinValue", new Object[] { value_BD, column.ValueMin_BD });
            //        }
            //    }
            //    else	//	String
            //    {
            //        int comp = column.ValueMin.CompareTo(value.ToString());
            //        if (comp > 0)
            //        {
            //            //return "MinValue=" + column.ValueMin
            //            //  + " - compared with String Value=" + value
            //            //  + " - results in " + comp;
            //            return Msg.GetMsg(m_ctx, "ExceedMinValue", new Object[] { value, column.ValueMin });
            //        }
            //    }
            //}
            //if (column.ValueMax != null && column.ValueMax != "")
            //{
            //    decimal? value_BD = null;
            //    try
            //    {
            //        if (column.ValueMax_BD != 0)
            //            value_BD = decimal.Parse(value.ToString());
            //    }
            //    catch { }
            //    //	Both are Numeric
            //    if (column.ValueMax_BD != 0 && value_BD != null)
            //    {	//	error 12 - 20 => -1  -  OK: 12 - 12 => 0 & 12 - 10 => 1
            //        int comp = column.ValueMax_BD.CompareTo(value_BD);
            //        if (comp < 0)
            //        {
            //            //return "MaxValue=" + column.ValueMax_BD + "(" + column.ValueMax + ")"
            //            //  + " - compared with Numeric Value=" + value_BD + "(" + value + ")"
            //            //  + " - results in " + comp;
            //            return Msg.GetMsg(m_ctx, "ExceedMaxValue", new Object[] { value_BD, column.ValueMax_BD });
            //        }
            //    }
            //    else	//	String
            //    {
            //        int comp = column.ValueMax.CompareTo(value.ToString());
            //        if (comp < 0)
            //        {
            //            return Msg.GetMsg(m_ctx, "ExceedMaxValue", new Object[] { value, column.ValueMax });
            //            //return "MaxValue=" + m_columns[index].ValueMax
            //            //  + " - compared with String Value=" + value
            //            //  + " - results in " + comp;
            //        }
            //    }
            //}
            return(null);
        }  //  validate