내 사용자 지정 웹 파트에 오류가 있습니다.시도한 작업은 관리자가 적용한 목록 보기 임계값을 초과하므로 금지됩니다.

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/105553

  •  29-09-2020
  •  | 
  •  

문제

쉐어포인트 2010을 사용하고 있습니다.사용자 지정 웹파트를 만들었습니다.이 웹파트에서는 ​​새 항목을 추가할 수 있습니다.이 새 항목을 추가하기 전에 드롭다운 상자에서 일부 값을 선택해야 합니다.마지막 드롭다운박스의 이벤트 수신자에서 코드로 이 작업을 수행합니다.

protected void ddProcesses_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnAddFunction.Visible = true;

//            alApparaten.Visible = false;

            ReloadFunctions();

            ((ApparaatList)alApparaten).FuncID = 0;
            ((ApparaatList)alApparaten).Reload();
        }


public void Reload()
        {
            using (AssetRegisterDataContext spContext = new AssetRegisterDataContext(SPContext.Current.Site.Url))
            {
                var apparaten = from i in spContext.Apparaat.ToList()
                                where i.Functie_ID != null && i.Functie_ID.Id == FuncID
                                select i;
                rptApparaten.DataSource = (from i in apparaten where i.Verwijderd != true select i);
                rptApparaten.DataBind();
            }

        }


    private void ReloadFunctions()
            {
                using (AssetRegisterDataContext spContext = new AssetRegisterDataContext(SPContext.Current.Site.Url))
                {
                    var query = (from i in spContext.Functies.ToList()
                                 where (i.Locatie != null && i.Locatie.LocatieNaamCode == ddLocations.SelectedValue)
                                    && (i.Faciliteitnaam != null && i.Faciliteitnaam.Faciliteitnaam == ddFacilities.SelectedValue)
                                    && (i.Procesnaam != null && i.Procesnaam.Procesnaam == ddProcesses.SelectedValue)
                                    && (i.Verwijderd != true)
                                 select i
                                 );
                    rptFunctions.DataSource = query;
                    rptFunctions.DataBind();
                }
            }

"Apparaat" 목록으로 이동하면 5002개의 항목이 표시됩니다.목록 설정에 도달하면 다음 정보가 표시됩니다.

항목 5,002개(이 목록 보기의 임계값은 5,000개입니다.)

"Apparaat" 목록을 받았을 때 모든 것이 정상입니다.2개의 항목을 추가하려고 시도했는데 제대로 작동하고 있습니다.

내 사용자 지정 웹 파트에서 임계값 제한 예외가 발생하고 GUI가 제대로 작동하는 이유는 무엇입니까?

도움이 되었습니까?

해결책

나는 혼자서 해결책을 발견했다.나는 Whiliop을 만들었습니다.루프 전체 항목에 도달 할 때까지 루프가 이루어지는 동안 루프가 루프됩니다.루프 내부에 처음 1999 항목을 사용하여 목록에 추가하십시오.그 후 나는 두 번째 1999 항목을 취합니다.항목의 총 수를 도달 할 때 까지이 논리를 수행합니다.이 후에는 모든 항목이있는 목록이 있으며 리피터에 추가 할 수 있습니다.1999 년 항목을 사용한 이유는 스로틀이 5000에서 2000으로 감소 할 수 있기 때문입니다. 사용자 정의 코드도 작동합니다.

다른 팁

재로드 기능에서 tolist ()를 호출하면 데이터 컨텍스트가 쿼리를 실행하도록 강제합니다.이 시점에서 코드에서 필터 (WHERE 절)를 지정하지 않으므로 모든 레코드가 읽습니다.(잘 읽으려고 시도했습니다.)

DataSource 속성은 iQuelyAble 소스를 수락 할 수 있으므로 Tolist 호출을 제거하면 (ReloadFunctions 메서드를 변경하십시오)

LINQ to SharePoint 쿼리는 2147483647 인 최대 INT의 기본 행 제한이 있으며 명백하게 변경할 수 없습니다.귀하의 쿼리가 5000 개 이상의 항목을 반환하고 임계 값을 초과 할 것입니다.

임계 값을 초과하지 않도록하려면 SpQuery 객체를 사용하고 CAML에 쿼리를 작성하고 RowLimit 속성을 5000으로 설정해야합니다. 이와 같은 것이 필요합니다.CAML 쿼리를 변경하십시오.

SPQuery q=new SPQuery();
q.Query="<Where><IsNotNull><FieldRef Name='Functie_ID' /></IsNotNull></Where>";
q.RowLimit=5000;
SPListItemCollection resultItems=ApparaatList.GetItems(q);
rptApparaten.DataSource =resultItems;
rptApparaten.DataBind();
.

이것은 무슨 일이 일어나고 있는지 설명합니다.

시도 된 작업은 관리자가 시행 한 목록 뷰 임계 값을 초과하기 때문에 금지됩니다.

웹 애플리케이션의 중앙 관리 목록에서 관리자가 설정합니다!

