访问sharepoint列表项时SharePoint对象模型中的问题?

时间:2010-04-15 10:51:50

标签: sharepoint object model

我刚写了

使用(SPSite site = SPContext.Current.Site)                   {                       使用(SPWeb web = site.OpenWeb())                       {                           // SPList lst = web.Lists [“ManagerInfo”];                           SPList lst = web.Lists [strlist];

                      SPQuery getUserNameQuery = new SPQuery();
                      // getUserNameQuery.Query = "<Where><And><Eq><FieldRef Name=\"Region\" /><Value Type=\"Text\">" + strRegion + "</Value></Eq><And><Eq><FieldRef Name=\"PM_x0020_First_x0020_Name\" /><Value Type=\"Text\">" + pmFName + "</Value></Eq><Eq><FieldRef Name=\"PM_x0020_Last_x0020_Name\" /><Value Type=\"Text\">" + pmLname + "</Value></Eq></And></And></Where>";
                       // getUserNameQuery.Query = "<Where><And><Eq><FieldRef Name=\"PM_x0020_First_x0020_Name\" /><Value Type=\"Text\">" + pmFName + "</Value></Eq><Eq><FieldRef Name=\"PM_x0020_Last_x0020_Name\" /><Value Type=\"Text\">" + pmLname + "</Value></Eq></And></Where>";

                       getUserNameQuery.Query = "<Where><Eq><FieldRef Name=\"PM_x0020_Name\" /><Value Type=\"Text\">" + loginName  + "</Value></Eq></Where>";

                      SPListItemCollection items = lst.GetItems(getUserNameQuery);
                      foreach (SPListItem item in items)
                      {
                          managerFName = item["Manager Name"].ToString();
                          strAccounting = item["Accounting"].ToString();

                          managerFName = managerFName.Replace(".", " ");
                          strAccounting = strAccounting.Replace(".", " ");
                          // isFound = true;
                          XPathNavigator managerName = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:txtManagerName", NamespaceManager);
                          managerName.SetValue(managerFName);
                          XPathNavigator accountingName = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:txtAccountingName", NamespaceManager);
                          accountingName.SetValue(strAccounting);
                      }

} }

我在infopath中使用了这个代码,这个infopath正在被所有users.os使用。当前登录用户对列表没有权限时显示错误。当前登录用户具有完全权限时它正在工作。 所以请告诉我我能做些什么来为所有用户工作。

2 个答案:

答案 0 :(得分:2)

使用此

使用(SPSite site = SPContext.Current.Site){}

你正在处理你不应该做的SPContext.Current.Site。考虑到Don的建议,试试这个

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite site = new SPSite(SPContext.Current.Site.ID))
    {
        using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID))
        {

            //SPList lst = web.Lists["ManagerInfo"]; 
            SPList lst = web.Lists[strlist];

            SPQuery getUserNameQuery = new SPQuery();
            // getUserNameQuery.Query = "<Where><And><Eq><FieldRef Name=\"Region\" /><Value Type=\"Text\">" + strRegion + "</Value></Eq><And><Eq><FieldRef Name=\"PM_x0020_First_x0020_Name\" /><Value Type=\"Text\">" + pmFName + "</Value></Eq><Eq><FieldRef Name=\"PM_x0020_Last_x0020_Name\" /><Value Type=\"Text\">" + pmLname + "</Value></Eq></And></And></Where>"; 
            // getUserNameQuery.Query = "<Where><And><Eq><FieldRef Name=\"PM_x0020_First_x0020_Name\" /><Value Type=\"Text\">" + pmFName + "</Value></Eq><Eq><FieldRef Name=\"PM_x0020_Last_x0020_Name\" /><Value Type=\"Text\">" + pmLname + "</Value></Eq></And></Where>"; 

            getUserNameQuery.Query = "<Where><Eq><FieldRef Name=\"PM_x0020_Name\" /><Value Type=\"Text\">" + loginName + "</Value></Eq></Where>";

            SPListItemCollection items = lst.GetItems(getUserNameQuery);
            foreach (SPListItem item in items)
            {
                managerFName = item["Manager Name"].ToString();
                strAccounting = item["Accounting"].ToString();

                managerFName = managerFName.Replace(".", " ");
                strAccounting = strAccounting.Replace(".", " ");
                // isFound = true; 
                XPathNavigator managerName = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:txtManagerName", NamespaceManager);
                managerName.SetValue(managerFName);
                XPathNavigator accountingName = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:txtAccountingName", NamespaceManager);
                accountingName.SetValue(strAccounting);
            }
        }
    }
});

答案 1 :(得分:0)

相关问题