Upload súboru do zložky dokumentov na Sharepointe

Iste, interaktívne klik, klik, klik. Najmite opicu, ktorá to isté bude robiť každý deň. Alebo si to naprogramujte.

microsoft-windows-8

Zadanie je jednoduché. V lokalite

http://nas.sharepoint/nieco/

máme zložku s názvom Test. Pri pohľade do zložky ju vidím ako URL

http://nas.sharepoint/nieco/test/Forms/AllItems.aspx

Na lokálnom disku, či pripojenej jednotke mám súbor:

C:\work\test289.xml

a ten chcem dostať do zložky na Sharepointe.

Tento skript je jedným z mnohých riešení. Tentoraz používa Ado.

Najprv potrebný bordel, ktorý nemusíte študovať:

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

Podstatné je ako to použiť:

UploadFile "C:\work\test289.xml ", _
    "http://nas.sharepoint/nieco/", _
    "test/test289.xml", _
    "Test title", _
    "Test checkin comment", _
    "domena\kontor", "heslo"
MsgBox "Done"

Vidíte, že skript sa “tvari” ako keby bol používateľ a akoby interaktívne vyplnil ten známy dialóg na vkladanie súboru do sharepoint zložky.

Takže pri volaní funkcie UploadFile máme parametre:

Umiestnenie súboru, URL sharepoint lokality, cieľová zložka a názov cieľového súboru, pomenovanie položky, komentár a potom už len konto a heslo.

Toto riešenie je obchádzka ak nefunguje prenos pomocou UNC.

Napísal rony