#sharepoint #vbscript #rpc
#sharepoint #vbscript #rpc
Вопрос:
В настоящее время я использую следующие сценарии VB и вызовы RPC frontpage для загрузки документов и их перспективных значений метаданных, которые настроены в сценарии, на сайт Sharepoint 2007 и 2010. Однако файлы с расширением * .xlsx или * .docx не загружают свои метаданные с помощью этого скрипта.
После исследования различных веб-сайтов, похоже, возникла проблема с тем, как _vti_aut / author .библиотека dll обрабатывает новый формат open Office в WSS 3.0. Некоторые предложения заключаются в использовании метода SetDocsMetaInfo после загрузки файла на сайт SharePoint.
Проблема в том, что я не понимаю, как использовать этот метод с этим скриптом. Когда я пытаюсь его использовать, я могу загрузить файл * .xlsx или * .docx с правильными метаданными, но затем файл повреждается.
Некоторые веб-сайты, которые я исследовал, предположили, что это может быть способ кодирования файла, но я недостаточно хорошо знаком с кодировкой, чтобы точно устранить неполадки.
Может ли кто-нибудь привести несколько примеров использования этого метода (SetDocsMetaInfo) с помощью приведенного ниже сценария или предоставить решение этой проблемы с помощью этого сценария?
Этот оригинальный сценарий был получен с этого веб-сайта:
UploadFile "C:TestWorktempdefertestDoc_083011.xlsx", _
"http://sharepoint.domainname.com/Sites/SITE1", _
"TestImport/folder1/testDoc_083011.xlsx_083011.xlsx", _
"Test", _
"Test checkin comment", _
"", ""
MsgBox "Done"
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:12.0.4518.1016" _
"amp;service_name=/" _
"amp;document=[document_name=" Escape(docName) _
";meta_info=[vti_title;SW|" Escape(title) ";Business Unit;SW|" Escape("Business Unit") "]]" _
"amp;put_option=overwrite,createdir,migrationsemantics" _
"amp;comment=" _
"amp;keep_checked_out=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: " amp; vbCrLf amp; xmlHttp.responseText
Else
''Checkin
strHeader = "method=checkin document:12.0.4518.1016" _
"amp;service_name=/" _
"amp;document_name=" amp; Escape(docName) _
"amp;comment=" Escape(checkincomment) _
"amp;keep_checked_out=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 = " amp; xmlHttp.status amp; vbCrLf amp; xmlHttp.responseText
End If
End Sub
Ответ №1:
У меня была только эта проблема, и я обнаружил, что использование явно устаревшей версии процедуры работает в соответствии с приведенным ниже кодом Set document meta-info работает нормально:
Public Sub SetSPMetaData(ByVal sURL As String, ByVal sDocName As String, ByVal sTitle As String, _
Optional ByVal OriginalPath As String, Optional ByVal OriginalName As String, _
Optional ByVal ModDate As Date, Optional ByVal FileID As Long)
Dim strHeader As String
Dim byteArray() As Byte
Dim stream As New ADODB.stream
Dim stream2 As New ADODB.stream
Dim xmlHTTP As New MSXML2.xmlHTTP
Dim sTempFile As String
Dim UserName As String
Dim Password As String
On Error GoTo SetSPMetaData_Error
'Method = setDocsMetaInfo: server_extension_version
'amp;service_name=/[amp;listHiddenDocs=(true|false)]
'amp;listLinkInfo=(true|false)amp;url_list=list_of_urls
'amp;metaInfoList=(list_of_meta_info)[amp;errorFlags=(KeepGoing|StopOnFirst)]
'POST /site_url/_vti_bin/_vti_aut/author.dll HTTP/1.0
'.
'.
'.
'method=set docs meta info:6.0.n.nnnn
'amp;service_name=/
'amp;url_list=[List_Name/File_Name]
'amp;metaInfoList=[[vti_title;SR|Web Settin>SW|fp40]]true
'amp;listLinkInfo=true
If OriginalPath = "" And OriginalName = "" Then
strHeader = "method=set document meta-info:6.0.n.nnnn" _
"amp;service_name=/amp;document_name=" amp; sDocName amp; _
"amp;meta_info=[vti_title;SR|" amp; Replace(Escape(sTitle), "", "\") amp; "]"
Else
If OriginalName = "" Then
If CLng(ModDate) = 0 Then
strHeader = "method=set document meta-info:6.0.n.nnnn" _
"amp;service_name=/amp;document_name=" amp; sDocName amp; _
"amp;meta_info=[vti_title;SR|" amp; Replace(Escape(sTitle), "", "\") amp; _
";Original Path;SR|" amp; Replace(Escape(OriginalPath), "", "\") amp; "]"
Else
strHeader = "method=set document meta-info:6.0.n.nnnn" _
"amp;service_name=/amp;document_name=" amp; sDocName amp; _
"amp;meta_info=[vti_title;SR|" amp; Replace(Escape(sTitle), "", "\") amp; _
";Original Modified|" amp; Format(ModDate, "DD MMM YYYY hh:mm:ss") amp; _
";Original Path;SR|" amp; Replace(Escape(OriginalPath), "", "\") amp; "]"
End If
Else
If CLng(ModDate) = 0 Then
strHeader = "method=set document meta-info:6.0.n.nnnn" _
"amp;service_name=/amp;document_name=" amp; sDocName amp; _
"amp;meta_info=[vti_title;SR|" amp; Replace(Escape(sTitle), "", "\") amp; _
";Original Name;SR|" amp; Replace(Escape(OriginalName), "", "\") amp; _
";Original Path;SR|" amp; Replace(Escape(OriginalPath), "", "\") amp; "]"
Else
strHeader = "method=set document meta-info:6.0.n.nnnn" _
"amp;service_name=/amp;document_name=" amp; sDocName amp; _
"amp;meta_info=[vti_title;SR|" amp; Replace(Escape(sTitle), "", "\") amp; _
";Original Name;SR|" amp; Replace(Escape(OriginalName), "", "\") amp; _
";Original Modified;TW|" amp; Format(ModDate, "DD MMM YYYY hh:mm:ss") amp; _
";Original Path;SR|" amp; Replace(Escape(OriginalPath), "", "\") amp; "]"
End If
End If
End If
byteArray = StringToByteArray(strHeader)
'Set stream = CreateObject("ADODB.Stream")
If gConfig.GetConfig("frmHTTPAuthentication") = 2 Then
If gConfig.GetConfig("txtUserPassword") <> "" Then Password = gConfig.GetConfigDecrypt("txtUserPassword")
If gConfig.GetConfig("txtUserName") <> "" Then UserName = gConfig.GetConfigDecrypt("txtUserName")
End If
stream.Open
stream.Type = 1 ''adTypeBinary
stream.Write byteArray
stream.Position = 0
'stream.SaveToFile "C:StreamContent.txt"
xmlHTTP.Open "POST", sURL "/_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, "osstatus=0") <> 0 Then
'230 MsgBox "Error - " amp; cleanup_html(xmlHTTP.responseText)
Call LogErrorFilFol(GetFileFromPath(sURL), GetFolderFromPath(sURL), _
"SetSPMetaData - osstatus = 0 - " amp; cleanup_html(xmlHTTP.responseText), FileID)
End If
'260 Debug.Print xmlHTTP.responseText
Else
Call LogErrorFilFol(GetFileFromPath(sURL), GetFolderFromPath(sURL), "SetSPMetaData - Status = " amp; xmlHTTP.Status, FileID)
End If