none
Sharepoint - пакетное изменение элементов списка RRS feed

  • Общие обсуждения

  • Здравствуйте.

    На узле Sharepoint Server 2007 есть список (List) в котором каждый элемент списка имеет значение типа "ссылка на файл". В списке более 2000 элементов.

    Возникла необходимость изменить ссылки в элементах: было к примеру http://corp.domain.com/folder/file.zip а нужно изменить на http://corp.domain.com:8080/folder2/file.zip.

    попробовал через PowerShell так:

    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Portal")
    $ReplaseText_Old = "http://corp.domain.com/folder/"
    $ReplaseText_New = "http://corp.domain.com:8080/folder2/"
    $my_site = New-Object Microsoft.SharePoint.SPSite("http://corp.domain.com")
    $my_list = $my_site.RootWeb.Lists | Where-Object { $_.Title -eq 'Нормативная документация' }
    $my_list.Items | foreach {$old_Data = $_.Xml; $new_Data = $old_Data -replace ($ReplaseText_Old,$ReplaseText_New); $_.Xml = $new_Data; $_.Update();}

    но получил от PowerShell такой отлуп: Xml является свойством ReadOnly.

    Подскажите - вожможно-ли каким то другим способом решить поставленную задачу ибо в ручную перебивать более 2000 элементов это убийство .... 
    1 февраля 2009 г. 13:41

