0

SharePoint リスト Web サービスを呼び出して SharePoint リストを更新するためのカスタム送信コードを含む InfoPath フォームがあります。コードは例外なく実行され、ブレークポイントを設定して、Web サービスに送信する前に変数に正しい値が含まれていることを確認できました。ただし、値が SharePoint リストに追加されることはありません。これが私のコードです:

[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;
        }
    }
4

4 に答える 4

1

わかりました、私はついにこのばかげたバグを理解しました。サブサイトでアクセスしようとしていたリストと同じ表示名のリストがルート SharePoint サイトにありました。サービス参照がサブサイトにある Lists Web サービスを指していても、間違ったリストを返していました。リストに内部名を使用しましたが、機能するようになりました。

于 2009-07-31T15:41:01.963 に答える
0

私の問題に対する部分的な答えを見つけました。作業中のサブサイトにサービス参照を追加すると、何らかの理由で app.config にルート SharePoint サイトへの参照がまだ含まれていました。したがって、探していたリストは存在しませんでした。しかし今、私は別の問題を抱えています。UpdateListItems() 呼び出しの戻り値を確認すると、「1 つ以上のフィールド タイプが正しくインストールされていません。リスト設定ページに移動して、これらのフィールドを削除してください。」私は周りを検索しましたが、このエラーを引き起こすすべての問題には、フィールド名にスペースが含まれているようです。ただし、どちらのフィールドにもスペースがありません。これが私の更新されたコードです:

        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);
于 2009-07-30T20:04:33.573 に答える
0

MSDNのドキュメントから:中かっこで囲まれたリスト GUID (つまり、"{GUID}") を使用することをお勧めしますが、リスト表示名を使用することもできます。

これらの中括弧があなたの呼び出しに欠けているようです。

于 2009-07-30T18:46:46.383 に答える