Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Одним файлом.docx
Скачиваний:
44
Добавлен:
31.05.2015
Размер:
2.71 Mб
Скачать

4.2.2 Работа со списками

Работа со списками SharePoint осуществляется четырьмя путями:

  • Через объектную модель SharePoint при помощи кода;

  • При помощи LinQ to SharePoint;

  • При помощи CAML запросов;

  • При помощи клиенткой объектной модели SharePoint, последней существует три разновидности (Silverlight client object model, JavaScript client object model, Server client object model).

Для доступа к спискам был выбран первый подход. Все вышеперечисленные способы имеют свои плюсы и минусы. Для доступа к данным списка все библиотеки, использующие первые три подхода, должны располагаться на том же компьютере, где установлен SharePoint. Клиентская объектная модель используется для доступа к данным списков с удалённого компьютера, по своей сути, она является обёрткой для WCF сервисов, идущих в стандартной поставке SharePoint и позволяющих обращаться к спискам с удалённого компьютера.

Функции для работы со списками приведены на рисунках 4.7 – 4.9.

LoadPartOfData – используется для доступа к данным списка приложений, в качестве возвращаемого параметра используется список всех найденных приложений, удовлетворяющих условию выборки.

LoadData– используется для доступа к данным списка “Телефонный справочник”, в качестве возвращаемого параметра используется список номеров телефонов.

CreatePublishingPage– используется для доступа к данным списка опросов. Функция параметров не возвращает.

public IEnumerable<DepartmentNewsItem> LoadPartOfData(SPWeb spWeb, string id, string ifPersonColumnName, string ifCompanyColumnName, string descriptionColumnName, string foldervithNewsName, string listWithDepartment, string columnwithPicture, string departmentNamecolumn, uint newsPerPage, int numberOfPage, SortBy sortType) //, string viewName, string caml, string[] columnNames, int pageIndex, int pageItemCount, params object[] inputParams)

{

string listName = SPUtility.GetLocalizedString("$Resources:cmscore,PagesListDisplayName",

"cmscore", spWeb.Language);

string expression = string.Empty;

SPQuery queryAll = new SPQuery();

SPQuery queryDepartment = new SPQuery();

SPQuery query = new SPQuery();

SPListItemCollection colection = default(SPListItemCollection);

SPList oList = spWeb.Lists[listName];

string departmentName = String.IsNullOrEmpty(id) ? string.Empty : GetDepartmentName(spWeb, listWithDepartment, id);

SPListItem fold = oList.Folders.Cast<SPListItem>().Single(fd => fd.Name.Equals(foldervithNewsName));

SPFolder folder = fold.Folder;

queryAll.Query = sortType.Equals(SortBy.Asc) ? Camlex.Query().Where(it => ((int)it[_UIVersion] >= 512)

&& (bool)it[_ifCompanyInternalName] == false && it[_departmentNamecolumnInternalName] != null).OrderBy(it => it["Created"]).ToString()

: Camlex.Query().Where(it => ((int)it[_UIVersion] >= 512)

&& (bool)it[_ifCompanyInternalName] == false && it[_departmentNamecolumnInternalName] != null).OrderBy(it => it["Created"] as Camlex.Desc).ToString();

queryAll.Folder = folder;

queryAll.RowLimit = newsPerPage;

queryDepartment.Query = sortType.Equals(SortBy.Asc) ? Camlex.Query().Where(it => ((int)it[_UIVersion] >= 512)

&& (bool)it[_ifCompanyInternalName] == false && it[_departmentNamecolumnInternalName] != null && it[_departmentNamecolumnInternalName] == (DataTypes.LookupValue)departmentName).OrderBy(it => it["Created"]).ToString()

: Camlex.Query().Where(it => ((int)it[_UIVersion] >= 512)

&& (bool)it[_ifCompanyInternalName] == false && it[_departmentNamecolumnInternalName] != null && it[_departmentNamecolumnInternalName] == (DataTypes.LookupValue)departmentName).OrderBy(it => it["Created"] as Camlex.Desc).ToString();

queryDepartment.Folder = folder;

queryDepartment.RowLimit = newsPerPage;

query = String.IsNullOrEmpty(departmentName) ? queryAll : queryDepartment;

List<string> myPagingDataCount = new List<string>();

SPListItemCollectionPosition objSPListColPos = default(SPListItemCollectionPosition);

if (numberOfPage == 0)

{

objSPListColPos =

new SPListItemCollectionPosition("Paged=TRUE&p_SortBehavior=0&p_ID=06&RootFolder=%2fPages%2fSaM%2dNews");

query.ListItemCollectionPosition = objSPListColPos;

colection = oList.GetItems(query);

} else

{

for (int i = 0; i <= numberOfPage; i++)

{

colection = oList.GetItems(query);

query.ListItemCollectionPosition = colection.ListItemCollectionPosition;

}

}

var news = colection.Cast<SPListItem>().Select(nw => new DepartmentNewsItem()

{

Created =

((System.DateTime)

(nw.Versions.GetVersionFromLabel(

string.Format("{0}.0",

nw.File.

MajorVersion))

["Created"])),

IsPersonNews =

(bool)

(nw.Versions.GetVersionFromLabel(

string.Format("{0}.0",

nw.File.

MajorVersion))

[ifPersonColumnName]),

ShortDescription =

Convert.ToString(

nw.Versions.GetVersionFromLabel(

string.Format("{0}.0",

nw.File.

MajorVersion))[

descriptionColumnName

]) ??

string.Empty,

Url =

String.Format("{0}/{1}", spWeb.Url,

nw.Url) ??

String.Empty,

PersonImageUrl =

GetImageUrl(nw.File.Author.LoginName),

DepartmentImageUrl =

GetDepartmentImageUrl(spWeb,

listWithDepartment,

nw[

departmentNamecolumn

].

ToString(),

columnwithPicture)

}

);

return sortType.Equals(SortBy.Asc) ? news.OrderBy(nw => nw.Created) : news.OrderByDescending(nw => nw.Created);

}

