Использование VBA для чтения метаданных или свойств файлов файлов в библиотеке документов SharePoint - PullRequest
3 голосов
/ 20 сентября 2011

У меня есть несколько сотен шаблонов Word (DOTX) на сайте SharePoint. Многие команды пользователей работают с этими шаблонами.

Когда пользователю необходимо настроить эту документацию, он щелкает специальную ссылку в SharePoint, чтобы создать новый документ (DOCX) из выбранного им шаблона. Этот новый файл документа всегда должен быть «связан» с файлом шаблона в SharePoint. Если документ потеряет эту ссылку, он не будет работать правильно и считается «неработающим».

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

Я хочу присвоить каждому файлу шаблона уникальный идентификатор шаблона (трехзначное число), сохраненный в метаданных или в пользовательском свойстве файла. Когда новые документы генерируются из шаблонов, идентификатор шаблона автоматически переносится в документ, так что это установлено. Теперь мне просто нужно использовать VBA для сканирования файлов шаблонов в библиотеке документов SharePoint на предмет соответствия идентификатору шаблона. Когда это будет найдено, я смогу восстановить связь, и все в порядке.

Я в основном ищу это:

Sub DocFixer()

Dim objTemplate as Template
Dim objBrokenDoc as Document

Set objBrokenDoc = ActiveDocument

For each objTemplate in "\\SharePoint\Template Library\".Templates
    If objTemplate.Properties("Template ID").Value = objBrokenDoc.Properties("Template ID").Value Then
        objBrokenDoc.AttachedTemplate = objTemplate.Path
        Exit For
    End If
Next

End Sub

… но у меня возникают проблемы с использованием VBA для чтения содержимого библиотеки документов SharePoint без фактического открытия содержимого, поскольку это занимает слишком много времени при использовании большого количества шаблонов, а также очень разрушительно для пользователя.

Есть идеи? Не могли бы вы указать мне правильное направление?

Редактировать: вот мое решение:

Sub Macro()

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")

Dim objFile As Object
Dim objDSO As Object

For Each objFile In FSO.GetFolder("\\SharePoint\doc lib\").Files
    Set objDSO = CreateObject("DSOFile.OleDocumentProperties")
    objDSO.Open objFile.Path

    If objDSO.CustomProperties.Item("Template_ID") = ActiveDocument.CustomDocumentProperties("Template_ID").Value Then
        ActiveDocument.AttachedTemplate = objFile.Path
        End
    End If
Next

MsgBox ("No matching template found. Please attach the proper template manually."), vbCritical

End Sub

По-видимому, это касается DSOFile.dll (http://technet.microsoft.com/en-us/library/ee692828.aspx),, но мне не нужно было добавлять ссылку? Все еще запутался в этой части.

Кроме того, это может не работать через https: // (SSL). Работая на меня, хотя, поэтому я думал, что поделюсь.

1 Ответ

0 голосов
/ 20 сентября 2011

Я бы начал с вызова веб-служб SharePoint из VBA.Оказавшись там, вы можете позвонить GetListItems , чтобы получить документ с правильным атрибутом TemplateID напрямую.

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