2010-09-24 2 views
3

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

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

В исследовании этого вопроса, вот некоторые другие мысли/замечания, которые, надеюсь, помогут кому-то в предоставлении мне решение:

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

Заранее благодарю за любую помощь.

ответ

8

Следующая 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. В противном случае приведенный выше сценарий не будет работать.

+0

ОТКЛОНЯТ! Это то, что мне нужно. У меня уже есть это «подключено» и работает. Единственный вопрос, который у меня есть сейчас: как я могу установить значения для других полей метаданных? Пример ... мы должны предоставить описание и имя проекта для каждого документа при загрузке ... так как/где я это устанавливаю? – user457338

+1

Внутри вышеприведенного скрипта добавлены метаданные «vti_title». Вы можете добавить дополнительные свойства метаданных, добавив их в скобки 'meta_info = [...]'. Например. '"; meta_info = [vti_title% 3bSW% 7c "+ Escape (title) +"; project% 3bSW% 7c "+ Escape (project) +"]] "'. У вас должно быть специальное поле под названием 'project' в библиотеке документов. «SW» означает, что это должно быть строковое значение (используйте «BW» для логических (true/false) или «IW» для целого числа). – 2010-09-28 05:24:20

0

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

0

Вот как я выполнил эту задачу, теперь мне нужно найти способ проверить документ через 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 
Смежные вопросы