如何以编程方式更新infopath表单库项目字段?

时间:2010-09-16 06:24:01

标签: sharepoint infopath

我成功地使用sharepoint对象模型从库 infopath 更新其中一个字段(类型为boolean),就好像它是一个列表项一样。

但是对于另一个text类型的字段,相同的代码只是被执行但不会改变字段值!

我正在使用以下代码,该代码适用于该布尔字段,但对于另一个字符串类型的字段,不确定它为什么不起作用。有什么想法吗?

SPSecurity.RunWithElevatedPrivileges(delegate()

{ 
SPWeb web;

SPSite site = new SPSite("http://sharepointsite"); 
web = site.OpenWeb();

SPList formLibList = web.Lists["FormLibraryName"];

SPQuery query = new SPQuery(); query.Query = "<Where><Eq><FieldRef Name='Title' /><Value Type='Text'>" + titleName + "</Value></Eq></Where>"; 
web.Site.WebApplication.FormDigestSettings.Enabled = false;

web.AllowUnsafeUpdates = true; 
SPListItemCollection col = formLibList.GetItems(query);

if (col.Count > 0) 
{

col[0]["CustomerName"] = "test customer name"; 
col[0].Update();

}

web.Site.WebApplication.FormDigestSettings.Enabled = true; web.AllowUnsafeUpdates = false; 
});

谢谢,

尼基尔

2 个答案:

答案 0 :(得分:0)

我必须声明SPListItem并设置它而不是直接修改列表项集合。

答案 1 :(得分:0)

这不是您问题的答案(您已经自己找到了解决方案),但您可能希望将SPSite和SPWeb对象放在使用块中。在您的示例代码中,您没有处理它们,这会导致内存泄漏。正确的方法是这样的:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite site = new SPSite("http://sharepointsite"))
    {
        using (SPWeb web = site.OpenWeb())
        {
            // the rest of your code
        }
    }
});