Frage

Ich habe ein InfoPath-Formular mit benutzerdefinierten Code einreichen, um eine Sharepoint-Liste zu aktualisieren, indem Sie die Sharepoint-Listen Web-Service-Aufruf. Der Code läuft ohne Ausnahmen, und ich war in der Lage Breakpoints zu setzen, um sicherzustellen, dass die Variablen die richtigen Werte enthalten, bevor an den Webdienst gesendet werden. Die Werte nie in der Sharepoint-Liste hinzugefügt, though. Hier ist mein Code:

[InfoPathEventHandler(MatchPath = "Submit", EventType = InfoPathEventType.OnClick)]
    public void Submit_OnClick(DocActionEvent e)
    {
        ListsService.Lists listService = new Risk_Form.ListsService.Lists();
        listService.Credentials = System.Net.CredentialCache.DefaultCredentials;

        string riskID = thisXDocument.DOM.selectSingleNode("//my:myFields/my:RiskID").text;
        string headline = thisXDocument.DOM.selectSingleNode("//my:myFields/my:RiskHeadline").text;

        XmlDocument doc = new XmlDocument();
        XmlElement batch = doc.CreateElement("Batch");
        batch.SetAttribute("OnError", "Continue");
        batch.SetAttribute("ListVersion", "1");

        batch.InnerXml = 
            "<Method ID='" + riskID + "' Cmd='New'>" +
                "<Field Name='RiskID'>" + riskID + "</Field>" +
                "<Field Name='Headline'>" + headline + "</Field>" + 
            "</Method>";
        try
        {
            // Update list using the list's GUID
            listService.UpdateListItems("2F6CA5F4-D78A-4716-B111-507917CF89E4", batch);
        }
        catch(Exception ex)
        {
            thisXDocument.DOM.selectSingleNode("//my:myFields/my:RiskStatement").text = ex.Message;
        }
    }
War es hilfreich?

Lösung 2

Ok, ich diese dummen Fehler endlich herausgefunden. Es gab eine Liste auf der Root-Sharepoint-Website mit dem gleichen Anzeigenamen wie die Liste Ich versuche, wurde auf meiner Subsite zuzugreifen. Auch wenn mein Dienst Bezug auf die Listen Web-Service befindet sich auf meinem Subsite zeigte, war es immer noch die falsche Liste zurück. Früher habe ich den internen Namen für meine Liste und jetzt funktioniert es.

Andere Tipps

Zwei Dinge:

  1. Sie müssen möglicherweise auch die Standardansicht ID in Batch, wenn Updatelist () aufrufen.

  2. Statt die Liste guid von hartzucodieren, können Sie es programmatisch erhalten durch listService.GetListAndView () aufrufen.

Hier ist ein Code, beide Elemente zeigen:

System.Xml.XmlNode ndListView = listService.GetListAndView(DISPLAYNAMEOFLIST, "");
string listGuid = ndListView.ChildNodes[0].Attributes["Name"].Value;
string listView = ndListView.ChildNodes[1].Attributes["Name"].Value;

batch.SetAttribute("ViewName", listView);

Sie können dann rufen Sie einfach Updatelist () mit listGuid und Charge.

Aus der Dokumentation auf MSDN : < em> Es wird empfohlen, dass Sie die Liste GUID von geschweiften Klammern verwenden (dh „{GUID}“), aber Sie können auch die Listenanzeige Namen verwenden.

Diese geschweiften Klammern scheinen in Ihrem Anruf zu fehlen.

fand ich eine partielle Antwort auf mein Problem. Wenn ich den Dienst Verweis auf die Subsite hinzugefügt an dem ich arbeite, aus irgendeinem Grunde app.config enthielt noch einen Verweis auf die Root-Sharepoint-Website. Deshalb ist die Liste, die ich suchte gab es nicht. Jetzt habe ich ein anderes Problem, though. Ich überprüfe den Rückgabewert der Updatelist () -Aufruf, und ich erhalte die folgende Fehlermeldung: „Ein oder mehr Feldtypen nicht korrekt installiert sind Gehen Sie auf die Liste Einstellungen Seite diese Felder zu löschen..“ Ich suchte herum und alle Probleme, die diesen Fehler verursachen scheinen in ihm einen Feldnamen mit einem Raum zu beteiligen hat. Keines meiner Felder haben Räume in ihnen, though. Hier ist meine aktualisierte Code:

        ListsService.Lists listService = new Risk_Form.ListsService.Lists();
        listService.Credentials = System.Net.CredentialCache.DefaultCredentials;
        XmlNode list = null;

        list = listService.GetListAndView("Risks", "");

        string listID = list.ChildNodes[0].Attributes["Name"].Value;
        string viewID = list.ChildNodes[1].Attributes["Name"].Value;

        string riskID = thisXDocument.DOM.selectSingleNode("//my:myFields/my:RiskID").text;
        string headline = thisXDocument.DOM.selectSingleNode("//my:myFields/my:RiskHeadline").text;

        XmlDocument doc = new XmlDocument();
        XmlElement batch = doc.CreateElement("Batch");
        batch.SetAttribute("OnError", "Continue");
        batch.SetAttribute("ListVersion", "1");
        batch.SetAttribute("ViewName", viewID);

        batch.InnerXml = 
            "<Method ID='1' Cmd='New'>" +
                "<Field Name='RiskID'>" + riskID + "</Field>" +
                "<Field Name='Headline'>" + headline + "</Field>" + 
            "</Method>";

        XmlNode ret = listService.UpdateListItems(listID, batch);
        MessageBox.Show(ret.OuterXml);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top