繁体   English   中英

在启用浏览器的表单中将重复的InfoPath表提交到Sharepoint列表

[英]Submitting Repeating InfoPath Table to Sharepoint list in Browser Enabled Form

希望您能提供帮助。 我正在使用一个启用了浏览器的InfoPath 2010表单,该表单位于SharePoint网站(2007和2010)上的文档库中。 在此表单中,有一个重复表,其中包含需要出于报告目的而捕获的数据。 我选择的解决方案是使用内置的SharePoint list.asmx Web服务将重复表中的行写入同一网站集中同等SharePoint网站上的单独列表中。 我使用此处的步骤http://msdn.microsoft.com/zh-cn/library/cc162745(v=office.12).aspx作为我的基准。

直接从InfoPath表单客户端站点运行时,我已经完成所有设置并可以正常工作。 表单打开,提交后,重复表中的行被写入SharePoint列表,没有任何问题。 但是,一旦我通过Central Admin部署并测试了表单,重复表中的所有行都不会写入列表。 没有错误或任何指示代码有问题的信息,并且用于表示是否已上传行的布尔值字段设置为true。

我首先想到的是某处的权限存在问题。 也许从客户端调用该服务时会传递我的凭据,但是从服务器通过文档库运行时会使用其他内容吗? 它不应该使用用于访问SharePoint的凭据(也是我的AD凭据)吗? 在代码中调用list.asmx Web服务时,是否可以指定使用当前用户AD凭据的方法?

无论如何,不​​是很确定与此相关的其他地方。 一般而言,我所做的任何搜索都具有与提交到SharePoint列表的两个文档相同的方式。 任何帮助将不胜感激。 以下是我用来完成此操作的代码。