Рисунок 4.7 – Доступ к данным списка приложений

private List<Job> LoadData()

{

try

{

List<Job> job = new List<Job>();

SPWeb spWeb = SPContext.Current.Web; //should not be explicitly disposed in code

SPList spList = spWeb.Lists["Телефонный справочник"];

foreach (SPListItem item in spList.Items)

{

job.Add(new Job()

{

SurName = (item["LastName"] ?? string.Empty).ToString(),

Name = String.Format("{0} {1}", (item["FirstName"] ?? string.Empty).ToString(), (item["SecondName"] ?? string.Empty).ToString()),

Floor = (item["Floor"] ?? "-").ToString(),

Room = (item["Room"] ?? "-").ToString(),

Number = (item["InsidePhone"] ?? "-").ToString().Replace(' ', '-'),

});

}

return job.OrderBy(jb => jb.SurName).ToList();

}

catch (Exception ex)

{

if (ex.Message.Equals("Value cannot be null. Parameter name: source") ||

ex.Message.Equals("Object reference not set to an instance of an object."))

{

exControl.Text = "Невозможно установить соединение с источником данных";

}

else

{

exControl.Text = ex.Message;

}

return null;

}

}

Рисунок 4.8 – Доступ к данным телефонного справочника

private void CreatePublishingPage(SPWeb spWeb, string pageRelativeUrl, string pageLayoutName, string content)

{

if ((PublishingWeb.IsPublishingWeb(spWeb)))// Assign an object to the pubSite variable

{

PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(spWeb);

PageLayout currentPageLayout = FindPageLayout(spWeb, pageLayoutName);

// Check or the Page Layout could be found in the collection

// if not (== null, return because the page has to be based on

// an excisting Page Layout

if (currentPageLayout == null)

{

return;

}

PublishingPageCollection pages = pubWeb.GetPublishingPages();

PublishingPage newPage = pages.Add(pageRelativeUrl, currentPageLayout);

newPage.Description = pageRelativeUrl.Replace(".aspx", "");

newPage.Title = Regex.Split(pageRelativeUrl.Replace(".aspx", ""), "/")[Regex.Split(pageRelativeUrl.Replace(".aspx", ""), "/").Length - 1];

//Here you can set some properties like:

//newPage.IncludeInCurrentNavigation = true;

//newPage.IncludeInGlobalNavigation = true;

//add content to page

if(!String.IsNullOrEmpty(content))

{

newPage.ListItem[FieldId.PublishingPageContent] = content;

newPage.ListItem[FieldId.Description] = string.Empty;

}

// End of setting properties

SPFile publishFile = newPage.ListItem.File;

publishFile.Update();

newPage.Update();

// Check the file in (a major version)

publishFile.CheckIn("Initial", SPCheckinType.MajorCheckIn);

publishFile.Publish("Initial");

// In case of content approval, approve the file

if (pubWeb.PagesList.EnableModeration)

{

publishFile.Approve("Initial");

}

} }

Рисунок 4.9 – Доступ к данным списка опросов