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

[code]http://nas.sharepoint/nieco/[/code]

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

[code]http://nas.sharepoint/nieco/test/Forms/AllItems.aspx[/code]

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

[code]C:\work\test289.xml[/code]

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ť:

[code]
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
[/code]

Podstatné je ako to použiť:

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

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.

Môže sa Vám ešte páčiť...