Esempio n. 1
0
        /// <summary>
        /// 根据实体属性查询实体
        /// </summary>
        /// <param name="pTableInfo">表信息</param>
        /// <param name="pDaoConstructorParams">Dao构造器参数</param>
        /// <param name="pEntityProperty">实体属性字典</param>
        /// <returns>查询结果</returns>
        public static object[] QueryByEntity(ETCLTable pTableInfo, object[] pDaoConstructorParams, Dictionary <string, object> pEntityProperty)
        {
            try
            {
                string pDaoDLL           = pTableInfo.DAOAssemblyName;
                string pDaoClassFullName = pTableInfo.DAOName;
                string pEntityDLL        = pTableInfo.EntityAssemblyName;
                string pEntityFullName   = pTableInfo.EntityName;
                if (string.IsNullOrWhiteSpace(pDaoDLL))
                {
                    pDaoDLL = "TenantPlatform.DataAccess.dll";
                }
                if (pDaoClassFullName == null)
                {
                    pDaoClassFullName = "JIT.TenantPlatform.DataAccess." + pTableInfo.TableName + "DAO";
                }
                if (string.IsNullOrWhiteSpace(pEntityDLL))
                {
                    pEntityDLL = "TenantPlatform.Entity.dll";
                }
                if (pEntityFullName == null)
                {
                    pEntityFullName = "JIT.TenantPlatform.Entity." + pTableInfo.TableName + "Entity";
                }

                string assemblyPath;
                if (System.Environment.CurrentDirectory == AppDomain.CurrentDomain.BaseDirectory)
                {//Winform
                    assemblyPath = AppDomain.CurrentDomain.BaseDirectory;
                }
                else
                {//Web
                    assemblyPath = AppDomain.CurrentDomain.BaseDirectory + "Bin/";
                }

                object oDAO    = JIT.Utility.Reflection.DynamicReflectionHandler.CreateInstance(assemblyPath + pDaoDLL, pDaoClassFullName, pDaoConstructorParams);
                object oEntity = JIT.Utility.Reflection.DynamicReflectionHandler.CreateInstance(assemblyPath + pEntityDLL, pEntityFullName, null);
                foreach (var item in pEntityProperty)
                {
                    JIT.Utility.Reflection.DynamicReflectionHandler.SetProperty(oEntity, item.Key, item.Value);
                }
                object oResult = JIT.Utility.Reflection.DynamicReflectionHandler.CallFunction(oDAO, "QueryByEntity", new object[] { oEntity, null });
                if (oResult == null)
                {
                    return(null);
                }
                object[] oResults = oResult as object[];
                return(oResults);
            }
            catch (System.Reflection.TargetInvocationException ex)
            {
                Loggers.Exception(new ExceptionLogInfo(ex.InnerException));
                throw ex.InnerException;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 创建Entity到数据库表
        /// </summary>
        /// <param name="pTableInfo">表信息</param>
        /// <param name="pDaoConstructorParams">Dao构造器参数</param>
        /// <param name="object">实体对象</param>
        /// <param name="pTran">数据库事务</param>
        /// <returns>创建结果</returns>
        public static object CreateEntity(ETCLTable pTableInfo, object[] pDaoConstructorParams, object pEntity, IDbTransaction pTran)
        {
            try
            {
                string pDaoDLL           = pTableInfo.DAOAssemblyName;
                string pDaoClassFullName = pTableInfo.DAOName;
                string pEntityDLL        = pTableInfo.EntityAssemblyName;
                string pEntityFullName   = pTableInfo.EntityName;
                if (string.IsNullOrWhiteSpace(pDaoDLL))
                {
                    pDaoDLL = "TenantPlatform.DataAccess.dll";
                }
                if (string.IsNullOrEmpty(pDaoClassFullName))
                {
                    pDaoClassFullName = "JIT.TenantPlatform.DataAccess." + pTableInfo.TableName + "DAO";
                }
                if (string.IsNullOrEmpty(pEntityDLL))
                {
                    pEntityDLL = "TenantPlatform.Entity.dll";
                }
                if (string.IsNullOrEmpty(pEntityFullName))
                {
                    pEntityFullName = "JIT.TenantPlatform.Entity." + pTableInfo.TableName + "Entity";
                }

                string assemblyPath;
                if (System.Environment.CurrentDirectory == AppDomain.CurrentDomain.BaseDirectory)
                {//Winform
                    assemblyPath = AppDomain.CurrentDomain.BaseDirectory;
                }
                else
                {//Web
                    assemblyPath = AppDomain.CurrentDomain.BaseDirectory + "Bin/";
                }
                object oDAO = JIT.Utility.Reflection.DynamicReflectionHandler.CreateInstance(assemblyPath + pDaoDLL, pDaoClassFullName, pDaoConstructorParams);
                return(JIT.Utility.Reflection.DynamicReflectionHandler.CallFunction(oDAO, "Create", new object[] { pEntity, pTran }));
            }
            catch (System.Reflection.TargetInvocationException ex)
            {
                Loggers.Exception(new ExceptionLogInfo(ex.InnerException));
                throw ex.InnerException;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 执行检查
        /// </summary>
        /// <param name="pPropertyValue">待检查的数据值</param>
        /// <param name="pPropertyText">此数据的属性名称(列描述)</param>
        /// <param name="pRowData">当前数据项的信息</param>
        /// <param name="oResult">检查结果</param>
        /// <returns>TRUE:通过检查,FALSE:未通过检查。</returns>
        public bool Process(object pPropertyValue, string pPropertyText, IETCLDataItem pRowData, ref IETCLResultItem oResult)
        {
            bool isPass = true;

            if (pPropertyValue == null || string.IsNullOrWhiteSpace(pPropertyValue.ToString()))//空值不检查依赖项
            {
                return(true);
            }

            //检查当前XLS中是否有此依赖表
            ETCLTable referenceTable = this._etclWorksheet.GetTableByName(this._etclColumn.ReferenceTableName);

            if (referenceTable == null)
            {
                throw new ETCLException(200, string.Format("未找到关联表的相关定义,请修改XML配置。列名:{0},关联表:{1}", this._etclColumn.ColumnName, this._etclColumn.ReferenceTableName));
            }

            //通过反射从数据库中读取此依赖表信息
            if (!_dictCachedReference.ContainsKey(this._etclColumn.ReferenceTableName))
            {
                object[] oTempEntities = Reflection.DynamicReflectionHandler.QueryAll(referenceTable, new object[] { this._userInfo });
                _dictCachedReference.Add(this._etclColumn.ReferenceTableName, oTempEntities);
            }
            object[] oEntities = _dictCachedReference[this._etclColumn.ReferenceTableName];
            foreach (var entityItem in oEntities)
            {
                object oTempValue = Reflection.DynamicReflectionHandler.GetProperty(entityItem, this._etclColumn.ReferenceTextColumnName);
                if (oTempValue.Equals(pPropertyValue))
                {
                    isPass          = false;
                    oResult         = new ETCLCommonResultItem();
                    oResult.OPType  = OperationType.ForeignKeyDependence;
                    oResult.Message = string.Format("[{数据项:{0}}]的数据在关联表中不存在.", pPropertyText);
                }
            }
            return(isPass);
        }
Esempio n. 4
0
        ///// <summary>
        ///// 所有转换器
        ///// </summary>
        //protected Dictionary<ITransformer, List<string>> AllTransformer;

        /// <summary>
        /// 构造器
        /// </summary>
        /// <param name="pUserInfo">用户信息</param>
        public CommonExcelETCL(BasicUserInfo pUserInfo)
        {
            //从XML加载列及模板信息
            this._currentBusinessInfo      = new ETCLTemplateInfo();
            this._currentBusinessInfo.Lang = (int)Reflection.DynamicReflectionHandler.GetProperty(pUserInfo, "Lang");
            this.CurrentUserInfo           = pUserInfo;
            XmlDocument xmlDoc  = new XmlDocument();
            string      xmlPath = AppDomain.CurrentDomain.BaseDirectory + "\\ETCLConfig.xml";

            xmlDoc.Load(xmlPath);
            List <XmlNode> lstTemplates = XMLHandler.GetNodesByProperty(xmlDoc, "JitETCLTemplates/JitETCLTemplate", "ClientID", pUserInfo.ClientID);

            if (this._currentBusinessInfo.Lang == 2)
            {
                this._currentBusinessInfo.TemplateName = lstTemplates[0].Attributes["TemplateNameEn"].Value;
            }
            else
            {
                this._currentBusinessInfo.TemplateName = lstTemplates[0].Attributes["TemplateName"].Value;
            }
            this._currentBusinessInfo.TemplateDescription = lstTemplates[0].Attributes["TemplateDescription"].Value;
            this._currentBusinessInfo.WorkSheets          = new List <ETCLWorkSheetInfo>();
            //加载Worksheets
            foreach (XmlNode worksheetItem in lstTemplates[0].ChildNodes)
            {
                ETCLWorkSheetInfo worksheetInfo = new ETCLWorkSheetInfo();
                worksheetInfo.Transformers = new List <ITransformer>();
                worksheetInfo.Transformers.Add(new DefaultTransformer(worksheetInfo));
                worksheetInfo.Tables = new List <ETCLTable>();
                if (this._currentBusinessInfo.Lang == 2)
                {
                    worksheetInfo.WorkSheetName = worksheetItem.Attributes["WorkSheetNameEn"].Value;
                }
                else
                {
                    worksheetInfo.WorkSheetName = worksheetItem.Attributes["WorkSheetName"].Value;
                }
                worksheetInfo.WorkSheetDescription = worksheetItem.Attributes["WorkSheetDescription"].Value;
                worksheetInfo.Index = this._currentBusinessInfo.WorkSheets.Count;
                this._currentBusinessInfo.WorkSheets.Add(worksheetInfo);

                //加载 当前Worksheet所涉及到的数据表
                foreach (XmlNode tableItem in worksheetItem.ChildNodes)
                {
                    ETCLTable etclTable = new ETCLTable();
                    etclTable.Columns   = new List <ETCLColumn>();
                    etclTable.TableName = tableItem.Attributes["TableName"].Value;
                    if (this._currentBusinessInfo.Lang == 2)
                    {
                        etclTable.TableDesc = tableItem.Attributes["TableDescEn"].Value;
                    }
                    else
                    {
                        etclTable.TableDesc = tableItem.Attributes["TableDesc"].Value;
                    }
                    if (tableItem.Attributes["ReferenceOnly"] != null && !string.IsNullOrWhiteSpace(tableItem.Attributes["ReferenceOnly"].Value))
                    {
                        etclTable.ReferenceOnly = Convert.ToInt32(tableItem.Attributes["ReferenceOnly"].Value);
                    }
                    if (tableItem.Attributes["DAOAssemblyName"] != null)
                    {
                        etclTable.DAOAssemblyName = tableItem.Attributes["DAOAssemblyName"].Value;
                    }
                    if (tableItem.Attributes["EntityAssemblyName"] != null)
                    {
                        etclTable.EntityAssemblyName = tableItem.Attributes["EntityAssemblyName"].Value;
                    }
                    if (tableItem.Attributes["DAOName"] != null)
                    {
                        etclTable.DAOName = tableItem.Attributes["DAOName"].Value;
                    }
                    if (tableItem.Attributes["EntityName"] != null)
                    {
                        etclTable.EntityName = tableItem.Attributes["EntityName"].Value;
                    }
                    etclTable.ReferenceDepth = 0;
                    etclTable.Worksheet      = worksheetInfo;
                    etclTable.Index          = worksheetInfo.Tables.Count;
                    etclTable.Loaders        = new List <ILoader>();
                    etclTable.Loaders.Add(new DefaultLoader());
                    worksheetInfo.Tables.Add(etclTable);

                    //加载表中的列
                    foreach (XmlNode columnItem in tableItem.ChildNodes)
                    {
                        ETCLColumn etclColumnInfo = new ETCLColumn();
                        if (columnItem.Attributes["ColumnName"] != null)
                        {
                            etclColumnInfo.ColumnName = columnItem.Attributes["ColumnName"].Value;
                        }


                        if (this._currentBusinessInfo.Lang == 2)
                        {
                            if (columnItem.Attributes["ColumnTextEn"] != null)
                            {
                                etclColumnInfo.ColumnText = columnItem.Attributes["ColumnTextEn"].Value;
                            }
                        }
                        else
                        {
                            if (columnItem.Attributes["ColumnText"] != null)
                            {
                                etclColumnInfo.ColumnText = columnItem.Attributes["ColumnText"].Value;
                            }
                        }
                        if (columnItem.Attributes["ColumnType"] != null)
                        {
                            etclColumnInfo.ColumnType = columnItem.Attributes["ColumnType"].Value;
                        }
                        if (columnItem.Attributes["Visible"] != null)
                        {
                            if (!string.IsNullOrEmpty(columnItem.Attributes["Visible"].Value))
                            {
                                etclColumnInfo.Visible = columnItem.Attributes["Visible"].Value != "0";
                            }
                        }
                        if (columnItem.Attributes["Nullable"] != null)
                        {
                            if (!string.IsNullOrEmpty(columnItem.Attributes["Nullable"].Value))
                            {
                                etclColumnInfo.Nullable = columnItem.Attributes["Nullable"].Value != "0";
                            }
                        }
                        if (columnItem.Attributes["Duplicatable"] != null)
                        {
                            if (!string.IsNullOrEmpty(columnItem.Attributes["Duplicatable"].Value))
                            {
                                etclColumnInfo.Duplicatable = columnItem.Attributes["Duplicatable"].Value != "0";
                            }
                        }
                        if (columnItem.Attributes["CanTermReplace"] != null)
                        {
                            if (!string.IsNullOrEmpty(columnItem.Attributes["CanTermReplace"].Value))
                            {
                                etclColumnInfo.CanTermReplace = columnItem.Attributes["CanTermReplace"].Value != "0";
                            }
                        }
                        if (columnItem.Attributes["IsLogicalField"] != null)
                        {
                            if (!string.IsNullOrEmpty(columnItem.Attributes["IsLogicalField"].Value))
                            {
                                etclColumnInfo.IsLogicalField = columnItem.Attributes["IsLogicalField"].Value != "0";
                            }
                        }
                        if (columnItem.Attributes["MaxValue"] != null)
                        {
                            etclColumnInfo.MaxValue = columnItem.Attributes["MaxValue"].Value;
                        }
                        if (columnItem.Attributes["MinValue"] != null)
                        {
                            etclColumnInfo.MinValue = columnItem.Attributes["MinValue"].Value;
                        }
                        if (columnItem.Attributes["ReferenceTableName"] != null)
                        {
                            etclColumnInfo.ReferenceTableName = columnItem.Attributes["ReferenceTableName"].Value;
                        }
                        if (columnItem.Attributes["ReferenceAdditionalCondition"] != null)
                        {
                            etclColumnInfo.ReferenceAdditionalCondition = columnItem.Attributes["ReferenceAdditionalCondition"].Value;
                        }
                        if (columnItem.Attributes["ReferenceColumnName"] != null)
                        {
                            etclColumnInfo.ReferenceColumnName = columnItem.Attributes["ReferenceColumnName"].Value;
                        }

                        if (this._currentBusinessInfo.Lang == 2)
                        {
                            if (columnItem.Attributes["ReferenceTextColumnNameEn"] != null)
                            {
                                etclColumnInfo.ReferenceTextColumnName = columnItem.Attributes["ReferenceTextColumnNameEn"].Value;
                            }
                        }
                        else
                        {
                            if (columnItem.Attributes["ReferenceTextColumnName"] != null)
                            {
                                etclColumnInfo.ReferenceTextColumnName = columnItem.Attributes["ReferenceTextColumnName"].Value;
                            }
                        }
                        etclColumnInfo.ValueCountCache = new Dictionary <object, int>();
                        etclColumnInfo.ValueCache      = new List <object>();
                        //添加默认Checker
                        etclColumnInfo.Checkers = new List <IChecker>();
                        if (etclColumnInfo.Nullable.HasValue && !etclColumnInfo.Nullable.Value)
                        {
                            etclColumnInfo.Checkers.Add(new DefaultNullValueChecker());
                        }
                        if (etclColumnInfo.Duplicatable.HasValue && !etclColumnInfo.Duplicatable.Value)
                        {
                            etclColumnInfo.Checkers.Add(new DefaultDuplicateChecker(this.CurrentUserInfo, etclTable, etclColumnInfo));
                        }
                        if (!string.IsNullOrWhiteSpace(etclColumnInfo.MaxValue) || !string.IsNullOrWhiteSpace(etclColumnInfo.MinValue))
                        {
                            etclColumnInfo.Checkers.Add(new ValueRangeChecker(etclColumnInfo));
                        }
                        etclTable.Columns.Add(etclColumnInfo);
                    }
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 执行转换,并进行文本-键转换
        /// </summary>
        /// <param name="pDataSource">从数据源取出的直接数据</param>
        /// <param name="pUserInfo">用户信息</param>
        /// <param name="oData">转换后的数据</param>
        /// <param name="oResult">抽取结果详情</param>
        /// <returns>TRUE:抽取成功,FALSE:抽取失败。</returns>
        public bool Process(DataTable pDataSource, BasicUserInfo pUserInfo, out IETCLDataItem[] oData, out IETCLResultItem[] oCheckResult)
        {
            bool isPass = true;
            List <ETCLCommonResultItem> lstCheckResult = new List <ETCLCommonResultItem>();
            ////将原始数据按表拆分到各个DataTable
            List <CommonExcelDataItem> lstDataItem = new List <CommonExcelDataItem>();

            if (pDataSource != null)
            {
                bool isAllNullOrEmpty = true;
                //移除全为null或string.Empty的记录
                for (int i = 0; i < pDataSource.Rows.Count; i++)
                {
                    isAllNullOrEmpty = true;
                    DataRow dr = pDataSource.Rows[i];
                    for (int j = 0; j < pDataSource.Columns.Count; j++)
                    {
                        if (dr[j] != DBNull.Value && dr[j].ToString().Trim() != string.Empty)
                        {
                            isAllNullOrEmpty = false;
                            break;
                        }
                    }
                    if (isAllNullOrEmpty)
                    {
                        pDataSource.Rows.RemoveAt(i);
                        i--;
                    }
                }
                pDataSource.AcceptChanges();

                foreach (var tableItem in this._workSheetInfo.Tables)
                {
                    if (tableItem.ReferenceOnly == 1)
                    {
                        continue;
                    }
                    tableItem.Data           = pDataSource.Copy();
                    tableItem.Data.TableName = tableItem.TableName;
                    Dictionary <string, string> columnTextNameMapping = new Dictionary <string, string>();
                    foreach (var columnItem in tableItem.Columns)
                    {
                        columnTextNameMapping.Add(columnItem.ColumnText, columnItem.ColumnName);
                    }
                    //去掉多余列
                    foreach (DataColumn columnItem in pDataSource.Columns)
                    {
                        if (columnTextNameMapping.ContainsKey(columnItem.ColumnName))
                        {//文本改成列名
                            tableItem.Data.Columns[columnItem.ColumnName].ColumnName = columnTextNameMapping[columnItem.ColumnName];
                        }
                        else
                        {
                            tableItem.Data.Columns.Remove(columnItem.ColumnName);
                        }
                    }
                }
            }
            else
            {
                oData        = null;
                oCheckResult = null;
                return(true);
            }
            string assemblyPath;

            if (System.Environment.CurrentDirectory == AppDomain.CurrentDomain.BaseDirectory)
            {//Winform
                assemblyPath = AppDomain.CurrentDomain.BaseDirectory;
            }
            else
            {//Web
                assemblyPath = AppDomain.CurrentDomain.BaseDirectory + "Bin/";
            }
            //转换到Entity
            Dictionary <string, object[]> dictDBTableCache = new Dictionary <string, object[]>();

            foreach (var tableItem in this._workSheetInfo.Tables)
            {
                if (tableItem.Data == null || tableItem.ReferenceOnly == 1)
                {
                    continue;
                }
                List <CommonExcelDataItem> lstEntity = new List <CommonExcelDataItem>();
                Dictionary <string, Dictionary <object, object> > dictCachedReference = new Dictionary <string, Dictionary <object, object> >();
                foreach (DataRow tableRowItem in tableItem.Data.Rows)
                {
                    CommonExcelDataItem oInstance = new CommonExcelDataItem();
                    lstDataItem.Add(oInstance);
                    oInstance.Table = tableItem;
                    oInstance.Index = lstEntity.Count;
                    if (string.IsNullOrEmpty(tableItem.EntityName))
                    {//使用默认规则创建Entity(TableName+“Entity”)
                        oInstance.Entity = Reflection.DynamicReflectionHandler.CreateInstance(assemblyPath + "TenantPlatform.Entity.dll", "JIT.TenantPlatform.Entity." + tableItem.TableName + "Entity", null);
                    }
                    else
                    {
                        oInstance.Entity = Reflection.DynamicReflectionHandler.CreateInstance(assemblyPath + tableItem.EntityAssemblyName, tableItem.EntityName, null);
                    }
                    //依次填充属性
                    foreach (ETCLColumn columnItem in tableItem.Columns)
                    {//值->键转换处理。
                        if (!tableItem.Data.Columns.Contains(columnItem.ColumnName))
                        {
                            continue;
                        }
                        object oCellValue = tableRowItem[columnItem.ColumnName];
                        columnItem.ValueCache.Add(oCellValue);
                        object oReferencedID = null;
                        if (!string.IsNullOrWhiteSpace(columnItem.ReferenceTableName) && !string.IsNullOrWhiteSpace(columnItem.ReferenceColumnName) && !string.IsNullOrWhiteSpace(columnItem.ReferenceTextColumnName))
                        {
                            //每个单元格;
                            if (oCellValue == null || string.IsNullOrWhiteSpace(oCellValue.ToString()))//空值不检查依赖项
                            {
                                continue;
                            }
                            bool bExists = false;
                            Dictionary <object, object> dictValuesOfCurrentColumn;
                            //a.缓存中查找
                            if (dictCachedReference.ContainsKey(columnItem.ColumnName))
                            {//缓存中查找
                                dictValuesOfCurrentColumn = dictCachedReference[columnItem.ColumnName];
                                if (dictValuesOfCurrentColumn.ContainsKey(oCellValue))
                                {
                                    bExists       = true;
                                    oReferencedID = dictValuesOfCurrentColumn[oCellValue];
                                }
                            }
                            else
                            {
                                dictValuesOfCurrentColumn = new Dictionary <object, object>();
                                dictCachedReference.Add(columnItem.ColumnName, dictValuesOfCurrentColumn);
                            }

                            //b.数据库中查找
                            if (!bExists)
                            {//通过反射从数据库中读取此依赖表信息
                                ETCLTable referenceTable = this._workSheetInfo.GetTableByName(columnItem.ReferenceTableName);
                                object[]  oTempEntities;
                                if (dictDBTableCache.ContainsKey(columnItem.ReferenceTableName))
                                {
                                    oTempEntities = dictDBTableCache[columnItem.ReferenceTableName];
                                }
                                else
                                {
                                    oTempEntities = Reflection.DynamicReflectionHandler.QueryAll(referenceTable, new object[] { pUserInfo });
                                    dictDBTableCache.Add(columnItem.ReferenceTableName, oTempEntities);
                                }
                                foreach (var entityItem in oTempEntities)
                                {
                                    bool bMached = true;
                                    if (!string.IsNullOrWhiteSpace(columnItem.ReferenceAdditionalCondition))
                                    {//附加条件(如,从Options中查数据时,需要OptionName和OptionValue多个字段)
                                        string[] conditions = columnItem.ReferenceAdditionalCondition.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                                        foreach (var conditionItem in conditions)
                                        {
                                            string[] conditionNameValue = conditionItem.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                                            if (conditionNameValue == null || conditionNameValue.Length != 2)
                                            {
                                                continue;
                                            }
                                            object oValue = Reflection.DynamicReflectionHandler.GetProperty(entityItem, conditionNameValue[0]);
                                            if (oValue == null || oValue.ToString() != conditionNameValue[1])
                                            {
                                                bMached = false;
                                                break;
                                            }
                                        }
                                        if (!bMached)
                                        {
                                            continue;
                                        }
                                    }

                                    object oTempValue = Reflection.DynamicReflectionHandler.GetProperty(entityItem, columnItem.ReferenceTextColumnName);
                                    if (oTempValue != null && oTempValue.Equals(oCellValue))
                                    {
                                        oReferencedID = Reflection.DynamicReflectionHandler.GetProperty(entityItem, columnItem.ReferenceColumnName);
                                        dictValuesOfCurrentColumn.Add(oCellValue, oReferencedID);
                                        bExists = true;
                                        break;
                                    }
                                }
                            }
                            if (bExists)//有效的依赖项
                            {
                                if (!Reflection.DynamicReflectionHandler.SetProperty(oInstance.Entity, columnItem.ColumnName, oReferencedID))
                                {
                                    throw new ETCLException(400, string.Format("反射方法设置依赖项属性失败,表:{0} 列:{1} 关联:{2}", tableItem.TableName, columnItem.ColumnName, oReferencedID));
                                }
                            }
                            else
                            {
                                isPass = false;
                                ETCLCommonResultItem resultItem = new ETCLCommonResultItem();
                                resultItem.ColumnOrder    = tableItem.Columns.IndexOf(columnItem);
                                resultItem.Message        = string.Format("[数据项:【{0}】]的数据在关联表中不存在.", columnItem.ColumnText);
                                resultItem.OPType         = OperationType.ForeignKeyDependence;
                                resultItem.ResultCode     = 102;
                                resultItem.RowIndex       = tableItem.Data.Rows.IndexOf(tableRowItem);
                                resultItem.TableIndex     = this._workSheetInfo.Tables.IndexOf(tableItem);
                                resultItem.WorksheetIndex = this._workSheetInfo.Index.Value;// etclInfo.WorkSheets.IndexOf(worksheetItem);
                                lstCheckResult.Add(resultItem);
                            }
                        }
                        else
                        {
                            if (oCellValue != null)
                            {
                                if (columnItem.ValueCountCache.ContainsKey(oCellValue))
                                {
                                    columnItem.ValueCountCache[oCellValue]++;
                                }
                                else
                                {
                                    columnItem.ValueCountCache.Add(oCellValue, 1);
                                }
                            }
                            if (!Reflection.DynamicReflectionHandler.SetProperty(oInstance.Entity, columnItem.ColumnName, oCellValue))
                            {
                                throw new ETCLException(400, string.Format("反射方法设置属性失败,表:{0} 列:{1} 值:{2}", tableItem.TableName, columnItem.ColumnName, oCellValue));
                            }
                        }
                    }
                    lstEntity.Add(oInstance);
                }
                tableItem.Entities = lstEntity;
            }
            oCheckResult = lstCheckResult.ToArray();
            oData        = lstDataItem.ToArray();
            return(isPass);
        }
Esempio n. 6
0
 /// <summary>
 /// 构造器
 /// </summary>
 /// <param name="pUserInfo">用户信息</param>
 /// <param name="pETCLTable">ETCL表</param>
 /// <param name="pETCLColumn">ETCL列</param>
 public DefaultDuplicateChecker(BasicUserInfo pUserInfo, ETCLTable pETCLTable, ETCLColumn pETCLColumn)
 {
     this._userInfo   = pUserInfo;
     this._etclTable  = pETCLTable;
     this._etclColumn = pETCLColumn;
 }