2015-08-31 1 views
0

j'ai un problème avec notre outil Voyage basé sur SharePoint 2013.Impossible de créer listitem via le repos api en sharepoint2013 avec contribuer les droits

Cet outil se compose de différents types de contenu - tous dans leurs listes spécifiques (demandes de voyage, des voyages en train , vols, etc.). Deux groupes principaux utilisent cet outil: les employés (contribuer) et le personnel administratif (contrôle total). Sur la homepage.aspx, nous avons un ScriptEditorWebpart avec un bouton HomePageNewItem personnalisé et un ListView des demandes de voyage. Lorsque l'utilisateur clique sur le bouton personnalisé, un nouvel élément ListItem est créé via l'API REST et le fichier EditForm.aspx de l'élément ListItem actuellement créé s'affiche.

Quel est le problème?

Cela fonctionne très bien pour le personnel administratif (contrôle total). Lorsque les employés essaient de créer un ListItem, le message d'erreur suivant s'affiche: HRESULT: 0x80131904 (renvoyant à partir de l'API REST). La même chose se produit, lorsque les employés visitent certaines des listes. Le ListView n'est pas affiché, mais il y a le même message d'erreur.

Quelques informations supplémentaires

  • La base de données SQL a assez de stockage sur toutes les partitions
  • Lorsqu'un employé utilise la norme « Nouvel élément » bouton, tout fonctionne très bien (sauf ListView)
  • Lorsqu'un employé est déplacé vers le groupe de personnel administratif, tout fonctionne très bien
  • Toutes les listes ont les autorisations correctes définies
  • Cela a fonctionné une semaine avant et il n'y avait pas de changements dans le code , seulement quelques personnalisations de sites, par ex. homepage.aspx)

Indications complémentaires

pourrait-il a quelque chose à voir avec la définition du site?

La fonction qui crée l'élément de liste

function createListItem(listName, newItem, success) { 
    var itemType = getItemTypeForListName(listName); 
     newItem.__metadata = { "type": itemType } 

     $.ajax({ 
      url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items", 
      type: "POST", 
      contentType: "application/json;odata=verbose", 
      data: JSON.stringify(newItem), 
      headers: { 
       "Accept": "application/json;odata=verbose", 
       "X-RequestDigest": $("#__REQUESTDIGEST").val() 
      }, 
      success: function (data) { 
       success(data); 
      }, 
      error: function (data) { 
       var errorMessage = JSON.parse(data.responseText).error.message.value; 
       var statusId; 

       statusId = SP.UI.Status.addStatus("Hoppla:", errorMessage); 
       SP.UI.Status.setStatusPriColor(statusId, "Blue"); 
       setTimeout(function() { SP.UI.Status.removeStatus(statusId); },10000); 
      } 
     }); 
    } 

function getItemTypeForListName(name) { 
     return "SP.Data." + name.charAt(0).toUpperCase() + name.split(" ").join("").slice(1) + "ListItem"; 
    } 

Merci à l'avance Benjamin

Répondre

0

Vérifiez l'élément compte dans la liste. S'il y a plus de 5000 éléments (aka Threshold Limit) dans la liste, il est possible de recevoir des erreurs similaires en utilisant REST ou cela peut être une gamme de problèmes possibles Vous pouvez essayer l'une des étapes suivantes pour connaître la cause exacte:

  1. Vérifiez les journaux ULS pour un message d'erreur plus détaillé.
  2. Essayez de désactiver la limitation pour la liste. Utilisez PowerShell pour définir la propriété EnableThrottling pour la SPList à $false.
  3. Parfois, d'autres problèmes de limitation peuvent apparaître. Essayez d'augmenter les limites de limitation pour l'application Web. comme augmenter le nombre maximum de colonnes de recherche pour la liste. Allez dans Administration centrale -> Applications Web -> Limitation des ressources et augmentez les limites de limitation.
  4. Supprimez certains champs pour les tests. Essayez de jouer autour de la suppression de certains champs, en particulier les recherches, les champs d'utilisateur ou de date.
  5. Modifiez votre requête REST et ne prenez qu'un ou quelques éléments de la liste.

Essayez quelque chose comme ceci:

"/_api/web/lists/getbytitle('" + listName + "')/items?$top=5" 

ou

"/_api/web/lists/getbytitle('" + listName + "')/items(1)",