문제

내 라이브러리에 5000 개 미만의 항목이 있습니다.IDS별로 530 개의 항목을 얻고 싶습니다.그래서 다음 쿼리를 사용하고 있습니다.

<Where>
  <In>
    <FieldRef Name="ID" />
    <Values>
       <Value Type="Number">1</Value>
       <Value Type="Number">2</Value>
       .
       .
       .
       <Value Type="Number">530</Value>
    </Values>
  </In>
</Where>
.

이 쿼리를 사용하면 예외 다음 SplistItemCollection이 발생하는 동안이 쿼리를 사용하면 발생합니다.

System.ArgumentException: Value does not fall within the expected range.
   at Microsoft.SharePoint.Library.SPRequestInternalClass.GetListItemDataWithCallback2(IListItemSqlClient pSqlClient, String bstrUrl, String bstrListName, String bstrViewName, String bstrViewXml, SAFEARRAYFLAGS fSafeArrayFlags, ISP2DSafeArrayWriter pSACallback, ISPDataCallback pPagingCallback, ISPDataCallback pPagingPrevCallback, ISPDataCallback pFilterLinkCallback, ISPDataCallback pSchemaCallback, ISPDataCallback pRowCountCallback, Boolean& pbMaximalView) 
   at Microsoft.SharePoint.Library.SPRequest.GetListItemDataWithCallback2(IListItemSqlClient pSqlClient, String bstrUrl, String bstrListName, String bstrViewName, String bstrViewXml, SAFEARRAYFLAGS fSafeArrayFlags, ISP2DSafeArrayWriter pSACallback, ISPDataCallback pPagingCallback, ISPDataCallback pPagingPrevCallback, ISPDataCallback pFilterLinkCallback, ISPDataCallback pSchemaCallback, ISPDataCallback pRowCountCallback, Boolean& pbMaximalView) 
   at Microsoft.SharePoint.SPListItemCollection.EnsureListItemsData() 
   at Microsoft.SharePoint.SPListItemCollection.GetEnumerator() 
.

오퍼레이터에서 500 이하의 값으로 쿼리를 다시 실행 한 경우 SPLISTITEMCollection이 예외를 던지지 않습니다.

연산자의 CAML은 500 개 이상의 항목이 적은 것으로 한계가 있습니까?아니면 다른 더 나은 접근 방식이 있습니까?

도움이 되었습니까?

해결책

당신의 이야기에서 그렇게 확실하지만,이를 위해 아주 쉽게 해결되지 않습니까?

<Where>
  <Or>
      <In>
        <FieldRef Name="ID" />
        <Values>
           <Value Type="Number">1</Value>
           <Value Type="Number">2</Value>
           .
           .
           .
           <Value Type="Number">499</Value>
        </Values>
      </In>
      <In>
        <FieldRef Name="ID" />
        <Values>
           <Value Type="Number">500</Value>
           <Value Type="Number">501</Value>
           .
           .
           .
           <Value Type="Number">999</Value>
        </Values>
      </In>
   </Or>
</Where>
.

등등, 1000 개가 넘는 경우 더 많은 중첩이 있습니다.

다른 팁

답변으로서 게시하므로 답변으로 답변 할 수 없습니다.

여러 개의 중첩 또는 태그로 500 요소를 끊는 것은 내 절망에 대해 작동하지 않습니다.한계는 분명히 500 개의 요소입니다.

500 요소, 400, 300, 200, 100 및 spservices 쿼리의 한계를 사용하여 깨지기 시도했습니다. 반환 : 다음 응답으로 500 내부 서버 오류가 발생했습니다.

Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown.
.

대부분의 500 요소를 업데이트하려고합니다 (하나의 태그가 있거나 중첩 된 또는 400, 300, 200, 100 요소를 사용하여 브레이크가있는 경우) 작동합니다.그런 다음 쿼리는 200 개의 성공을 반환합니다.내 지식으로는 중첩이나 태그의 몇 가지 제한이 있어야합니다.

사용 중입니다 : SPServices 2014.01, jQuery 1.11, SharePoint 2013 :

$().SPServices.SPUpdateMultipleListItems({
    listName: "some list display name",
    CAMLQuery: CAMLQuery,
    valuepairs: [["static name of the field", 1]],
    completefunc: function (xData) {
        if (xData.status !== 200) {
            console.log("failure");
        }
    }
});
.

쿼리 5 * 100 + 1 요소가 501 이후로 실패합니다.

<Query>
  <Where>
    <Or>
      <In>
        <FieldRef Name='ID' LookupId='TRUE' />
        <Values>
          100 times <Value Type='Lookup'>2688</Value>
        </Values>
      </In>
      <Or>
        <In>
          <FieldRef Name='ID' LookupId='TRUE' />
          <Values>
            100 times value
          </Values>
        </In>
        <Or>
          <In>
            <FieldRef Name='ID' LookupId='TRUE' />
            <Values>
              100 times value
            </Values>
          </In>
          <Or>
            <In>
              <FieldRef Name='ID' LookupId='TRUE' />
              <Values>
                100 times value
              </Values>
            </In>
            <Or>
              <In>
                <FieldRef Name='ID' LookupId='TRUE' />
                <Values>
                  100 times value
                </Values>
              </In>
              <In>
                <FieldRef Name='ID' LookupId='TRUE' />
                <Values>
                  <Value Type='Lookup'>3089</Value>
                </Values>
              </In>
            </Or>
          </Or>
        </Or>
      </Or>
    </Or>
  </Where>
</Query>
.

또한 댓글을 달 수는 없지만,이 유형의 상황에 직면 할 때 수행 한 것은 (예,이 제한이 발생 했음) & max of ID 을 사용하여 쿼리를 실행하는 것입니다.

<Where>
    <And>
        <Geq><FieldRef Name='ID' /><Value Type='Counter'>x</Value></Geq>
        <Leq><FieldRef Name='ID' /><Value Type='Counter'>y</Value></Leq>
    </And>
</Where>
.

그런 다음 ID가 실제로 열거 할 수없는 ID가있는 ID가있는 경우 LINQ를 사용하여 실제로 쿼리 결과에서 원하는 항목을 가져 오십시오.

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