Как запросить конкретное представление в sharepoint через powershell - PullRequest
0 голосов
/ 11 октября 2019

Итак, я пытался запросить конкретное представление для списка, который у меня есть в sharepoint. Представление называется «Ожидание», но я не уверен, где применить представление в коде.

Function Get-ListItems([Microsoft.SharePoint.Client.ClientContext]$Context, [String]$ListTitle) {
$list = $Context.Web.Lists.GetByTitle($listTitle)
$qry = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery() 
$items = $list.GetItems($qry)
$Context.Load($items)
$Context.ExecuteQuery()
return $items}

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

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Вы захотите расширить функцию дополнительным параметром для имени представления.

Я не могу проверить это сам, но это может работать для вас:

function Get-ListItemsFromView {
    [CmdletBinding()]
    Param(
        [Parameter(Position = 0, Mandatory = $true)]
        [Microsoft.SharePoint.Client.ClientContext]$Context, 

        [Parameter(Position = 1, Mandatory = $true)]
        [string]$ViewName,

        [Parameter(Position = 2, Mandatory = $true)]
        [string]$ListTitle
    )


    $list = $Context.Web.Lists.GetByTitle($listTitle)
    $Context.Load($list)
    $Context.ExecuteQuery()

    $view = $list.Views.GetByTitle($ViewName)
    $Context.Load($view)
    $Context.ExecuteQuery()

    $qry = New-Object Microsoft.SharePoint.Client.CamlQuery
    $qry.ViewXml = $view.ViewQuery

    $items = $list.GetItems($qry)
    $Context.Load($items)
    $Context.ExecuteQuery()

    return $items
}
0 голосов
/ 15 октября 2019

Представления не являются типом данных в SharePoint. SharePoint знает только объекты List и Library. Представления - это просто страницы веб-форм ASP.NET, созданные SharePoint. Фильтрация столбца Approval Status в списке должна быть именно тем, что вы ищете.

function Get-PendingListItems
{
    [CmdletBinding()]
    [OutputType([Microsoft.SharePoint.Client.ListItemCollection])]
    Param
    (
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$false,
                   Position=0)]
        [Microsoft.SharePoint.Client.ClientContext]
        $Context,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$false,
                   Position=1)]
        [String]
        $ListTitle
    )
    Process
    {
        # Fail Fast
        try {
            $list = $Context.Web.Lists.GetByTitle($ListTitle)
        } catch {
            Write-Error "The list $ListTitle does not exist."
            return $null
        }

        $query = New-Object Microsoft.SharePoint.SPQuery;

        # You can select the fields you would like to view. For more information look at: https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/ms470490(v=office.14)
        # $query.ViewFields = '<ViewFields><FieldRef Name="ID"></FieldRef><FieldRef Name="Title"></FieldRef></ViewFields>';

        # 2 means pending. For More information look at: https://docs.microsoft.com/en-us/dotnet/api/microsoft.sharepoint.spmoderationstatustype?view=sharepoint-server
        $query.Query = '<Where><Eq><FieldRef Name="_ModerationStatus" /><Value Type="ModStat">2</Value></Eq></Where>';

        $items = $list.GetItems($query)
        $Context.Load($items)
        $Context.ExecuteQuery()

        return $items
    }
    End
    {
        $Context.Dispose()
    }
}

Здесь мы создали CAML-запрос, который фильтрует только элементы с Approval Status как Pending. Число 2 означает Pending, как вы можете видеть в документах . Вы можете отфильтровать возвращаемые свойства, но я закомментировал строку, так как это не обязательно. Вы можете посмотреть на это на документах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...