2009-08-19 3 views
2

in Sharepoint, wenn eine Liste zu aktualisieren, ich versucht, die Störung erhalte:0x81020014Ein oder mehrere Feldtypen sind nicht ordnungsgemäß installiert. Gehen Sie auf die Liste Einstellungen Seite löschen Sie diese Felder

0x81020014One or more field types are not installed properly. Go to the list settings page to delete these fields. 

Die Caml, die erstellt wird, ist:

<Batch PreCalc='TRUE' OnError='Continue'> 
    <Method ID='1' Cmd='Update'> 
     <Field Name='ID'>4</Field> 
     <Field Name='Flagged'>False</Field> 
    </Method> 
</Batch> 

Als ich starte das Caml von U2U es funktioniert gut und das Feld aktualisiert sich. Wenn ich meinen Code in VS debugge, erhalte ich den obigen Fehler.

Der Code zu schaffen und die Batch-Aufruf ist unter:

var ws = new com.freud.intranet.lists.Lists { 
    Url = WebServiceHelper.wsContactsList, 
    Credentials = WebServiceHelper.AdminCredentials 
}; 
var batch = "<Batch PreCalc='TRUE' OnError='Continue'><Method ID='1' cmd='Update'><Field Name='ID'>" + contactID 
      + "</Field><Field Name='Flagged'>" + flag + "</Field></Method></Batch>"; 
var document = new XmlDocument(); 
var stringReader = new StringReader(batch); 
var xmlReader = XmlReader.Create(stringReader); 
var node = document.ReadNode(xmlReader); 
ws.UpdateListItems("Master Contact Joining Table", node); 

Warum sollte die caml Arbeit in U2U und nicht in VS?

Vom googlen könnte das Problem sein, weil ich nicht die internen Namen verwende, aber es läuft in U2U, weshalb ich verwirrt bin.

Antwort

1

Ich benutzte die falsche Liste im Code daher der Fehler.

2

Der Trick bei der Arbeit mit einer Liste besteht darin, den Webdienststandort korrekt zu ermitteln, die URL im referenzierten Webdienst auf den korrekten Speicherort zu setzen und die Namen der Felder so zu verwenden, wie sie in der Liste definiert sind.

private void ReadTaskandAddtask() 
    { 
     try 
     { 
      tcfifsharepoint.Lists listServiceBase = new tcfifsharepoint.Lists(); 

      // SharePoint Web Serices require authentication 
      listServiceBase.Credentials = System.Net.CredentialCache.DefaultCredentials; 
      listServiceBase.Url = "http://SPServer/Site/_vti_Bin/lists.asmx"; 

      String newIssueTitle = "Programmatically added issue 3"; 

      String listGUID = "FC519894-509A-4B66-861E-2813DDE14F46"; 
      String activeItemViewGUID = "C93FFC02-368B-4D06-A8AE-3A3BA52F4F0C"; 
      listGUID = "{FC519894-509A-4B66-861E-2813DDE14F46}"; 
      activeItemViewGUID = "{DCF35B63-F85C-463B-B1A1-716B4CF705C5}"; 

      // first check if item is already in the list 
      XmlNode activeItemData = listServiceBase.GetListItems(listGUID, activeItemViewGUID, null, null, "", null, ""); 
      if (!activeItemData.InnerXml.Contains(newIssueTitle)) 
      { 
       //*********************This is Working ********************************* 
       StringBuilder sb_method = new StringBuilder(); 
       sb_method.Append("<Method ID=\"1\" Cmd=\"New\">"); 
       sb_method.Append("<Field Name=\"Title\">Some Title 14</Field>"); 
       sb_method.Append("<Field Name=\"AssignedTo\">Name to assign</Field>"); 
       sb_method.Append("<Field Name=\"Status\">In Progress</Field>"); 
       sb_method.Append("<Field Name=\"Priority\">(3) Low</Field>"); 
       sb_method.Append("<Field Name=\"DueDate\">"); 
       sb_method.Append(DateTime.Parse(DateTime.Now.ToString()).ToString("yyyy-MM-ddTHH:mm:ssZ")); 

       sb_method.Append("</Field>"); 
       sb_method.Append("<Field Name=\"PercentComplete\">.34</Field>"); 
       sb_method.Append("<Field Name=\"Body\">Something entered into the description field.</Field>"); 
       sb_method.Append("<Field Name=\"Author\">Your Author</Field>"); 
       sb_method.Append("<Field Name=\"Editor\">This is Modified By</Field>"); 
       sb_method.Append("</Method>"); 

       XmlDocument x_doc = new XmlDocument(); 

       XmlElement xe_batch = x_doc.CreateElement("Batch"); 
       xe_batch.SetAttribute("OnError", "Return"); 
       xe_batch.InnerXml = sb_method.ToString(); 

       XmlNode xn_return = listServiceBase.UpdateListItems("Task List Name", xe_batch); 
     } 
     catch (Exception e) 
     { 
      string sMessage = e.Message; 

     } 
    } 

Sie können die internen Namen für die Listeneinträge (Spalten) in der Sharepoint-Liste verwendet sehen, indem Sie die „Einstellungen“ die Auswahl nach unten ziehen und das „Listeneinstellungen“ Item auswählen. Klicken Sie in den Listeneinstellungen auf eine Spalte und dann auf die URL, um das Feld = Name anzuzeigen. Das ist der Name, den Sie beim Erstellen Ihrer Felder verwenden müssen.

0

Sie können auch versuchen, SharePoint Designer zu öffnen und einen Blick auf ein Listenformular oder eine Ansicht zu werfen.

Wenn Sie eine Weile herumjagen, finden Sie die Liste GUID, View GUID, und folgen Sie alle Spalten der Liste. Das Suchen in SPD ist besonders nützlich, wenn Sie Listenelemente mit GetListItems abrufen und die XML mit "ows_" + ColumnName analysieren müssen.

Verwandte Themen