Question

J'ai moins de 5000 articles dans ma bibliothèque.Je veux obtenir 530 articles par IDS.Donc, j'utilise la requête suivante.

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

Si j'utilise cette requête sur la liste, alors lors de l'itération SplistiTemCollection après une exception.

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() 

Si je réalise la requête avec des valeurs de l'opérateur moins de 500, SplistitemCollection ne jette pas une exception.

Caml dans l'opérateur a-t-il une limite de moins de 500 éléments égaux?Ou y a-t-il une autre meilleure approche.

Était-ce utile?

La solution

Ça ressemble vraiment à votre histoire, mais n'est-ce pas une solution de contournement assez facile pour cela?

<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>

et ainsi de suite, avec plus de nidification si plus de 1000 et ainsi de suite.

Autres conseils

ne peut pas commenter en raison d'un faible représentant, de poster comme une réponse, les puristes pardonnent.

Briser un 500 élément dans plusieurs étiquettes niches ne fonctionne pas, à mon désespoir.La limite est de 500 éléments durs apparemment.

J'ai essayé de rompre à l'aide d'une limite de 500 éléments, 400, 300, 200, 100 et la requête SPServices a échoué, retour: 500 Erreur de serveur interne avec le responsable suivant:

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

Essayer de mettre à jour 500 éléments au plus (avec une seule étiquette ou une rupture à l'aide d'une utilisation ou de 400, 300, 200, 100 éléments).Ensuite, la requête renvoie 200 succès.À ma connaissance, il devrait également y avoir une limite de nichée ou de balises.

J'utilise: 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");
        }
    }
});

Exemple de requête 5 * 100 + 1 qui échoue car il y a 501 éléments:

<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>

Ne peut également pas commenter, mais ce que j'ai fait lorsqu'il est confronté à ce type de situation (oui, j'ai rencontré cette limitation), est d'exécuter la requête en utilisant le Min & max d'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>

Ensuite, en supposant que j'ai les identifiants que je souhaite réellement dans un type d'énumérable, utilisez LINQ pour obtenir les éléments que vous souhaitez réellement des résultats de la requête.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top