سؤال

لدي نموذج InfoPath مع العرف إرسال رمز إلى تحديث قائمة Sharepoint عن طريق استدعاء قوائم Sharepoint خدمة ويب.الكود يعمل دون أي استثناءات, وكنت قادرا على وضع نقاط التوقف للتأكد من أن المتغيرات التي تحتوي على القيم الصحيحة قبل إرسالها إلى خدمة ويب.قيم أبدا الحصول على إضافة إلى قائمة 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;
        }
    }
هل كانت مفيدة؟

المحلول 2

وطيب، أنا برزت أخيرا هذا الخطأ غبي خارج. كانت هناك قائمة على موقع شير الجذر مع نفس اسم العرض كقائمة كنت أحاول الوصول على بلدي فرعي. على الرغم من بلدي إشارة خدمة أشارت إلى الخدمة قوائم على شبكة الإنترنت تقع على بلدي فرعي، كان لا يزال عودته قائمة خاطئة. لقد استخدمت اسم داخلي لقائمتي والآن يعمل.

نصائح أخرى

أمرين:

  1. قد تحتاج أيضا إلى طريقة العرض الافتراضية ID الخاص بك في دفعة عند استدعاء UpdateListItems().

  2. بدلا من hardcoding قائمة guid, يمكنك الحصول على ذلك برمجيا عن طريق الاتصال listService.GetListAndView().

هنا بعض التعليمات البرمجية إلى إظهار كل من البنود:

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);

ثم يمكنك فقط استدعاء UpdateListItems() مع listGuid دفعة.

ومن وثائق حول MSDN : < م> من المستحسن أن استخدام GUID قائمة محاطة بأقواس مجعد (أي "{GUID}")، ولكن يمكنك أيضا استخدام اسم قائمة العرض.

ويبدو أن تلك الأقواس المعقوفة في عداد المفقودين في مكالمتك.

ولقد وجدت إجابة جزئية لمشكلتي. عندما أضفت المرجع خدمة إلى الموقع الفرعي وأنا أعمل على، لسبب ما app.config لا يزال يتضمن إشارة إلى موقع SharePoint الجذر. وبالتالي فإن القائمة كنت أبحث عنه لم تكن موجودة. الآن أواجه مشكلة أخرى، وإن كان. I تحقق قيمة الإرجاع من UpdateListItems () دعوة، وأحصل على الخطأ التالي: "لم يتم تثبيت واحد أو أكثر أنواع الحقول بشكل صحيح انتقل إلى صفحة إعدادات القائمة لحذف هذه المجالات". لقد بحثت في جميع أنحاء وجميع المشاكل التي تسبب هذا الخطأ يبدو أن تنطوي على وجود اسم الحقل مع مساحة فيه. لم يكن أي من المجالات بلدي لديها مساحات في نفوسهم، وبالرغم من ذلك. هنا هو قانون بلدي تحديث:

        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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top