Ошибка конструктора CSOM Sharepoint Online 2013 для объекта AttachmentCollection?

Я пишу сценарий для копирования элементов из одного списка в другой на онлайн-сервере sharepoint. Я использую клиентскую объектную модель (CSOM) sharepoint 2013 года для написания этого сценария в PowerShell ISE. Это должно быть несложной задачей, но получается как раз обратное. Пока я могу получить все элементы с помощью camlquery, и я просто пытаюсь дублировать эти элементы и их вложения в другой список. Ошибка, которую я получаю, связана с попыткой создать attachmentCollection для извлечения всех вложений из любого элемента, вот часть сценария, которая представляет проблему:

Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

$siteURL = "https://mysite.sharepoint.com"
$password = Read-Host -Prompt "Enter Password" -AsSecureString
$ctx = New-Object Microsoft.Sharepoint.Client.ClientContext($siteURL)
$credentials = New-Object Microsoft.Sharepoint.Client.SharepointOnlineCredentials("[email protected]", $password)
$ctx.Credentials = $credentials


#...Bunch of code that establishes/loads web/lists/items, all works fine
function CopyItem $itemToCopy


function CopyItem ($oldItem)
{
    Write-Host "Copying item" $oldItem.ID
    $newItemCI = New-Object Microsoft.SharePoint.Client.ListItemCreationInformation
    $newItem = $archList.AddItem($newItemCI)
    $ctx.load($newItem)
    #Update fields
    $ctx.load($sourceList.Fields)
    $ctx.ExecuteQuery()
    foreach($field in $sourceList.Fields)
    {
        $newItem[$field.InternalName] = $oldItem[$field.InternalName]
    }
    $attachments = New-Object Microsoft.SharePoint.Client.AttachmentCollection  #ERROR HERE
    $attachments = $oldItem.AttachmentFiles
    $ctx.load($attachments)
    $newItem.AttachmentFiles.Add($attachments)
    $newItem.Update()
    $ctx.load($newItem)
    $ctx.ExecuteQuery()
}

В сообщении об ошибке говорится: «Ошибка архива списка: с этим сообщением об ошибке: Конструктор не найден. Не удается найти соответствующий конструктор для типа Microsoft.SharePoint.Client.AttachmentCollection».

Я получаю ту же ошибку, если пытаюсь создать новый объект как вложение, не могу найти конструктор. Это странно, так как конструктор должен быть в client.dll, но не повезло. Я даже попытался восстановить свои файлы CSOM 2013 года, там никаких ошибок не обнаружено. Любая помощь по этому поводу приветствуется, спасибо.


person user2529323    schedule 28.06.2013    source источник


Ответы (1)


После адских проб и ошибок я обнаружил, что вам не нужно объявлять новый объект при работе с объектами attachmentCollection. Вы можете просто установить такую ​​переменную:

$attachments = $item.AttachmentFiles

$ attachments теперь представляет собой массив объектов вложений.

Однако по-прежнему существует огромная проблема с копированием / добавлением вложений к новым элементам, поскольку sharepoint имеет ужасную систему для управления этими вложениями и изначально не имеет папки для их хранения, и вы не можете создать папку напрямую. У меня все еще возникают проблемы с копированием вложений между элементами, и если кто-нибудь знает, как это сделать, мне тоже нужна помощь.

Основная проблема при добавлении вложений в свойство AttachmentFiles заключается в том, что он использует метод $ item.AttachmentFiles.Add (), который требует, чтобы параметр был объектом AttachmentCreationInformation, а не объектом вложения. Я понятия не имею, как сделать эту функцию так, как я намереваюсь, чтобы я мог добавить уже существующее вложение к новому элементу.

person user2529323    schedule 01.07.2013