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

Добавление пользователя в разрешения списка

           SPSite site = new SPSite("http://localhost/site");
           SPWeb web = site.OpenWeb();
           SPList list = web.Lists["nameList"];
           list.BreakRoleInheritance(false);

           SPUser user = new SPFieldUserValue(web, properties.ListItem["AssignedTo"].ToString()).User;
           SPRoleDefinition role = web.RoleDefinitions["nameRole"];
           SPPrincipal PrincipalEmployees = user;
           SPRoleAssignment RoleAssignmentEmp = new SPRoleAssignment(PrincipalEmployees);
           RoleAssignmentEmp.RoleDefinitionBindings.Add(role);
           list.RoleAssignments.Add(RoleAssignmentEmp);
     list.Update();

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

Копирование элемента списка

SPSite site = new SPSite("http://localhost/");
           SPWeb web = site.OpenWeb();
           SPList list = web.Lists["Задачи"];
           SPListItem sourceItem = properties.ListItem;
           SPListItem item = list.Items.Add();
           //Копируем поля
           foreach (SPField f in sourceItem.Fields)
           {
               if (!f.ReadOnlyField && f.InternalName != "Attachments")
               {
                   item[f.InternalName] = sourceItem[f.InternalName];
               }
           }
           // Копируем вложение
           foreach (string fileName in sourceItem.Attachments)
           {
               SPFile file = sourceItem.ParentList.ParentWeb.GetFile(sourceItem.Attachments.UrlPrefix + fileName);
               byte[] bData = file.OpenBinary();
               item.Attachments.Add(fileName, bData);
           }
           item.Update();

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

Everything 2

1. Выполнение кода от имени системной учетки:
Иногда требуется повысить права пользователя, для этого можно использовать конструкцию:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
Your code…
});
2. Переход на новую страницу в ItemUpdating:
properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
properties.RedirectUrl = SPUtility.ConcatUrls(properties.Web.ServerRelativeUrl, "/_layouts/nameFolder/namePage.aspx");
3. Передача параметра в страке запросы и прием его на странице:
properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
properties.RedirectUrl = SPUtility.ConcatUrls(properties.Web.ServerRelativeUrl, "/_layouts/nameFolder/namePage.aspx"+"&source=1");
Теперь на странице namePage.aspx.cs в методе Page_Load пишем:
string par = Request.QueryString["sourse"];
Теперь par = 1;
4. Замена wsp на ферме с помощью PowerShell'a
Uninstall-SPSolution -Identity name.wsp -local -Confirm:$false
Remove-SPSolution -Identity name.wsp -Confirm:$false
Add-SPSolution -LiteralPath d:\Folder\name.wsp
Install-SPSolution -GACDeployment -Identity name.wsp
5. После установки SP1 в SPF перестал работать поиск(не может соедениться со службой поиска):
В командной строке в каталог: %COMMONPROGRAMFILES%\Microsoft shared\Web server extensions\12\Bin выполнить команду:

psconfig –cmd upgrade –inplace b2b –wait –force
Далее запустить остановившиеся службы SP.

четверг, 14 июля 2011 г.

Everything

В этот пост я решил складывать всякие мелочи, которые буду узнавать в ходе работы с SharePoint.

1. Для создания WinForms или ConsolApplication необходимо в свойствах проекта указать:
a) Требуемая версия .NET Framework: .NET Framework 3.5
б) Конечная платформа: x64

2. Получение url вложения списка:
string fileName = properties.ListItem.Attachments[0];
string strPath = properties.ListItem.Attachments.UrlPrefix + fileName;

3. Получение user'ов из группы SharePoint:
SPSite site = new SPSite("http://localhost/");
SPWeb web = site.OpenWeb();
SPUserCollection userCollection = web.Groups["Сайт группы - посетители"].Users;
foreach (SPUser user in userCollection)
{
string userName = user.LoginName;
}

4. Если Вы вызываете в обработчике события Update - то он же, опять, вызывает обработчик события и так в цикле. Для того чтобы это не происходило - нужно использоватьEventFiringEnabled.:

EventFiringEnabled = false;
properties.ListItem.Update();
EventFiringEnabled = true;

5. Получение текущего пользователя:
SPSite site = new SPSite("http://localhost/");
SPWeb web = siteDeps.OpenWeb();
SPFieldUserValue currentUser = new SPFieldUserValue(web, web.CurrentUser.ID, web.CurrentUser.LoginName);

6. Создание группы в SharePoint:
SPSite site = new SPSite("http://localhost/");
SPWeb web = siteDeps.OpenWeb();

SPUserCollection users = web.AllUsers;
SPUser owner = users[@"Domain\userName"];
SPMember member = users[@"Domain\userName"];

SPGroupCollection groups = web.SiteGroups;
groups.Add("nameGroup", member, owner, "Discriptions");
web.Update();

7. Поле выбор(флажки), заполнение по умолчанию:
Заходим в свойства столбца, в значение по умолчанию выбираем - вычисляемое значение и в поле пишем: =";#1;#2;#3;#4;#" 

пятница, 8 июля 2011 г.

Каскадные поля с помощью spcd.js

Для создания каскадных полей на потребуется скачать js библиотеку spcd.js. Добавим ее в библиотеку на нашем сайте.
Есть 3 списка
1. Customers - В нем хранятся заказчики

2. Objects - В нем хранятся наименование объектов и кому они принадлежат, поле Customer в этом списке - это поле lookUp на поле Customer в списке Customers.

3. Request - В этом хранится заявки:

1 поле - номер заявки
2 поле - выбираем заказчика
3 поле - выбираем объект (объекты должны выпадать, только те, которые принадлежат выбранному заказчику).
И так, заходим в список Request, на ленте выбираем Список -> Изменить веб-часть формы и выбираем - Форма создания по умалчанию.
Теперь нужно добавить редактор контента:
перетаскиваем редактор контента в самый низ
Нажимаем на него

И в редакторе контента подключаем spcd.js:
<script src="/Base/Shared%20Documents/spcd.js" type="text/javascript"></script><script type="text/javascript">
var ccd1 = new cascadeDropdowns("Customer", "Object", "Customer", "95895e3b-a752-4b87-915e-cc785fe30d31", "Title");

  </script>
"95895e3b-a752-4b87-915e-cc785fe30d31" - Id списка Object
В итоги при выборе заказчика в поле объект будет выбираться, только объекты принадлежащие этому заказчику