Все ответы

  • Добрый день.
    Откройте список в представлении таблицы данных (Actions - Open in data sheet), у первого элемента меняете поле, и далее - как в Excel за уголок тащите это поле на остальные элементы
    MCTS
    2 февраля 2009 г. 9:31
    Отвечающий
  • К сожалению в представлении таблицы данных поля типа Ссылка на файл не отображаются вовсе
    2 февраля 2009 г. 13:28
  • Попробую более подробно осветить проблему.

    Есть определенный список. Ссылка на список соответсвенно - "http://corp.domain.com/Lists/CustomList/AllItems.aspx"

    У него есть следующие столбцы:

    Тип документации - Однострочный текст  
    Наименование документа - Многострочный текст  
    Ссылка на файл - Гиперссылка или рисунок  
    Кем создано - Пользователь или группа  
    Автор изменений - Пользователь или группа 

    Так вот. в столбце "Ссылка на файл" хранились сведения о ссылке на файл для скачивания его пользователями.
    Например так: "http://corp.domain.com/folder/file.zip"

    Список был перенесен на другой узел в другой ферме и для файлов было отведено место на отдельном узле IIS
    Был создан отдельный узел IIS на порту 8080 с виртуальным каталогом. Соответсвенно встала задача во всех элементах спика в столбце "Ссылка на файл" изменить значение на подобное "http://corp.domain.com:8080/virtcatalog/file.zip"

    соответсвенно нужно узнать в каком атрибуте списка храниться сам url на файл.
    средствами PowerShell я пытаюсь получить сведения о записях списка:

    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Portal")
    $my_site = New-Object Microsoft.SharePoint.SPSite("http://corp.domain.com/")
    $my_list = $my_site.RootWeb.Lists | Where-Object { $_.Title -eq 'Нормативно-техническая документация' }
    $my_list.Items

    по каждому элементу списка получаю сведения такого вида:

    ModerationInformation    :
    ForwardLinks             : {00000000-0000-0000-0000-000000000000}
    BackwardLinks            : {}
    Attachments              : {}
    Name                     : ГОСТы, ОСТы
    DisplayName              : ГОСТы, ОСТы
    File                     :
    Folder                   :
    Properties               : {}
    ServerRedirected         : False
    Versions                 : {512}
    HasPublishedVersion      : True
    FileSystemObjectType     : File
    Audit                    : Microsoft.SharePoint.SPAudit
    Workflows                : {}
    Tasks                    : {}
    CopySource               :
    RoleAssignments          : {Microsoft.SharePoint.SPRoleAssignment, Microsoft.SharePoint.SPRoleAssignment, Microsoft.Sha
                               rePoint.SPRoleAssignment, Microsoft.SharePoint.SPRoleAssignment}
    HasUniqueRoleAssignments : False
    EffectiveBasePermissions : ViewListItems, AddListItems, EditListItems, DeleteListItems, ApproveItems, OpenItems, ViewVe
                               rsions, DeleteVersions, CancelCheckout, ManagePersonalViews, ManageLists, ViewFormPages, Ope
                               n, ViewPages, AddAndCustomizePages, ApplyThemeAndBorder, ApplyStyleSheets, ViewUsageData, Cr
                               eateSSCSite, ManageSubwebs, CreateGroups, ManagePermissions, BrowseDirectories, BrowseUserIn
                               fo, AddDelPrivateWebParts, UpdatePersonalWebParts, ManageWeb, UseClientIntegration, UseRemot
                               eAPIs, ManageAlerts, CreateAlerts, EditMyUserInfo, EnumeratePermissions
    AllRolesForCurrentUser   : {Полный доступ, Чтение, Ограниченный доступ}
    FirstUniqueAncestor      : Нормативно-техническая документация
    ReusableAcl              : Microsoft.SharePoint.SPReusableAcl
    Title                    : ГОСТы, ОСТы
    Url                      : Lists/CustomList/171_.000
    Level                    : Published
    ContentType              : Microsoft.SharePoint.SPContentType
    MissingRequiredFields    : False

    ListItems                : {Базовые цены, Базовые цены, Базовые цены, Базовые цены...}
    ParentList               : Нормативно-техническая документация
    CopyDestinations         :
    CopyFieldMask            :
    ID                       : 172
    UniqueId                 : 861723f4-2a16-4806-8088-e3f70a91be10
    RecurrenceID             : 172
    Web                      : ОАО Фирма Рога и Копыта
    Fields                   : {03e45e84-1992-4d42-9116-26f756012634, fa564e0f-0c70-4ab9-b863-0177e6ddd247, 34ad21eb-75bd-4
                               544-8c73-0e08330291fe, 39360f11-34cf-4356-9945-25c44e68dade...}
    Xml                      : <z:row xmlns:z='#RowsetSchema' ows_ContentTypeId='0x0100F6C07D717644F145B343F576248BC58D' ow
                               s_Title='ГОСТы, ОСТы' ows__x0421__x0442__x043e__x043b__x04=' ГОСТ 12.2.021-76 Порядок соглас
                               ования технической документации, проведения испытаний, выдачи заключений и свидетельств. (19
                               77г.) '
    ows__x0421__x0442__x043e__x043b__x040='http://corp.domain.com/folder/1176.zip, (15,7 Kb) '
       ows_LinkTitleNoMenu='ГОСТы, ОСТы' ows_LinkTitle='
                               ГОСТы, ОСТы' ows_ID='172' ows_ContentType='Элемент' ows_Modified='2009-02-01 14:32:56' ows_C
                               reated='2009-02-01 11:25:47' ows_Author='1;#Василий Пупкин' ows_Editor='1;#Василий Пупкин'
       ows_owshiddenversion='2' ows_WorkflowVersion='1' ows__UIVersion='512' ows__UIVersionStrin
                               g='1.0' ows_Attachments='0' ows__ModerationStatus='0' ows_SelectTitle='172' ows_Order='17200
                               .0000000000' ows_GUID='{1C9AB600-8829-4297-9B13-8D1371BF73A4}'
      ows_FileRef='172;#Lists/CustomList/172_.000' ows_FileDirRef='172;#Lists/CustomList'
      ows_Last_x0020_Modified='172;#2009-02-01 11:25:47'
                               ows_Created_x0020_Date='172;#2009-02-01 11:25:47' ows_FSObjType='172;#0' ows_PermMask='0x400
                               001f07fff1bff' ows_FileLeafRef='172;#172_.000' ows_UniqueId='172;#{861723F4-2A16-4806-8088-E
                               3F70A91BE10}' ows_ProgId='172;#' ows_ScopeId='172;#{BA606998-316E-4F1B-A650-7458124FF753}' o
                               ws__EditMenuTableStart='172_.000' ows__EditMenuTableEnd='172' ows_LinkFilenameNoMenu='172_.0
                               00' ows_LinkFilename='172_.000' ows_ServerUrl='/Lists/CustomList/172_.000' ows_EncodedAbsUrl='http:
                               //corp.domain.com/Lists/CustomList/172_.000' ows_BaseName='172_' ows_MetaInfo='
                               172;#' ows__Level='1' ows__IsCurrentVersion='1' ows_ServerRedirected='0'/>


    Как видно из вывода ссылка на наш файл встречается только в поле Xml
    Соответсвенно пытаемся сделать text replace в значении этого поля и тут получаем нашу ошибку.

    $ReplaseText_Old = "http://corp.domain.com/folder/"
    $ReplaseText_New = "http://corp.domain.com:8080/virtcatalog/"
    $my_list.Items | foreach {$old_Data = $_.Xml; $new_Data = $old_Data -replace ($ReplaseText_Old,$ReplaseText_New); $_.Xml = $new_Data; $_.Update();}

    -->  Xml является свойством ReadOnly.

    2 февраля 2009 г. 15:54