Как изменить стиль для нескольких представлений в Sharepoint 2019 на предпосылке, используя Powershell - PullRequest
0 голосов
/ 17 апреля 2019

Я запускаю следующее, чтобы получить все представления для всех списков во всех дочерних узлах нашей установки Sharepoint.

$views = @()
foreach ($web in Get-PnPSubWebs) {
    foreach ($list in Get-PnPList -Web $web.id) {
        foreach ($view in Get-PnPView -list $list.id -web $web.id) {
            $views += [pscustomobject]@{Id = $view.Id; StyleId = $view.StyleId}
        }
    }
}

Что работает нормально, я получаю все просмотры, как и ожидалось. Но мне не удалось установить новый стиль для представлений.

Я пытался использовать $view.ApplyStyle(), как описано здесь: https://social.msdn.microsoft.com/forums/sharepoint/en-US/58068fb4-33ad-46cf-b866-bd86e1cbcafb/update-sharepoint-list-view-style-via-powershell и здесь: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spview.applystyle.aspx. Однако я получаю следующую ошибку: Method invocation failed because [Microsoft.SharePoint.Client.View] does not contain a method named 'ApplyStyle'.

Далее я попытался Set-PnPView -Web $web.id -List $list.id -Identity $view.Id -Values @{StyleId=17} в соответствии с этими инструкциями: https://docs.microsoft.com/en-us/powershell/module/sharepoint-pnp/set-pnpview?view=sharepoint-ps. Это только дало мне это сообщение: WARNING: Setting property 'StyleId' to '17' failed with exception 'Property set method not found.'. Value will be ignored.

И в крайнем случае $view.StyleId = 17 тоже не работает. Тогда я получаю это: 'StyleId' is a ReadOnly property., как и ожидалось.

Мы хотим, чтобы все наши списки были в затененном стиле (id: 17). У нас есть сотни списков, и, потому что я надеюсь, что есть лучший способ, чем потратить целый день, вручную меняя их все. Мне еще не удалось найти способ изменить стиль представления списка по умолчанию, но все наши списки, похоже, настроены на представление "по умолчанию", хотя нет способа увидеть, что такое стиль по умолчанию, или изменить его.

Все предложения приветствуются.


Обновление: Это полный сценарий, который я использовал для всех представлений во всех списках во всех веб-сайтах нашего основного сайта:

Connect-PnPOnline –Url http://sharepointsite –CurrentCredentials
foreach ($web in Get-PnPSubWebs) {
    foreach ($list in Get-PnPList -Web $web.id) {
        foreach ($view in Get-PnPView -list $list.id -web $web.id) {
            [xml]$Doc = New-Object System.Xml.XmlDocument
            $Doc.LoadXml($view.ListViewXml);
            $element = $Doc.SelectSingleNode("//View//ViewStyle");
            if ($element -eq $null)
            {
                $element = $Doc.CreateElement("ViewStyle");
                $element.SetAttribute("ID", 17);
                $Doc.DocumentElement.AppendChild($element);
            }
            else
            {
                $element.SetAttribute("ID", 17);
            }
            Set-PnPView -Web $web.id -List $list.id -Identity $view.Id -Values @{ListViewXml=$Doc.FirstChild.InnerXml}
        }
    }
}

И затем, чтобы получить все списки для основной сети, я запустил это:

Connect-PnPOnline –Url http://sharepointsite –CurrentCredentials
$web = Get-PnPWeb
foreach ($list in Get-PnPList -Web $web.id) {
    foreach ($view in Get-PnPView -list $list.id -web $web.id) {
        [xml]$Doc = New-Object System.Xml.XmlDocument
        $Doc.LoadXml($view.ListViewXml);
        $element = $Doc.SelectSingleNode("//View//ViewStyle");
        if ($element -eq $null)
        {
            $element = $Doc.CreateElement("ViewStyle");
            $element.SetAttribute("ID", 17);
            $Doc.DocumentElement.AppendChild($element);
        }
        else
        {
            $element.SetAttribute("ID", 17);
        }
        Set-PnPView -Web $web.id -List $list.id -Identity $view.Id -Values @{ListViewXml=$Doc.FirstChild.InnerXml}
    }
}

1 Ответ

0 голосов
/ 18 апреля 2019

Вот мой пример тестового сценария для вашей справки (я тестировал в Интернете, я думаю, что он должен работать для SharePoint 2019, поскольку это API CSOM).

Add-Type -Path (Resolve-Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll")
Add-Type -Path (Resolve-Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll")
$UserName = "Wendy@tenant.onmicrosoft.com" 
$siteURL = "https://tenant.sharepoint.com/sites/lee"
$Password = "password"
[SecureString]$SecurePass = ConvertTo-SecureString $Password -AsPlainText -Force
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $SecurePass)
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteURL)  
$ctx.credentials = $Credentials  
try{  
    $list = $ctx.web.Lists.GetByTitle("MyList2")  
    $views = $list.views  
    $ctx.load($views)  
    $ctx.executeQuery()  
    foreach ($v in $views)
            {
                if ($v.Title -eq "All Items")
                {

                    $ctx.Load($v);
                    $ctx.ExecuteQuery();
                    [xml]$Doc = New-Object System.Xml.XmlDocument
                    $Doc.LoadXml($v.ListViewXml);
                    $element = $Doc.SelectSingleNode("//View//ViewStyle");
                    if ($element -eq $null)
                    {
                        $element = $Doc.CreateElement("ViewStyle");
                        $element.SetAttribute("ID", 17);
                        $Doc.DocumentElement.AppendChild($element);
                    }
                    else
                    {
                        $element.SetAttribute("ID", 17);
                    }

                    $v.ListViewXml = $Doc.FirstChild.InnerXml;
                    $v.Update();                      
                    $ctx.ExecuteQuery();                    
                }
            }  
}  
catch{  
    write-host "$($_.Exception.Message)" -foregroundcolor red  
}            
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...