понедельник, 27 июня 2011 г.

Сериализация в C#

Стояла задача: сохранение значений формы приложения, решил использовать сериализацию. Разработал класс, в котором будут храниться значения с элементов формы:
public class DataClass
{
public DataClass() { }
public string TextBox = "";
public string RichTextBox = "";
}

При загрузки формы делаю десериализацию:
private void Form1_Load(object sender, EventArgs e)
{
XmlReader reader = new XmlTextReader("nameXml.xml");
XmlSerializer serializer = new XmlSerializer(typeof(DataClass)); DataClass sd = (DataClass)serializer.Deserialize(reader); reader.Close();
reader.Close();
textBox1.Text = sd.TextBox;
richTextBox1.Text = sd.RichTextBox;
}

При закрытии сериализацию:
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
DataClass obj = new DataClass();
obj.TextBox = textBox1.Text;
obj.RichTextBox = richTextBox1.Text;
XmlWriter writer = new XmlTextWriter("nameXml.xml", System.Text.Encoding.UTF8);
XmlSerializer sr = new XmlSerializer(obj.GetType());
sr.Serialize(writer, obj);
writer.Close();
}

четверг, 23 июня 2011 г.

Programmatically creates list and list items

             using (SPSite site = new SPSite("http://localhost/Base"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPListCollection listCollection = web.Lists;
                    listCollection.Add("nameList","discriptionList",SPListTemplateType.GenericList);
                    //- SPListTemplateType.GenericList - настраеваемый список
                    SPList list = web.Lists["nameList"];
                  
                    //- list.EnableVersioning = true; - Включить создание версий
                    //- list.BreakRoleInheritance(false); - Прекратить наследование разрешений
                    SPList listTask= web.Lists["Задачи"];
                    SPField fieldTask=listTask.Fields["Название"];

                    //- Представление списка по-умолчанию
                    SPView viewList = list.DefaultView;

                    //Добавление текстового поля
                    list.Fields.Add("nameField1", SPFieldType.Text, true);
                    //Добавляем поле в представление
                    viewList.ViewFields.Add("nameField1");

                    //Добавление поля дата и время
                    list.Fields.Add("nameField2", SPFieldType.DateTime, true);
                    viewList.ViewFields.Add("nameField2");

                    //Добавление поля ссылка
                    list.Fields.Add("nameField3", SPFieldType.URL, true);
                    viewList.ViewFields.Add("nameField3");

                    //Добавление поля пользователь
                    list.Fields.Add("nameField4", SPFieldType.User, true);
                    viewList.ViewFields.Add("nameField4");

                    //Добавление поля lookUp
       list.Fields.AddLookup("nameField5", listTask.ID, false);
      SPFieldLookup fieldLookup = (SPFieldLookup)list.Fields["nameField5"];
       fieldLookup.LookupField = fieldTask.InternalName;
       fieldLookup.Update();
       viewList.ViewFields.Add("nameField5");
       viewList.Update();

// Добавление поля Выбор
StringCollection categories = new StringCollection();
categories.AddRange(new string[] { "item1", "item2", "item3" });

list.Fields.Add("fromPosit", SPFieldType.Choice, true, false, categories);
SPFieldChoice fieldChoice = (SPFieldChoice)list.Fields["nameField6"];
fieldChoice.DefaultValue = "item1"; //Значение по-умолчанию
fieldChoice.EditFormat = SPChoiceFormatType.RadioButtons; //Формат выбора
fieldChoice.Update();
viewList.ViewFields.Add("nameField6");


//По умолчанию поля обязательно должны быть заполнены
//Для того чтобы сделать поля не обязательны для заполнения нужно:
                    SPField fieldList = list.Fields["nameField1"];
                    fieldList.Required = false;
                    fieldList.Update();

                    //Для добавления списка в панель быстрого запуска
                    //установить свойство OnQuickLaunch=true
                    list.OnQuickLaunch = true;
                    list.Update();
                   
                }
            }

вторник, 21 июня 2011 г.

SPGridView и WebPart

Создадим новый проект (Визуальная веб-часть)  и в UserControl.ascx.cs в метод
Page_Load(object sender, EventArgs e) добавим:

SPSite Site = SPContext.Current.Site;
SPList List = Site.AllWebs["nameSite"].Lists["nameList"];
SPQuery query = new SPQuery();
query.Query = "<Where>" +
"<Eq>" +
"<FieldRef Name=\"nameField\" />" +
"<Value Type=\"Text\">Text1</Value>" +
"</Eq>" +
"</Where>";

SPListItemCollection listColl = List.GetItems(query);
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Field1");
dataTable.Columns.Add("Field2");

foreach (SPListItem item in listColl)
{
DataRow dataRow = dataTable.NewRow();
dataRow["Field1"] = item["Field1"].ToString();
dataRow["Field2"] = item["Field2"].ToString();
dataTable.Rows.Add(dataRow);
}

DataView dataView = new DataView(dataTable);
dataTable = dataView.ToTable(true, "Field1", "Field2");


SPGridView gridView = new SPGridView();
gridView.ID = "idgridView";
gridView.AutoGenerateColumns = false;
BoundField field1 = new BoundField();
field1.HeaderText = "displayName1";
field1.DataField = "Field1";
gridView.Columns.Add(field1);

BoundField field2 = new BoundField();
field2.HeaderText = "displayName2";
field2.DataField = "Field2";
gridView.Columns.Add(field2);

this.Controls.Add(gridView);
base.CreateChildControls();

gridView.DataSource = dataTable;
gridView.DataBind();
На странице добавится веб-часть с SPGriedView и в нем 2 поля. С помощью Query отфильтруется по полю nameField = Text1;

понедельник, 20 июня 2011 г.

Программное создание представления для списка

using (SPSite site = new SPSite("http://siteUrl"))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["nameList"];
System.Collections.Specialized.StringCollection stringColl = new System.Collections.Specialized.StringCollection();
//добавляем поля которые будут в представлении
stringColl.Add("LinkTitle");
stringColl.Add("Title");
list.Views.Add("nameViews", stringColl, @"", 100, true, true, Microsoft.SharePoint.SPViewCollection.SPViewType.Html, false);
list.Update();
}
}
В Views.Add последний параметр указывает на то, общее или персональное будет представление.
Если параметр true то представление будет персональным и создастся оно для пользователя который запустил приложение, чтобы добавить представление для другого пользователя нужно сделать имперсонализацию:
string userName = "Domen\\userName";
SPUserToken userToken = web.AllUsers[userName].UserToken;
using (SPSite site = new SPSite("http://siteUrl", userToken))
{
using (SPWeb web = site.OpenWeb())
{
}
}
Так же к представлению можно добавить фильтр:
string userName = "Domen\\userName";
SPUserToken userToken = web.AllUsers[userName].UserToken;
using (SPSite site = new SPSite("http://siteUrl", userToken))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["nameList"];
System.Collections.Specialized.StringCollection stringColl = new System.Collections.Specialized.StringCollection();

stringColl.Add("LinkTitle");
stringColl.Add("Title");
list.Views.Add("nameViews", stringColl, @"", 100, true, true, Microsoft.SharePoint.SPViewCollection.SPViewType.Html, false);
list.Update();

SPView view = list.Views["nameViews"];
viewTest.Query =
"<Where>" +
"<Or>"+
"<Eq>"+
"<FieldRef Name=\"InternalNameField\" />"+
"<Value Type=\"Text\">nameUser1</Value>"+
"</Eq>"+
"<Eq>"+
"<FieldRef Name=\"internalNameField\" />"+
"<Value Type=\"Text\">nameUser2</Value>"+
"</Eq>"+
"</Or>"+
"</Where>";
view.Update();
}
}

//добавляем поля которые будут в представлении

Программное создание уровней разрешений

Стояла задача, написать консольное приложения, которое добавляет новый уровень разрешения.
(Для написания ConsoleApplication или Windows Forms приложений в свойствах проекта должно быть указано Framework 3.5 и  конечная платформа x64.)
Написал функцию:
void AddPermisLevelRead(SPWeb WEB, string nameLevel, string LevelDiscription)
        {
            SPRoleDefinition newPermissionLevel = new SPRoleDefinition();
            newPermissionLevel.Name = nameLevel;
            newPermissionLevel.Description = LevelDiscription;
            newPermissionLevel.BasePermissions = SPBasePermissions.ViewListItems | SPBasePermissions.OpenItems | SPBasePermissions.ViewVersions
                | SPBasePermissions.ViewFormPages | SPBasePermissions.ViewPages | SPBasePermissions.BrowseUserInfo | SPBasePermissions.UseRemoteAPIs | SPBasePermissions.UseClientIntegration
                | SPBasePermissions.Open;
            WEB.RoleDefinitions.Add(newPermissionLevel);
            newPermissionLevel = WEB.RoleDefinitions[nameLevel];
        }

Разрешения:
a.         Разрешение C#
-          Разрешение SP
-          Описание

1.      Разрешения для списка
a.       ManageLists.
-          Управление списками.
-          Создание и удаление списков, добавление и удаление столбцов списка, добавление и удаление общих представлений списка.
b.      CancelCheckout
-          Переопределение извлечения
-          Отмена извлечения или возврат документа, извлеченного другим пользователем.
c.       AddListItems
-          Добавление элементов
-          Добавление элементов в списки и документов в библиотеки.
d.      EditListItems
-          Изменение элементов
-          Изменение элементов в списках и документов в библиотеках документов, а также настройка страниц веб-частей в библиотеках документов.
e.       DeleteListItems
-          Удаление элементов
-          Удаление элементов из списка и документов из библиотеки документов.
f.       ViewListItems
-          Просмотр элементов
-          Просмотр элементов в списках и документов в библиотеках документов.
g.       ApproveItems
-          Утверждение элементов
-          Утверждение промежуточной версии элемента списка или документа.
h.      OpenItems
-          Открытие элементов
-          Просмотр источника документов с помощью серверных обработчиков файлов.
i.        ViewVersions
-          Просмотр версий
-          Просмотр предыдущих версий элемента списка или документа.
j.        DeleteVersions
-          Удаление версий
-          Удаление предыдущих версий элемента списка или документа.
k.      CreateAlerts
-          Создание оповещений
-          Создание оповещений.
l.        ViewFormPages
-          Просмотр страниц приложений
-          Просмотр форм, представлений и страниц приложений. Составление перечней списков.
2.      Разрешения для сайта
a.       ManagePermissions
-          Управление разрешениями
-          Создание и изменение уровней разрешений для веб-сайта и назначение разрешений пользователям и группам.
b.      ViewUsageData
-          Просмотр данных Web Analytics
-          Просмотр отчетов об использовании веб-сайта.
c.       ManageSubwebs
-          Создание дочерних сайтов
-          Создание дочерних сайтов: сайтов рабочих групп, сайтов рабочих областей для собраний и сайтов рабочих областей для документов.
d.      ManageWeb
-          Управление веб-сайтом
-          Предоставление полномочий на выполнение всех задач администрирования веб-сайта, а также на управление контентом.
e.       AddAndCustomizePages
-          Добавление и настройка страниц
-          Добавление, изменение и удаление страниц HTML или страниц веб-частей, а также изменение веб-сайта в редакторе, совместимом с Microsoft SharePoint Foundation.
f.       ApplyThemeAndBorder
-          Применение тем и границ
-          Применение тем и границ ко всему веб-сайту.
g.       ApplyStyleSheets
-          Применение таблиц стилей
-          Применение таблиц стилей (CSS-файлов) к веб-сайту.
h.      CreateGroups
-          Создание групп
-          Создание группы пользователей, которая будет действительна в любой точке семейства веб-сайтов.
i.        BrowseDirectories
-          Просмотр каталогов
-          Составление перечня файлов и папок веб-сайта с использованием интерфейсов SharePoint Designer и Web DAV.
j.        CreateSSCSite
-          Самостоятельное создание сайтов
-          Создание веб-сайта средствами самостоятельного создания сайтов.
k.      ViewPages
-          Просмотр страниц
-          Просмотр страниц на веб-сайте.
l.        EnumeratePermissions
-          Составление перечня разрешений
-          Составление перечня разрешений для веб-сайта, списка, папки, документа или элемента списка.
m.    BrowseUserInfo
-          Просмотр сведений о пользователях
-          Просмотр сведений о пользователях этого веб-сайта.
n.      ManageAlerts
-          Управление оповещениями
-          Управление оповещениями для всех пользователей этого веб-сайта.
o.      UseRemoteAPIs
-          Использование удаленных интерфейсов
-          Доступ к веб-сайту с использованием интерфейсов SOAP, Web DAV, COM или SharePoint Designer.
p.      UseClientIntegration
-          Интеграция клиентов
-          Использование компонентов, обеспечивающих запуск клиентских приложений. Без этого разрешения пользователи будут вынуждены работать с документами локально и затем отправлять свои изменения на сервер.
q.      Open
-          Открытие
-          Пользователям разрешается открывать веб-сайт, список или папку для доступа к содержащимся в них элементам.
r.        EditMyUserInfo
-          Изменение личных сведений о пользователе
-          Пользователю разрешается изменять свои личные сведения, например добавлять фотографию.
3.      Личные разрешения
a.       ManagePersonalViews
-          Управление личными представлениями
-          Создание, изменение и удаление личных представлений списков.
b.      AddDelPrivateWebParts
-          Добавление и удаление личных веб-частей
-          Добавление и удаление личных веб-частей на страницах веб-частей.
c.       UpdatePersonalWebParts
-          Обновление личных веб-частей
-          Обновление веб-частей, содержащих личные сведения.

4.      Не доступны через пользовательский интерфейс.
a.       EmptyMask
-          Все права на веб-сайте