【问题标题】:Problem in SharePoint Object model when accessing the sharepoint list items?访问共享点列表项时,SharePoint 对象模型出现问题?
【发布时间】:2011-02-08 07:55:51
【问题描述】:

我写的

使用(SPSite 站点 = 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 使用,当当前登录用户对它显示错误的列表没有权限时。当当前登录用户有完全权限时,它正在工作。 所以请告诉我我该怎么做才能为所有用户使用它们。

【问题讨论】:

    标签: sharepoint object model


    【解决方案1】:

    通过使用这个

    使用(SPSite 站点 = 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);
                }
            }
        }
    });
    

    【讨论】:

      【解决方案2】:

      尝试用 :

      包围你的代码逻辑
      SPSecurity.RunWithElevatedPrivileges(delegate()
      {
          // insert code here
      }
      

      【讨论】:

        猜你喜欢
        • 2015-06-28
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 1970-01-01
        相关资源
        最近更新 更多