Разница в датах между двумя версиями в SharePoint 2010 Powershell - PullRequest
0 голосов
/ 18 февраля 2020

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

Если отклонено, оно будет продолжено в минорных версиях. Короче говоря, у нас может быть 20 элементов в списке задач утверждения, связанных, скажем, с версии 1 до версии 2.

, поэтому мне нужен скрипт, который будет запрашивать другой список для каждой основной версии.

Пока я получаю все основные версии и когда они были созданы. Идея состоит в том, чтобы получить разницу во времени между версиями для одного документа и запросить список, в котором был создан период между двумя датами.

пока у меня есть следующее:

Add-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue

$WebURL="http://test/sites/PSMF"
$ModuleList = "Library"
#Get the Web and List
$Web = Get-SPWeb $WebURL

function GetMetadata {
    $list  = $web.Lists.TryGetList($ModuleList)
    $items = $list.items
     foreach($item in $items)
     {

        $versionHistory = $item.Versions

        foreach($version in $versionHistory)
        {
           #if major version 
           if($version.VersionLabel -match "[0-9]+.0")
           {
                $vNo = $version.VersionLabel
                $versioncreated = $version.created
                Write-Host " Version Created: $vNo" -ForegroundColor Green
                #get difference between two verisons?
                #pass two dates to fileter and return from GetApproval?
            }
        }
     }
 }


function GetApprovals($from, $To)
{
}

GetMetadata


1 Ответ

0 голосов
/ 21 февраля 2020

Обратите внимание, я не менял способ получения элементов из вашего "ModuleList", но, как правило, небезопасно получать доступ к свойству Items непосредственно к объекту SPList, если вы не всегда знаете, что список будет иметь небольшое количество предметов. Когда список превышает несколько сотен элементов, доступ к этому свойству будет значительно медленнее и приведет к снижению производительности других операций в вашей среде, а когда ваш список превысит 5000 элементов, доступ к этому свойству фактически вызовет ошибку.
Это Рекомендуется всегда использовать Microsoft.SharePoint.SPQuery с SPList.GetItems(), даже если вы пытаетесь получить все элементы, поскольку это позволяет вашему коду получать элементы в виде кусков (или страниц). Вы можете видеть, как я использую его в функции GetApprovals, вам просто не понадобится запрос с предложением Where, если вы хотите получить все элементы.

Этот скрипт должен получить то, что вы ищу:

Add-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue

$WebURL="http://test/sites/PSMF"
$ModuleList = "Library"
$ApprovalListName = "PutNameOfApprovalListHere"
#Get the Web and List
$Web = Get-SPWeb $WebURL

function GetMetadata {
    $list  = $web.Lists.TryGetList($ModuleList)
    $items = $list.items

    foreach($item in $items)
    {
        $versionHistory = $item.Versions
        $prevVersionDate = $null

        foreach($version in $versionHistory)
        {
           #if major version 
           if($version.VersionLabel -match "[0-9]+.0")
           {
                $vNo = $version.VersionLabel
                $versioncreated = $version.created
                Write-Host " Version Created: $vNo" -ForegroundColor Green

                if ($prevVersionDate -ne $null)
                {
                    $approvals = GetApprovals -from $prevVersionDate -to $versioncreated
                    # do something with the approvals we just found?
                }

                $prevVersionDate = $versioncreated
            }
        }
    }
 }


function GetApprovals($from, $To)
{
    $spQuery = New-Object Microsoft.SharePoint.SPQuery
    $spQuery.ViewAttributes = "Scope='Recursive'";
    $spQuery.Query = '<Query><Where><And><Geq><FieldRef Name="Created" /><Value IncludeTimeValue="TRUE" Type="DateTime">' + $from + '</Value></Geq><Leq><FieldRef Name="Created" /><Value IncludeTimeValue="TRUE" Type="DateTime">' + $to + '</Value></Leq></And></Where></Query>'
    $spQuery.RowLimit = 200
    $approvalList = $web.Lists.TryGetList($ApprovalListName)
    $approvals = New-Object System.Collections.Generic.List[Microsoft.SharePoint.SPListItem]

    do
    {
        $approvalItems = $approvalList.GetItems($spquery)
        $spQuery.ListItemCollectionPosition = $approvalItems.ListItemCollectionPosition
        foreach($approvalItem in $approvalItems)
        {
            $approvals.Add($approvalItem);
        }    
    }while ($spQuery.ListItemCollectionPosition -ne $null)

    return $approvals;
}

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