갈 수 있어? 중앙 관리자 -> 애플리케이션 관리 -> 웹 애플리케이션 관리 -> 선택하다 그만큼 웹 애플리케이션 주어진 목록을 보유하고 있습니다 -> 위 탭 내에서 쓰러지 다 ~을 위한 일반 설정 -> 선택 리소스 제한.

그러면 관리자가 설정한 웹 애플리케이션 설정이 포함된 팝업 상자가 표시됩니다.아래로 스크롤하시면 보입니다 목록 보기 조회 임계값 , 기본적으로 5000으로 설정되어 있는 것 같습니다. 이 숫자를 더 큰 값으로 늘릴 수 있습니다.

목록에서 워크플로를 실행할 때 이 문제가 발생합니다. 동일한 오류가 발생하지만 그 이유는 다음과 같습니다. 목록 보기 조회 임계값 기본적으로 8로 설정되어 있지만 이 숫자를 100으로 늘릴 수 있으며 거의 ​​작동할 것이라고 확신합니다.

어떤 사람들은 모든 데이터를 반환하는 것이 잘못되었다고 말하는 것을 이해합니다. 예, 어느 정도 사실입니다...다 필요하면 어떡하지?1백만 개가 넘는 레코드가 있으면 어떻게 되나요?다른 해결 방법이 있다는 것을 알고 있지만 이것은 중앙 관리 설정 내에서 수정하기 쉽고 서버가 부담을 처리할 수 있는 경우 이보다 간단한 옵션입니다.

쿼리와 같은 데이터베이스 작동이 한 번에 처리 할 수있는 최대 목록 또는 라이브러리 항목 수를 지정합니다.이 한계를 초과하는 작업이 차단됩니다.

대체 계획을 세우기 위해 SharePoint 2010은 목록이 3,000 개를 초과했을 때 목록 설정 페이지에서 경고합니다.경고에는이 주제에 대한 도움말 링크가 포함되어 있습니다.

http://office2010.microsoft.com/en-us/sharepoint-server-help/manage-lists-and-libraries-with-many-items-HA010378155.aspx?redir=0

이것은 예상되는 동작입니다 - SharePoint는 사용자의 성능에 악영향을 미치는 비효율적 인 목록 쿼리를 방지하도록 설계된 'Query Throttling'이라는 기능이 있습니다.

이 제한은 5000으로 설정되며 이 아닌 가 변경되어야합니다. 5000으로 설정된 이유는 5000 개가 넘는 항목에서 기본 SQL 데이터베이스가 행 잠금에서 테이블 잠금으로이를 확대한다는 것입니다. SharePoint가 컨텐츠 데이터베이스의 한 테이블에 컨텐츠를 많이 저장할 때 시스템의 성능에 중요한 영향을 미칠 수 있으며 많은 사이트 모음에 영향을 미칠 수 있습니다.

이제 쿼리 스로틀을 완화하는 몇 가지 방법이 있습니다. 첫째, 목록에서 열 인덱스를 사용할 수 있습니다. Unindexed SQL 테이블 열에 쿼리하는 것처럼 테이블 스캔을 강제로 쿼리하므로 Unindexed List 열을 쿼리하는 것은 동일합니다. 그 목록에 5000 개 이상의 항목이 있으면 스로틀을 쳤습니다. 그러나 인덱싱 된 열은 필요한 행을 방금 검색 할 수 있음을 의미합니다.

대규모 목록의 각 항목을 통해 트롤을 가져 가면 ContentIterator 컨트롤이 있습니다. 그러나 여러 쿼리를 사용하여 한 번에 하나씩 또는 일괄 처리 항목을 얻으려면 여러 쿼리를 사용하므로 느립니다.

항목을 일대일로 검색합니다.

ContentIterator ci = new ContentIterator("Single Item Example);
SPQuery qry = new SPQuery();
qry.Query = "<Where><Eq><FieldRef Name='Colour'/><Value Type='Text'>Pink</Value></Eq></Where>";
qry.Query = qry.Query + ContentIterator.ItemEnumerationOrderByNVPField;
ci.ProcessListItems(list, qry,
    delegate(SPListItem item)
    {
         // Do stuff with the item
    },
    delegate(SPListItem item, Exception ex)
    {
      // Handle an exception. Return TRUE to rethrow the exception, FALSE to keep iterating  return false;
    }
 );
.

배치로 항목 검색 :

ContentIterator ci = new ContentIterator("Batch Example);
SPQuery qry = new SPQuery();
qry.Query = "<Where><Eq><FieldRef Name='Colour'/><Value Type='Text'>Pink</Value></Eq></Where>";
qry.Query = qry.Query + ContentIterator.ItemEnumerationOrderByNVPField;
ci.ProcessListItems(list, qry,
    delegate(SPListItemCollection items)
    {
        foreach (SPListItem itm in items)
        {
            //Process each item in batch!
        }
    },
    delegate(SPListItemCollection item, Exception ex)
    {
         // Handle an exception. Return TRUE to rethrow the exception, FALSE to keep iterating  return false;
    }
);
.

이 도움이 될 수 있습니다 : http://www.novolocus.com/2012/07/09/dealing-with-large-lists-part-1-what-hat-throttling-and-whow - 원인 - 어려움 /

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top