现在的位置: 首页 > 综合 > 正文

SPSiteDataQuery详细说明

2016年10月26日 ⁄ 综合 ⁄ 共 2184字 ⁄ 字号 评论关闭

//使用SPSiteDataQuery对象的一些问题。

//1、如果要搜索的栏目名称被改过,找不到

//  用SPSiteDataQuery对象进行列表搜索的列表肯定是有公共的字段的,比如都有“合同编号”这个字段。  如果其中的某个列表的“合同编号”是由其他的字段修改而///来的就会出现问题,使用SPSiteDataQuery会搜不到这个列表。  例如:“标题”内部名称为“Title”,如果需求变更“标题”改成“合同编号”。他的内部名称并没有变///还是“Title”,而其他列表的“合同编号”字段的内部名称为“_x5408__x540c__x7f16__x53f7_”。如果按照下面这段查询语句进行查询,那么那个有“标题”改成“合同///编号”的列表就不会被搜索到。  <Where><Eq><FieldRef Name="x5408__x540c__x7f16__x53f7_"/><Value Type="Text">2010_1_2_213</Value></Eq></Where>

//2、SPSiteDataaQuery对象没有分页功能。如果想要分页就必须把所有的数据都搜索出来,然后进行分页操作。所有数据都搜索出来会很占内存空间。

/// <param name="webUrl">合同列表所在网站</param>

        /// <param name="listNames">所有的合同列表名称</param>
        /// <returns></returns>
        public List<SearchResultModel> GetDataEachListBianGeng(string webUrl, Dictionary<string, string> listNames)
        {
            int pageSize = 30;//页面大小
            int pageIndex = AspNetPager1.CurrentPageIndex;
            AspNetPager1.PageSize = pageSize;
            int pageCount = 0;//为aspnetpager分页使用的
            int flagPages = 0;//为了标记要获取的项目

            List<SearchResultModel> PageData = new List<SearchResultModel>();
            using (SPWeb web = SPContext.Current.Site.OpenWeb(webUrl))
            {
                foreach (var item in listNames)
                {
                    SPList list = web.Lists.TryGetList(item.Key);

                    if (list != null)
                    {
                        SPQuery query = new SPQuery();
                        query.RowLimit = 500;
                        query.Query = GetQuery(list);
                        SPListItemCollection items = null;
                        do
                        {
                            items = list.GetItems(query);
                            if (PageData.Count <= pageSize)
                            {
                                foreach (SPListItem listItem in items)
                                {
                                    flagPages += 1;
                                    if (flagPages > (pageSize * (pageIndex - 1)) && flagPages < (pageSize * pageIndex))
                                    {
                                        SearchResultModel srm = new SearchResultModel();
                                        srm.ContractID = (listItem["现合同编号"] ?? "").ToString();
                                        srm.ContractMoney = (listItem["合同价款变更后"] ?? "").ToString();
                                        srm.ContractName = (listItem["合同名称"] ?? "").ToString();
                                        srm.DuiFangCompany = (listItem["对方单位名称变更后"] ?? "").ToString();
                                        srm.TanPanRen = (listItem["合同主谈人员"] ?? "").ToString();
                                        srm.TitleUrl = web.Url + "/_layouts/listform.aspx?PageType=4&ListId=" + list.ID + "&ID=" + listItem.ID.ToString();
                                        PageData.Add(srm);
                                    }
                                }
                            }

                            pageCount += items.Count;//计算总页数
                            query.ListItemCollectionPosition = items.ListItemCollectionPosition;
                        } while (items.ListItemCollectionPosition != null);
                    }
                    else
                    {
                        SPDiagnosticsService.Local.WriteEvent(3, new SPDiagnosticsCategory("MSDN", TraceSeverity.Unexpected, EventSeverity.Information), EventSeverity.Information, "列表名:" + item.Key + ",未找到", "asdfasdf");
                    }
                }
            }

            AspNetPager1.RecordCount = pageCount;
            return PageData;
        }






抱歉!评论已关闭.