web-dev-qa-db-fra.com

Un ou plusieurs types de champs ne sont pas installés correctement. Accédez à la page Paramètres de la liste pour supprimer ces champs

CamlQuery query = new CamlQuery();
query.ViewXml = @"<View>"
    + "<Query>"
    + "<Where><Eq><FieldRef Name='Name' /><Value Type='Text'>"
    + fileName
    + "</Value>"
    + "</Eq>"
    + "</Where>"
    + "</Query>"
    + "</View>";
ListItemCollection item = list.GetItems(query);
clientContext.Load(item);
clientContext.ExecuteQuery();

Cette requête m'a donné l'erreur n ou plusieurs types de champs ne sont pas correctement installés. Aller à la page Paramètres de la liste pour supprimer ces champs.

Si j'utilise <Where><Eq><FieldRef Name='Title' /><Value Type='Text'> au lieu de Name, ça va.

Qu'est ce qui ne va pas avec ça? Le nom est là dans la liste.

10
kevin

Si vous renommez une colonne définie, le nom interne ne se met pas à jour. Par exemple, vous créez une liste personnalisée, il a la colonne 'Titre' par défaut. Si vous modifiez cette colonne à, dites, 'userid', le nom interne de cette colonne est toujours "titre".

16
Brian Beech

Je ne sais pas que cela corrige ce message d'erreur, mais c'est ainsi que vous pouvez utiliser Nom:

Nom (pour une bibliothèque de documents hors de la boîte) Nom interne est "BasEname".

Vous pouvez utiliser PowerShell pour trouver des noms internes de toutes les colonnes sur une liste:

$web = Get-SPWeb http://yoursiteurl
$web.lists["The List Name"].Fields | FL Title, InternalName

exemple de requête:

$query.set_innerXML("<Where><Eq><FieldRef Name='BaseName'></FieldRef><Value Type='Text'>" + $ItemName + "</Value></Eq></Where>")

Exemple complet dans PowerShell:

function Update-SPItem($proxy, $ItemName, $listName, $lastModified, $firstName, $lastName, $chID, $emplNumber, )
{          
   $doc = New-Object System.Xml.XmlDocument
   $viewFields = $doc.CreateElement("ViewFields")
   $viewFields.set_innerXML("<FieldRef Name='ID'></FieldRef>")
   $queryOptions = $doc.CreateElement("QueryOptions")
   $queryOptions.set_innerXML("<IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns><DateInUtc>FALSE</DateInUtc><ViewAttributes Scope='RecursiveAll'/>")
   $query = $doc.CreateElement("Query")
   $query.set_innerXML("<Where><Eq><FieldRef Name='BaseName'></FieldRef><Value Type='Text'>" + $ItemName + "</Value></Eq></Where>")
   $results = $proxy.GetListItems($listName, "", $query, $viewFields, "", $queryOptions, "")
   $rowXml = $results.GetElementsByTagName("z:row")
   $ItemID = $rowXml.Item(0).GetAttribute("ows_ID")

   # Update the item
   $batch = $doc.CreateElement("Batch")
   $batch.SetAttribute("OnError", "Continue")
   $batch.SetAttribute("ListVersion","1")
   $batch.SetAttribute("ViewName", "")
   $batch.InnerXml = "<Method ID='1' Cmd='Update'><Field Name='ID'>" + $ItemID + 
                     "</Field><Field Name='ImageCreateDate'>" + $lastModified + 
                     "</Field><Field Name='FirstName'>" + $firstName + 
                     "</Field><Field Name='LastName'>" + $lastName + 
                     "</Field><Field Name='CardHolderID'>" + $chID + 
                     "</Field><Field Name='EmployeeNumber'>" + $emplNumber + 
                     "</Field></Method>"

   $result = $proxy.UpdateListItems($listName, $batch)
}
5
TJurgens