if (MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:ShippingInformation/my:ShipDate", NamespaceManager).Value != "")
            {
                // If Ship Date is not blank, upload items in Material used to SP List where ForQuote is False
                // Quote Number, RMA Number, Ship Date, Unit S/N,

                // Create a WebServiceConnection object for submitting 
                // to the Lists Web service data connection.
                WebServiceConnection wsSubmit =
                   (WebServiceConnection)this.DataConnections["Material Web Service Submit"];

                //Create XPathNodeIterator object for the new Material Lines
                XPathNodeIterator MaterialLines = this.MainDataSource.CreateNavigator().Select("/my:myFields/my:RepairQuote/my:QuoteLines/my:QuoteLine", NamespaceManager);
                int lineCount = 0;

                foreach (XPathNavigator NewLines in MaterialLines)
                {
                    lineCount += 1;
                    if (NewLines.SelectSingleNode(".//my:ForQuote", NamespaceManager).Value == "false" && NewLines.SelectSingleNode(".//my:LineSubmitted", NamespaceManager).Value == "false")
                    {
                        // Set the values in the Add List Item Template 
                        // XML file using the values in the new row.
                        DataSources["AddListItemTemplate"].CreateNavigator().SelectSingleNode("/Batch/Method/Field[@Name='Title']", NamespaceManager).SetValue(NewLines.SelectSingleNode(".//my:lineItem", NamespaceManager).Value);
                        DataSources["AddListItemTemplate"].CreateNavigator().SelectSingleNode("/Batch/Method/Field[@Name='RMANumber']", NamespaceManager).SetValue(MainDataSource.CreateNavigator().SelectSingleNode("./my:myFields/my:EntitlementContainer/my:RMANumber", NamespaceManager).Value);
                        DataSources["AddListItemTemplate"].CreateNavigator().SelectSingleNode("/Batch/Method/Field[@Name='UnitSerialNumber']", NamespaceManager).SetValue(MainDataSource.CreateNavigator().SelectSingleNode("./my:myFields/my:EntitlementContainer/my:serialNumber", NamespaceManager).Value);
                        DataSources["AddListItemTemplate"].CreateNavigator().SelectSingleNode("/Batch/Method/Field[@Name='ShipDate']", NamespaceManager).SetValue(MainDataSource.CreateNavigator().SelectSingleNode("./my:myFields/my:ShippingInformation/my:ShipDate", NamespaceManager).Value);
                        DataSources["AddListItemTemplate"].CreateNavigator().SelectSingleNode("/Batch/Method/Field[@Name='OrderType']", NamespaceManager).SetValue(MainDataSource.CreateNavigator().SelectSingleNode("./my:myFields/my:RepairQuote/my:orderType", NamespaceManager).Value);
                        DataSources["AddListItemTemplate"].CreateNavigator().SelectSingleNode("/Batch/Method/Field[@Name='QuoteNumber']", NamespaceManager).SetValue(MainDataSource.CreateNavigator().SelectSingleNode("./my:myFields/my:RepairQuote/my:quoteNumber", NamespaceManager).Value);
                        DataSources["AddListItemTemplate"].CreateNavigator().SelectSingleNode("/Batch/Method/Field[@Name='LineQuantity']", NamespaceManager).SetValue(NewLines.SelectSingleNode(".//my:lineQuantity", NamespaceManager).Value);
                        DataSources["AddListItemTemplate"].CreateNavigator().SelectSingleNode("/Batch/Method/Field[@Name='LineNumber']", NamespaceManager).SetValue(lineCount.ToString());

                        // Set the value of Cmd attribute to "New".
                        DataSources["AddListItemTemplate"].CreateNavigator().SelectSingleNode("/Batch/Method/@Cmd", NamespaceManager).SetValue("New");

                        // Submit the new row.
                        wsSubmit.Execute();
                        NewLines.SelectSingleNode(".//my:LineSubmitted", NamespaceManager).SetValue("true");
                    }

                }
            }

我不确定为什么在部署和调用代码中的列表Web服务时代码不起作用。 但是我建议您尝试调试它以解决问题的根源:

循序渐进–使用Visual Studio 2010调试在SharePoint 2010上部署的InfoPath 2010表单

请尝试一下并逐步解决它,看看它是否按预期方式通过了代码。

好吧,我不确定这是否是答案,但我认为问题与站点的安全性有关。 我通过使用SharePoint对象模型而不是Web服务来创建列表项来解决此问题(请参阅http://www.bizsupportonline.net/browserforms/how-to-use-sharepoint-object-model-submit-data- infopath-browser-form-sharepoint-list.htm )。 通过SharePoint对象模型,我可以使用AllowUnsafeUpdates。 另外,我花了很多时间来设置Web服务,包括数据连接,CAML文件等。但是,这种方式只花了几分钟。 经验教训,请尽可能使用SharePoint对象模型。

foreach (XPathNavigator NewLines in MaterialLines)
                {
                    lineCount += 1;
                    if (NewLines.SelectSingleNode(".//my:ForQuote", NamespaceManager).Value == "false" && NewLines.SelectSingleNode(".//my:LineSubmitted", NamespaceManager).Value == "false")
                    {

                        using (SPSite site = SPContext.Current.Site)
                        {
                            if (site != null)
                            {
                                using (SPWeb web = site.OpenWeb())
                                {
                                    // Turn on AllowUnsafeUpdates on the site
                                    web.AllowUnsafeUpdates = true;

                                    // Update the SharePoint list based on the values
                                    // from the InfoPath form
                                    SPList list = web.GetList("/Lists/InfoPathRtpItems");

                                    if (list != null)
                                    {
                                        SPListItem item = list.Items.Add();
                                        item["Title"] = NewLines.SelectSingleNode(".//my:lineItem", NamespaceManager).Value;
                                        item["RMANumber"] = MainDataSource.CreateNavigator().SelectSingleNode("./my:myFields/my:EntitlementContainer/my:RMANumber", NamespaceManager).Value;
                                        item["UnitSerialNumber"] = MainDataSource.CreateNavigator().SelectSingleNode("./my:myFields/my:EntitlementContainer/my:serialNumber", NamespaceManager).Value;
                                        item["ShipDate"] = MainDataSource.CreateNavigator().SelectSingleNode("./my:myFields/my:ShippingInformation/my:ShipDate", NamespaceManager).Value;
                                        item["OrderType"] = MainDataSource.CreateNavigator().SelectSingleNode("./my:myFields/my:RepairQuote/my:orderType", NamespaceManager).Value;
                                        item["QuoteNumber"] = MainDataSource.CreateNavigator().SelectSingleNode("./my:myFields/my:RepairQuote/my:quoteNumber", NamespaceManager).Value;
                                        item["LineQuantity"] = NewLines.SelectSingleNode(".//my:lineQuantity", NamespaceManager).Value;
                                        item["LineNumber"] = lineCount.ToString();
                                        item.Update();
                                    }

                                    // Turn off AllowUnsafeUpdates on the site
                                    web.AllowUnsafeUpdates = false;

                                    // Close the connection to the site
                                    web.Close();
                                }

                                // Close the connection to the site collection
                                site.Close();
                            }
                        }
                    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM