среда, 31 июля 2019 г.

Install App CSOM

Для автоматизации развертывания приложений в SharePoint, мы можем использовать Application Lifecycle Management (ALM) APIs

PnP Core предоставляет доступ к модели.
пример extension для ClientContext:

public static void AppInstall(this ClientContext clientContext, string appName)
{
var appManager = new AppManager(clientContext);
var availableApps = appManager.GetAvailable();
var app = apps.FirstOrDefault(a => a.Title == appName);
        if(app==null) return;
appManager.Install(app);
}

Так же можно использовать асинхронную установку

var installApp = await appManager.InstallAsync(app);

Отключить PowerApps и Flow

До сих пор, у заказчиков возникает вопрос, зачем на CommandBar'e для обычных пользователей доступны actions - PowerApps и Flow, если им просто необходимо работать с контентом?!



Для того, чтобы их отключить с помощью csom, мы можем изменить следующее свойства:

clientContext.Site.DisableAppViews = true;
clientContext.Site.DisableFlows = true;
clientContext.ExecuteQuery();

Вариант с помощью PowerShell
И так же, вариант PnP PowerShell




четверг, 18 апреля 2013 г.

Удалить все вложения элемента в корзину

SPWeb web = SPContext.Current.Web;

web.AllowUnsafeUpdates = true;

SPList list = web.GetList(SPUrlUtility.CombineUrl(web.Url, listUrl);

SPListItem item = list.GetItemById(1);

SPAttachmentCollection attachmentCollection = item.Attachments;
                   
List<String> attachmentsList = new List<string>();

for (int i = 0; i < attachmentCollection.Count; i++)
{
       attachmentsList.Add(attachmentCollection[i]);                       
}

for (int i = 0; i < attachmentList.Count; i++)
{
      item.Attachments.Recycle(attachmentList[i]);
}
 item.Update();

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

Развертывание master pages с помощью vs

1. Для того, чтобы развернуть master pages создадим пустой проект sp и развернем на http://localhost/.
2. Добавим к нему новый элемент - module, назовем его masterpage.
3. Изменяем Elements.xml:
c
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="masterpage">
    <File Path="masterpage\Sample.txt" Url="masterpage/Sample.txt" />
  </Module>
</Elements>

на
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="masterpage" List="116" Url="_catalogs/masterpage">
    <File Path="masterpage\new_v4.master" Url="new_v4.master" Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE" >     
    </File>
  </Module>
</Elements>

4. Sample.txt переименовываем на имя нашей страницы - new_v4.master
5. В  new_v4.master вставляем код нашей страницы.
6. Добавим EventReceiver к feature проекта и scope поставим Site.
7. Добавим код:
//При активации
public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            SPSite siteCollection = properties.Feature.Parent as SPSite;
            if (siteCollection != null)
            {
                SPWeb topLevelSite = siteCollection.RootWeb;

                string WebAppRelativePath = topLevelSite.ServerRelativeUrl;
                if (!WebAppRelativePath.EndsWith("/"))
                {
                    WebAppRelativePath += "/";
                }

                foreach (SPWeb site in siteCollection.AllWebs)
                {
                    site.MasterUrl = WebAppRelativePath +
                                     "_catalogs/masterpage/new_v4.master";
                    site.CustomMasterUrl = WebAppRelativePath +
                                           "_catalogs/masterpage/new_v4.master";

                    site.UIVersion = 4;
                    site.Update();
                }
            }
        }

8. Для того чтобы, при деактивации  вернулась стандартная страница в метод деактивации добавим:

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            SPSite siteCollection = properties.Feature.Parent as SPSite;
            if (siteCollection != null)
            {
                SPWeb topLevelSite = siteCollection.RootWeb;

                // Calculate relative path to site from Web Application root.
                string WebAppRelativePath = topLevelSite.ServerRelativeUrl;
                if (!WebAppRelativePath.EndsWith("/"))
                {
                    WebAppRelativePath += "/";
                }

                // Enumerate through each site and apply branding.
                foreach (SPWeb site in siteCollection.AllWebs)
                {
                    site.MasterUrl = WebAppRelativePath +
                                     "_catalogs/masterpage/v4.master";
                    site.CustomMasterUrl = WebAppRelativePath +
                                           "_catalogs/masterpage/v4.master";

                    site.UIVersion = 4;
                    site.Update();
                }
            }
        }

