VBScript для загрузки файла в SharePoint DocLib

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

Я ищу решение для автоматической загрузки файла (в частности, типов .xlsx и .zip) с локального компьютера в определенную библиотеку документов SharePoint (давайте использовать «... / sharepoint / Metrics / Forms / AllItems.aspx "как список), используя VBA или VB Script.

При изучении проблемы вот еще несколько мыслей / комментариев, которые, надеюсь, помогут кому-то найти мне решение:

  • Я не могу ничего изменить на сервере SharePoint
  • Мне нужно иметь возможность передавать учетные данные при загрузке файла
  • Я ищу только решения VBA / VBS (без C # или .NET)
  • Мне может потребоваться установить метаданные при загрузке

Спасибо заранее за любую помощь.


person user457338    schedule 24.09.2010    source источник


Ответы (4)


Следующий сценарий VBScript загружает файл с помощью FrontPage RPC:

Function StringToByteArray(str)
   Set stream = CreateObject("ADODB.Stream")
   stream.Open
   stream.Type = 2 ''adTypeText
   stream.Charset = "ascii"
   stream.WriteText str
   stream.Position = 0
   stream.Type = 1 ''adTypeBinary
   StringToByteArray = stream.Read()
   stream.Close
End Function

Sub UploadFile(sourcePath, siteUrl, docName, title, checkincomment, userName, password)

   strHeader = "method=put+document%3a12.0.4518.1016" + _
      "&service_name=%2f" + _
      "&document=[document_name=" + Escape(docName) + _
      ";meta_info=[vti_title%3bSW%7c" + Escape(title) + "]]" + _
      "&put_option=overwrite,createdir,migrationsemantics" + _
      "&comment=" + _
      "&keep%5fchecked%5fout=false" + vbLf
   bytearray = StringToByteArray(strHeader)

   Set stream = CreateObject("ADODB.Stream")
   stream.Open
   stream.Type = 1 ''adTypeBinary
   stream.Write byteArray

   Set stream2 = CreateObject("ADODB.Stream")
   stream2.Open
   stream2.Type = 1 ''adTypeBinary
   stream2.LoadFromFile sourcePath
   stream2.CopyTo stream, -1
   stream.Position = 0

   Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
   xmlHttp.open "POST", siteUrl + "/_vti_bin/_vti_aut/author.dll", false, userName, password
   xmlhttp.setRequestHeader "Content-Type","application/x-vermeer-urlencoded"
   xmlhttp.setRequestHeader "X-Vermeer-Content-Type","application/x-vermeer-urlencoded"
   xmlhttp.setRequestHeader "User-Agent", "FrontPage"
   xmlHttp.send stream

   If xmlHttp.status = 200 Then

       If Instr(xmlHttp.responseText, "successfully") = 0 Then

          MsgBox "ERROR: " & vbCrLf & xmlHttp.responseText       

       Else

          ''Checkin

          strHeader = "method=checkin+document%3a12.0.4518.1016" + _
             "&service_name=%2f" + _
             "&document_name=" & Escape(docName) + _
             "&comment=" + Escape(checkincomment) + _
             "&keep%5fchecked%5fout=false" + vbLf

          Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
          xmlHttp.open "POST", siteUrl + "/_vti_bin/_vti_aut/author.dll", false, userName, password
          xmlhttp.setRequestHeader "Content-Type","application/x-vermeer-urlencoded"
          xmlhttp.setRequestHeader "X-Vermeer-Content-Type","application/x-vermeer-urlencoded"
          xmlhttp.setRequestHeader "User-Agent", "FrontPage"
          xmlHttp.send strHeader



       End If

   End If

   If xmlHttp.status / 100 <> 2 Then
      MsgBox "ERROR: status = " & xmlHttp.status & vbCrLf & xmlHttp.responseText
   End If

End Sub

UploadFile "C:\Users\myusername\Desktop\Test File.zip", _
    "http://computername/Sites/sitename", _
    "Requirements/Test File.zip", _
    "Test title", _
    "Test checkin comment", _
    "MYDOMAIN\myusername", "mypassword"
MsgBox "Done"

Обратите внимание, что имя файла должно состоять только из символов ASCII. В противном случае приведенный выше сценарий работать не будет.

person Community    schedule 25.09.2010
comment
Большое спасибо! Это как раз то, что мне нужно. У меня уже есть это «подключено» и работает. Единственный вопрос, который у меня сейчас есть: как я могу установить значения для других полей метеданных? Пример ... мы должны предоставить описание и имя проекта для каждого документа при загрузке ... так как / где мне это установить? - person user457338; 28.09.2010
comment
Внутри приведенного выше сценария добавляются метаданные vti_title. Вы можете добавить дополнительные свойства метаданных, добавив их в скобки meta_info=[...]. Например. ";meta_info=[vti_title%3bSW%7c" + Escape(title) + ";project%3bSW%7c" + Escape(project) + "]]". У вас должно быть настраиваемое поле с именем project в библиотеке документов. SW означает, что это должно быть строковое значение (используйте BW для логического (истина / ложь) или IW для целого числа). - person ; 28.09.2010

Как насчет сопоставления буквы диска с библиотекой документов SharePoint. Тогда просто скопируйте / переместите файлы как обычно?

http://blog.crowe.co.nz/archive/2005/08/31/244.aspx

person Shane    schedule 24.09.2010

Лучшим решением будет использование FP RPC (удаленный вызов процедуры на главной странице). По сути, это веб-запрос, в котором вы передаете метаданные и содержимое файла в качестве параметров. Это можно сделать на любом языке, включая VBA / VBS. Это формальное описание метода: http://msdn.microsoft.com/en-us/library/ms479623.aspx Вы можете найти довольно много ресурсов и примеров кода о том, как создать утилиту

person Vladi Gubler    schedule 24.09.2010

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

function SPCopy(InFileName, InPath, oFS)

    SPURL = ""
    SPSource = InPath & "\" & InFileName

    ' determine which sharepoint path to copy the excel workbook to
    If InStr(InFileName, "Email") > 0 Then
        SPURL = "\\sharepoint\sites\IS\Shared Documents\Email Reports"
    ElseIf InStr(InFileName, "FTP") > 0 Then
        SPURL = "\\sharepoint\sites\IS\Shared Documents\FTP Reports"
    ElseIf InStr(InFileName, "SSL") > 0 Then
        SPURL = "\\sharepoint\sites\IS\Shared Documents\SSL Reports"
    End If 

    If SPURL = "" Then
        MsgBox "File: " & SPSource & " is not a valid file from STRM..." & vbCrLf & _
            "Not sure where to upload it to SharePoint... " & vbCrLf & vbCrLf & _
            SPSource & " will be deleted...", 48, "myScript"
        Exit Function
    End If

    ' build the final part of the path based on the year and month
    MyDate = Left(InFileName, 4) & "_" & MonthName(Mid(InFileName, 5, 2))
    MyTitle = Mid(InFileName, 10, InStr(InFileName, ".") - 10)
    SPURL = SPURL & "\" & MyDate
    DestFile = SPURL & "\" & InFileName

    ' copy the file(s) to the sharepoint path if its not already there
    If Not oFS.FileExists(DestFile) Then
        oFS.CopyFile SPSource, SPURL, True
    End If
end function
person Steve Steiner    schedule 24.05.2013