Проблема в объектной модели SharePoint при доступе к элементам списка sharepoint? - PullRequest
0 голосов
/ 15 апреля 2010

только что написал

с использованием (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 использует для всех пользователей. Когда текущий пользователь для входа в систему не имеет прав доступа к списку, в котором отображается ошибка. Поэтому, пожалуйста, посоветуйте мне, что я могу сделать, чтобы они работали для всех пользователей.

Ответы [ 2 ]

2 голосов
/ 15 апреля 2010

Используя это

с использованием (сайт SPSite = SPContext.Current.Site) {}

Вы избавляетесь от SPContext.Current.Site, который вы не должны делать. Принимая во внимание предложение Дона, попробуйте это

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);
            }
        }
    }
});
0 голосов
/ 15 апреля 2010

попробуйте окружить вашу логику кода:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    // insert code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...