Развертывание мастер страниц для профиля пользователя, такая же. Отличия лишь в том что, разворачивать будем на http://localhost/my/ .
Elements.xml:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="newMysite" List="116" Url="_catalogs/masterpage">
    <File Path="newMysite\new_mysite.master" Url="new_mysite.master" Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE">
    </File>
  </Module>
</Elements>

Код обработчика:
public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            this.SetMasterPage((SPSite)properties.Feature.Parent, "_catalogs/masterpage/new_mysite.master");
        }

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            this.SetMasterPage((SPSite)properties.Feature.Parent, "_catalogs/masterpage/mysite.master");
        }

        private void SetMasterPage(SPSite site, String masterPageRelativeUrl)
        {
            string WebAppRelativePath = site.RootWeb.ServerRelativeUrl;

            if (!WebAppRelativePath.EndsWith("/")) WebAppRelativePath += "/";

            string url = WebAppRelativePath + masterPageRelativeUrl;

            foreach (SPWeb web in site.AllWebs)
            {
                web.MasterUrl = url;
                web.CustomMasterUrl = url;
                web.UIVersion = 4;
                web.Update();
            }
        }

Вот собственно и все!

четверг, 21 июня 2012 г.

Скрыть риббон от пользователей но оставить его администраторам

Для того чтобы скрыть риббон от пользователей нужно немного поправить master page.

1.Открываем мастер страниц в sp designer и ищем div с id = s4-ribbonrow:

2. Добавим к этому диву style="display:none" , теперь риббон  скрыт ото всех.
3. Ну и для того чтобы  администраторы могли его видеть, в конце дива добавим:
<Sharepoint:SPSecurityTrimmedControl ID="SPSecurityTrimmedControl1" runat="server" PermissionsString="ManageWeb">
    <script type="text/javascript">
        document.getElementById("s4-ribbonrow").style.display = "block";
    </script>
</Sharepoint:SPSecurityTrimmedControl>
4. Сохраняем и опубликовываем  страницу.

среда, 21 марта 2012 г.

Создание document set


В этом посте хочу рассмотреть создание document set:
1.       Создадим библиотеку документов. Выбираем <Библиотеки>:

2.       Нажимаем <Создать>:

3.       В диалоговом окне создания нового элемента, выбираем <Библиотека> -> <Библиотека документов>, в поле название – назовем ее Documents и нажмем кнопку <Создать>:
4.       Заходим в <Параметры библиотеки>:


5.       Нажимаем <Дополнительные параметры>:
6.       И разрешаем управление типами контента:
7.       Теперь нам нужно добавить тип контента(Document Set), для этого нажимаем <Добавить из существующих типов контента сайта>:
8.Добавляем <Набор документов> и жмем <OK>
8.       Переходим в нашу библиотеку Documents -> Выбираем <Документы> ->  <Создать документ> -> <Набор документов>
9.       Назовем documents it и Описание: Документы отдела информационных технологий, нажмем <OK>
10.    Теперь мы можем добавлять документы для it отдела:

Теперь создадим набор документов программно.

1.       Создаем новый проект – ConsolApplication(не забываем указать в свойствах проекта: Target framework: .NET Framework 3.5, Platform target x64,  )

2.       К проекту добавим 2 библиотеки:
1)Microsoft.SharePoint;
2) Microsoft.Office.DocumentManagement;

3.       Добавим в метод Main код:

using (SPSite site = new SPSite("siteUrl"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPList docs = web.Lists["Documents"];
                    SPFolder folder = docs.RootFolder;
                    SPContentTypeId ContentTypeId = new SPContentTypeId();
                    ContentTypeId = docs.ContentTypes["Набор документов"].Id;
                    Hashtable properties = new Hashtable();
                    properties.Add("DocumentSetDescription", "Документы отдела по работе с персоналом"); // Описание набора документов
                    DocumentSet docSet = DocumentSet.Create(folder, "documents hr", ContentTypeId, properties, true);
                   
                }
            }
Если запустить код на исполнения, то создастся новый набор документов с именем “documents hr”: