Ejemplo n.º 1
0
        protected override void BeforeDelete()
        {
            base.BeforeDelete();
            //删除前先删除文件夹目录
            DataRow masterRow = this.DataSet.Tables[0].Rows[0];

            if (masterRow == null)
            {
                return;
            }
            string dirId = LibSysUtils.ToString(masterRow["DIRID"]);

            //如果需要删除所有子目录及文档
            if (isDeleteSubs)
            {
                //删除目录权限数据、子目录数据(及子目录的权限、文件)、文件(及文件数据)
                dirLink = new DirLinkAddress(dirId, this.DataAccess);
                dirLink.GetDocIds();

                //先删除文档
                DmDocumentBcf docBcf = null;
                foreach (string docId in dirLink.DocIdList)
                {
                    //每个都要重新构造Bcf再删除
                    docBcf = LibBcfSystem.Default.GetBcfInstance("dm.Document", this.DataAccess) as DmDocumentBcf; //通过共用同一个DataAccess共用同一个事务
                    docBcf.IsDeleteDiskDoc = false;                                                                //连带删除时,不删除磁盘文档文件的操作
                    docBcf.Delete(new object[] { docId });
                }

                //再删除目录
                DmDirectoryBcf dirBcf = null;
                foreach (string subDirId in dirLink.SubDirIdList)
                {
                    //每个都要重新构造Bcf再删除
                    dirBcf = LibBcfSystem.Default.GetBcfInstance("dm.Directory", this.DataAccess) as DmDirectoryBcf;//通过共用同一个DataAccess共用同一个事务
                    dirBcf.isDeleteSubs = false;
                    dirBcf.Delete(new object[] { subDirId });
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 对主表的列表数据增加处理
        /// 设置获取目录下的文档简要信息、目录/文档的的“目录链接”虚字段等
        /// </summary>
        /// <param name="dataTable"></param>
        public override void AfterFillList(LibHandle libHandle, DataTable table, object listingQuery, LibEntryParam entryParam)
        {
            base.AfterFillList(libHandle, table, listingQuery, entryParam);
            if (libHandle == null || table == null || listingQuery == null)
            {
                return;
            }

            BillListingQuery queryinfo = listingQuery as BillListingQuery;

            if (queryinfo == null || queryinfo.Condition == null ||
                queryinfo.Condition.QueryFields == null ||
                queryinfo.Condition.QueryFields.Count == 0)
            {
                return;
            }
            string belongDirID = "";

            //查询获得父目录编码
            belongDirID = (from item in queryinfo.Condition.QueryFields
                           where item.Name.Equals("PARENTDIRID") && item.QueryChar.Equals(LibQueryChar.Equal) &&
                           item.Value.Count == 1
                           select item.Value[0]).FirstOrDefault().ToString();

            int dirType = 0;

            if (int.TryParse((from item in queryinfo.Condition.QueryFields
                              where item.Name.Equals("DIRTYPE") && item.QueryChar.Equals(LibQueryChar.Equal) &&
                              item.Value.Count == 1
                              select item.Value[0]).FirstOrDefault().ToString(), out dirType) == false)
            {
                return;
            }

            DataTable dtDir = table;

            #region 公共目录则还需要再根据权限筛选一次
            if (libHandle.UserId != "admin" && dirType == (int)DirTypeEnum.Public)
            {
                //公共目录则还需要再根据权限筛选一次
                List <string> dirIdList = new List <string>();
                foreach (DataRow row in dtDir.Rows)
                {
                    dirIdList.Add(LibSysUtils.ToString(row["DIRID"]));
                }
                dirIdList = DMPermissionControl.Default.FilterDirIds(libHandle, DMFuncPermissionEnum.Browse, dirIdList);//筛选具有浏览权限的目录标识号
                List <DataRow> toDeleteList = new List <DataRow>();
                foreach (DataRow row in dtDir.Rows)
                {
                    if (dirIdList.Contains(LibSysUtils.ToString(row["DIRID"])) == false)
                    {
                        toDeleteList.Add(row);
                    }
                }
                foreach (DataRow row in toDeleteList)
                {
                    dtDir.Rows.Remove(row);
                }
                dtDir.AcceptChanges();
            }
            #endregion


            string dirLinkAddress = "";
            if (belongDirID.Equals(""))
            {
                dirLinkAddress = "";//如果父目录编码为空则目录链接的路径也为空
            }
            else
            {
                DirLinkAddress dirLink = new DirLinkAddress(belongDirID, this.DataAccess);
                dirLinkAddress = dirLink.DirNameLink;//获取目录链接虚字段
            }

            foreach (DataRow row in dtDir.Rows)
            {
                //设置目录数据行的信息
                row["ISDIR"]          = true;
                row["DOCTYPE"]        = "目录";
                row["DIRLINKADDRESS"] = dirLinkAddress;//设置目录的目录链接虚字段

                row["DOCNAME"] = row["DIRNAME"];
            }

            //获取目录下的文档数据行并设置简要信息虚字段
            #region 获取目录下的文档数据行并设置简要信息虚字段
            DmDocumentBcf docBcf = new DmDocumentBcf();
            DataTable     dtDoc  = docBcf.GetDocOfDir(libHandle, belongDirID, (DirTypeEnum)dirType);
            if (dtDoc != null && dtDoc.Rows.Count > 0)
            {
                DataRow newRow = null;
                foreach (DataRow rowDoc in dtDoc.Rows)
                {
                    newRow                   = dtDir.NewRow();
                    newRow["DIRID"]          = Guid.NewGuid().ToString().Substring(0, 20);//设置一个不重复的值作为编号
                    newRow["DIRNAME"]        = "无意义";
                    newRow["DOCCOUNT"]       = 0;
                    newRow["PARENTDIRID"]    = rowDoc["DIRID"];
                    newRow["DIRTYPE"]        = 0;
                    rowDoc["DIRLINKADDRESS"] = dirLinkAddress; //设置目录的目录链接虚字段
                    newRow["SORTORDER"]      = int.MaxValue;   //实现文档在目录的下面

                    //文档虚字段
                    newRow["DOCID"]     = rowDoc["DOCID"];
                    newRow["DOCNAME"]   = rowDoc["DOCNAME"];
                    newRow["ISDIR"]     = false;
                    newRow["DOCTYPE"]   = rowDoc["DOCTYPE"];
                    newRow["LOCKSTATE"] = rowDoc["LOCKSTATE"];
                    newRow["DOCSIZE"]   = rowDoc["DOCSIZE"];
                    newRow["SAVEPATH"]  = rowDoc["SAVEPATH"];

                    newRow["LASTUPDATETIME"] = rowDoc["LASTUPDATETIME"];
                    newRow["CREATORNAME"]    = rowDoc["CREATORNAME"];

                    newRow["SORTORDER"] = rowDoc["SORTORDER"];

                    dtDir.Rows.Add(newRow);
                }
            }
            #endregion

            //对目录按照SortOrder从小到大排序 ,文档目录在上
            #region 对目录按照SortOrder从小到大排序 ,文档目录在上
            table.DefaultView.Sort = "ISDIR desc,SORTORDER asc";
            DataTable copyTable = table.DefaultView.ToTable();
            table.Rows.Clear();
            for (int i = 0; i < copyTable.Rows.Count; i++)
            {
                table.Rows.Add(copyTable.Rows[i].ItemArray);
            }
            #endregion

            if (table.DataSet != null)
            {
                table.DataSet.AcceptChanges();
            }
        }