예제 #1
0
        /// <summary>
        /// 保存合并设置
        /// </summary>
        /// <param name="busiNo">业务编号</param>
        /// <param name="si">Sys_Summary_Item对象</param>
        /// <returns>DataRowSaveResult</returns>
        public DataRowSaveResult SaveDB(string busiNo, Sys_Summary_Item si)
        {
            byte[]  byt = StoreBase.GetBytes(si).Value;
            DataRow dr  = this.FindRow("BusiNo", busiNo);

            if (dr == null)
            {
                dr = this.NewRow(); this.Rows.Add(dr);
            }
            dr["UserID"]        = Sys_User.m_LoginUserID;
            dr["BusiNo"]        = busiNo;
            dr["SummaryObject"] = byt;
            bf_Busi           bb   = bf_Busis.GetItem("Sys_Summary_Set");
            DataRowSaveResult drsr = null;

            if (dr.RowState == DataRowState.Added)
            {
                drsr = bb.DataRowInsert(dr);
            }
            if (dr.RowState == DataRowState.Modified)
            {
                drsr = bb.DataRowUpdate(dr);
            }
            if (drsr.Success)
            {
                dr.AcceptChanges(); return(null);
            }
            dr.RejectChanges();
            return(drsr);
        }
예제 #2
0
        public static void ClearQueryCache(string busiNo)
        {
            try
            {
                string   queryNo = null;
                string[] sps     = new string[] { "_|_" };
                foreach (var key in dicCache.Keys)
                {
                    if (!key.ToString().StartsWith("GetQueryDataByPageCustFilter_"))
                    {
                        continue;
                    }
                    queryNo = key.ToString().Split(sps, StringSplitOptions.None)[1];
                    bf_Query query = bf_Querys.GetItem(queryNo);
                    if (query == null)
                    {
                        continue;
                    }
                    bf_Busi busi = bf_Busis.GetItem(busiNo);
                    var     flg  = false;
                    foreach (bf_Query_Item qi in query.Items)
                    {
                        if (qi.Business.TableNameDB == busi.TableNameDB)
                        {
                            flg = true;
                            break;
                        }
                    }
                    if (flg)
                    {
                        break;
                    }
                    queryNo = null;
                }
                if (string.IsNullOrEmpty(queryNo))
                {
                    return;
                }
                List <object> lstKey = new List <object>();

                foreach (var key in dicCache.Keys)
                {
                    if (!key.ToString().StartsWith("GetQueryDataByPageCustFilter_"))
                    {
                        continue;
                    }
                    if (key.ToString().Split(sps, StringSplitOptions.None)[1] == queryNo)
                    {
                        lstKey.Add(key);
                    }
                }
                foreach (var k in lstKey)
                {
                    Remove(k);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("ClearQueryCache", ex);
            }
        }
예제 #3
0
        /// <summary>
        /// 检查本表数据是否违反唯一性策略
        /// </summary>
        /// <param name="drsr"></param>
        /// <param name="bdo"></param>
        /// <returns></returns>
        private void DataSave_BeforeCheckBDOUnique(DataRowSaveResult drsr, BDO bdo)
        {
            drsr.DataRow = null;
            DataRow[] drschanged = bdo.Select(null, null, DataViewRowState.Added | DataViewRowState.ModifiedCurrent);
            if (drschanged.Length == 0)
            {
                return;
            }
            bf_Busi   busi = bdo.Business;
            db_Object so   = busi.db_Object;

            foreach (string gno in busi.UniqueGroupNos)
            {
                List <bf_Busi_Field> bbflist = busi.UniqueFields(gno);
                if (bbflist.Count == 0)
                {
                    continue;
                }
                string        ufText = "", ufText2 = "";
                List <string> ufList = new List <string>();
                foreach (bf_Busi_Field bbf in bbflist)
                {
                    if (bbf.DbType == DbType.Binary)
                    {
                        continue;
                    }
                    ufList.Add(bbf.m_Name);
                    ufText += string.Format("+[{0}]", bbf.Caption);
                    if (bbf.VisibleType > 0)
                    {
                        ufText2 += string.Format("+[{0}]", bbf.Caption);
                    }
                }
                if (string.IsNullOrEmpty(ufText2) == false)
                {
                    ufText = ufText2;
                }
                ufText = ufText.Substring(1);
                foreach (DataRow dr in drschanged)
                {
                    drsr.DataRow = dr;
                    string filter = "";
                    foreach (bf_Busi_Field bbf in bbflist)
                    {
                        object cellValue     = dr[bbf.m_Name];
                        string compareString = " is null";
                        if (cellValue != DBNull.Value)
                        {
                            compareString = string.Format("='{0}'", cellValue);
                        }
                        filter += string.Format("and {0}{1} ", bbf.m_Name, compareString);
                    }
                    filter = filter.Substring(4);
                    int cnt = (int)bdo.Compute("Count(ID)", filter);
                    if (cnt == 1)
                    {
                        continue;
                    }
                    string error = string.Format("表[{0}]中\r\n字段{1}违反数据唯一性策略。", busi.Caption, ufText);
                    drsr.ErrorText = error;
                    drsr.Fields    = ufList;
                    return;
                }
            }
        }
예제 #4
0
        public static List <BDOs> ToBDOsModel(PostData postData)
        {
            //取真实表名
            for (int i = 0; i < postData.BusiDatas.Length; i++)
            {
                bf_Busi busi = bf_Busis.GetItem(postData.BusiDatas[i].BusiNo);
                if (busi == null)
                {
                    continue;
                }
                postData.BusiDatas[i].TableName = busi.TableName;
                busi = bf_Busis.GetItem(postData.BusiDatas[i].ParentBusiNo);
                if (busi == null)
                {
                    continue;
                }
                postData.BusiDatas[i].ParentTableName = busi.TableName;
            }
            //按照表关系转换
            List <BDOs>   lstDs       = new List <BDOs>();
            List <string> lstTbInBdos = new List <string>();

            for (int i = 0; i < postData.relations.Length; i++)
            {
                RelationDTO rel  = postData.relations[i];
                BDOs        BDOS = lstDs.Find((b) => b.DataSetName == rel.parentBusiNo);
                if (BDOS == null)
                {
                    BDOs bdos      = null;
                    BDO  bdoParent = null;
                    foreach (BDOs bds in lstDs)
                    {
                        bdoParent = bds[rel.parentBusiNo];
                        if (bdoParent != null)
                        {
                            bdos = bds;
                            break;
                        }
                    }
                    if (bdoParent == null)
                    {
                        bdos      = new BDOs(rel.parentBusiNo);
                        bdoParent = JsonToBDO(bdos, null, rel.parentBusiNo, postData.BusiDatas.AsEnumerable().FirstOrDefault(f => f.BusiNo.Equals(rel.parentBusiNo)).JsonData);
                        CheckNullValue(bdoParent);
                        bdos.DataSetName = rel.parentBusiNo;
                    }

                    BDO bdoChild = JsonToBDO(bdos, null, rel.name, postData.BusiDatas.AsEnumerable().FirstOrDefault(f => f.BusiNo.ToUpper().Equals(rel.name.ToUpper())).JsonData);
                    if (bdoParent.Rows.Count == 0)
                    {
                        foreach (DataRow row in bdoChild.Rows)
                        {
                            if (bdoParent.AsEnumerable().FirstOrDefault(f => f[rel.parentCols[0]].Equals(row[rel.childCols[0]])) != null)
                            {
                                continue;
                            }
                            DataRow nr = bdoParent.NewRow();
                            nr[rel.parentCols[0]] = row.RowState == DataRowState.Deleted?row[rel.childCols[0], DataRowVersion.Original]: row[rel.childCols[0]];
                            bdoParent.Rows.Add(nr);
                        }
                        bdoParent.AcceptChanges();
                    }
                    bdoParent.AddChildren(rel.name, bdoChild, rel.parentCols[0], rel.childCols[0]);
                    //CopyRelation(bdos, rel);

                    if (!lstDs.Contains(bdos))
                    {
                        lstDs.Add(bdos);
                        lstTbInBdos.Add(rel.parentBusiNo);
                    }
                    lstTbInBdos.Add(rel.name);
                }
                else
                {
                    BDO bdo = JsonToBDO(BDOS, null, rel.name, postData.BusiDatas.AsEnumerable().FirstOrDefault(f => f.BusiNo.Equals(rel.name)).JsonData);
                    CheckNullValue(bdo);
                    if (BDOS.MasterBDO.Rows.Count == 0)
                    {
                        foreach (DataRow row in bdo.Rows)
                        {
                            if (BDOS.MasterBDO.AsEnumerable().FirstOrDefault(f => f[rel.parentCols[0]].Equals(row[rel.childCols[0]])) != null)
                            {
                                continue;
                            }
                            DataRow nr = BDOS.MasterBDO.NewRow();
                            nr[rel.parentCols[0]] = row[rel.childCols[0]];
                            BDOS.MasterBDO.Rows.Add(nr);
                        }
                        BDOS.MasterBDO.AcceptChanges();
                    }

                    BDOS.MasterBDO.AddChildren(rel.name, bdo, rel.parentCols[0], rel.childCols[0]);
                    //CopyRelation(BDOS, rel);
                    lstTbInBdos.Add(rel.name);
                }
            }

            //无表关系的单表
            foreach (BusiData bd in postData.BusiDatas)
            {
                if (!lstTbInBdos.Exists((name) => name == bd.BusiNo))
                {
                    BDOs singleBDOs = new BDOs(bd.BusiNo);
                    BDO  bdo        = JsonToBDO(singleBDOs, null, bd.BusiNo, postData.BusiDatas.AsEnumerable().FirstOrDefault(f => f.BusiNo.Equals(bd.BusiNo)).JsonData);
                    CheckNullValue(bdo);
                    singleBDOs.DataSetName = bd.BusiNo;
                    lstDs.Add(singleBDOs);
                }
            }

            return(lstDs);
        }