Si vous créez un champ via la page Paramètres de liste SharePoint 2010, tous les espaces du nom du champ deviendront des séquences de _x0020_ Pour le nom interne du champ. Outre les espaces, SharePoint codera d'autres caractères non standard de la même manière. Donc, vous verrez le nom que vous souhaitez sur la page Web de la liste, mais l'accès programmatique nécessitera que le nom interne construit par SharePoint (ils devraient nous autoriser à spécifier le nom interne ...)

Le commentaire de @marekkembrowski au Op============ Comment obtenir le nom interne à l'aide de votre navigateur.

2
Zarepheth

J'ai eu du mal à cela depuis trop longtemps et la réponse était juste devant moi. Pour moi, le commentaire que Marek Kembrowski a posté à la question initiale, était exactement ce que j'avais besoin de faire, mais j'ai vitré dessus parce que c'était un commentaire, alors je vais réitérer ce que Marek a dit à mes propres mots afin que j'espère que La personne suivante qui vient avec ce problème ne manquera pas le commentaire affiché ci-dessus.

Dans SharePoint, lorsque vous créez une colonne, il existe deux champs de texte dans lesquels vous donnez des informations pour décrire le champ, le nom de la colonne et la description.

enter image description here

Ce qui m'a tué, était que le site SharePoint a été configuré avec le nom de la colonne [OrderId] et une description différente [Con].

Ici, vous pouvez voir ce que SharePoint ressemble à la commande créée en premier et à la commande que j'ai créée après avoir compris le problème. . . La différence est l'un des noms de colonne de commande indiquant la commande.)

enter image description here

La seule façon de voir le nom de la colonne d'origine est de survoler la colonne dans les paramètres de la bibliothèque comme mentionné Marek ci-dessus. . . Cela montrera le lien au bas du navigateur. Si vous cliquez pour le modifier. . . Ce n'est même pas juste. . . ne montre même rien sur le vrai nom de colonne. . .Egen montre le nom de description dans le champ Nom de la colonne. . . Ggrrrrrrr !!!!!

Quoi qu'il en soit, voici le code que j'ai utilisé pour récupérer les données:

        // Starting with ClientContext, the constructor requires a URL to the 
        // server running SharePoint. 
        ClientContext context = new ClientContext(siteUrl);

        // The SharePoint web at the URL.
        Web web = context.Web;

        List docList = context.Web.Lists.GetByTitle("OrderDocuments");

        CamlQuery query2 = new CamlQuery();

        //This query will NOT work . . .CON is not a column in the sharepoint repository
        //query2.ViewXml = "<View><Query><Where><Eq><FieldRef Name='CON' /><Value Type='Number'>4</Value></Eq></Where></Query></View>";

        //This query WILL WORK.  The actual Column name is OrderID in Sharepoint
        query2.ViewXml = "<View><Query><Where><Eq><FieldRef Name='OrderID' /><Value Type='Number'>4</Value></Eq></Where></Query></View>";
        ListItemCollection collListItem = docList.GetItems(query2);

        context.Load(collListItem);
        context.ExecuteQuery();

+1 à Marek pour la solution correcte ci-dessus. J'aurais aimé l'avoir vu la première fois que j'ai trouvé cette page.

1
armstb01

Je suppose que le problème que vous avez n'est pas le <FieldRef Name='Name' /> mais le <Value Type='Text'>. Si vous cochez le champ Type de nom, vous trouverez que c'est un fichier. Si quelqu'un sait comment interroger que je serais aussi reconnaissant. Pour l'instant j'utilise le titre.

1
Hu9o

Le même message d'erreur est affiché pour une requête mal construite telle que celles qui n'ont pas les étiquettes les plus hautes autour des éléments de frère de soeur.

Ils interrogent:

<Where><Contains><FieldRef Name='...' /><Value Type='Text'>Foobar</Value></Contains></Where><OrderBy><FieldRef Name='Modified' /></OrderBy>

donnerait ce même message d'erreur, mais pas:

<View><Where><Contains><FieldRef Name='...' /><Value Type='Text'>Foobar</Value></Contains></Where><OrderBy><FieldRef Name='Modified' /></OrderBy></View>
1