如何使用Excel VBA发布带有IBM Connections附件的论坛主题
我正在尝试使用ExcelVBA将一个带有附加图像文件的论坛主题发布到IBMConnections5.0。 根据一个多部分请求,这里将需要一个多部分请求 我已经设法发布了一个没有附件的论坛主题,并将一个文本或图像文件附加到现有的wiki页面。因此,我假设问题与这些方面无关,而是与多部分请求的正确格式有关。这里的API描述对我来说不是很清楚,我尝试了在其他帮助论坛中找到的关于多部分请求的一些方法。但我得到的只是“400个坏请求”的回应 也许你们中的一些专家可以给我一个关于我的代码的提示:如何使用Excel VBA发布带有IBM Connections附件的论坛主题,vba,excel,ibm-connections,Vba,Excel,Ibm Connections,我正在尝试使用ExcelVBA将一个带有附加图像文件的论坛主题发布到IBMConnections5.0。 根据一个多部分请求,这里将需要一个多部分请求 我已经设法发布了一个没有附件的论坛主题,并将一个文本或图像文件附加到现有的wiki页面。因此,我假设问题与这些方面无关,而是与多部分请求的正确格式有关。这里的API描述对我来说不是很清楚,我尝试了在其他帮助论坛中找到的关于多部分请求的一些方法。但我得到的只是“400个坏请求”的回应 也许你们中的一些专家可以给我一个关于我的代码的提示: Publi
Public Sub CreateForumPost()
Const sBoundary As String = "2588eb82-2e1c-4aec-9f4f-d65a3ecf8fab"
Dim oHttp As MSXML2.xmlhttp
Dim sUrl As String
Dim sBody As String
'create XMLHTTP object and URL
Set oHttp = CreateObject("MSXML2.XMLHTTP")
sUrl = "https://my-connect-server/forums/atom/topics?forumUuid=9e51cbfb-4b1d-405d-9835-dbd087c49a65"
'create forum post
sBody = "--" & sBoundary & vbCrLf
sBody = sBody & "<?xml version=""1.0"" encoding=""UTF-8""?>"
sBody = sBody & "<entry xmlns=""http://www.w3.org/2005/Atom"" xmlns:app=""http://www.w3.org/2007/app"" xmlns:snx=""http://www.ibm.com/xmlns/prod/sn"">"
sBody = sBody & "<category scheme=""http://www.ibm.com/xmlns/prod/sn/type"" term=""forum-topic""/>"
sBody = sBody & "<title type=""text""> " & "My Title" & " </title>"
sBody = sBody & "<category term=""question"" scheme=""http://www.ibm.com/xmlns/prod/sn/flags""/>"
sBody = sBody & "<category term=""" & "my-tag" & """/>"
sBody = sBody & "<content type=""html""> " & "My post content" & " </content>"
sBody = sBody & "</entry>" & vbCrLf
sBody = sBody & "--" & sBoundary & vbCrLf
sBody = sBody & "Content-Disposition: attachment; filename=""dummy.txt""" & vbCrLf & vbCrLf
sBody = sBody & sGetFile("c:\temp\dummy.txt") & vbCrLf
sBody = sBody & "--" & sBoundary & "--" & vbCrLf
Call oHttp.Open("POST", sUrl, False)
Call oHttp.setRequestHeader("Content-Type", "multipart/related;boundary=" & sBoundary & ";type=""application/atom+xml""")
Call oHttp.send(pvToByteArray(sBody))
If oHttp.Status = 201 Then
Call MsgBox("success")
Else
Call MsgBox("error")
Stop
End If
End Sub
Private Function sGetFile(sName As String) As String
Dim abyContent() As Byte
Dim iNumber As Integer
Dim lLen As Long
lLen = FileLen(sName)
If lLen > 0 Then
ReDim abyContent(lLen - 1)
iNumber = FreeFile
Open sName For Binary Access Read As iNumber
Get iNumber, , abyContent
Close iNumber
sGetFile = StrConv(abyContent, vbUnicode)
Else
sGetFile = ""
End If
End Function
Function pvToByteArray(sText As String) As Byte()
pvToByteArray = StrConv(sText, vbFromUnicode)
End Function
公共子CreateForumPost()
Const sBoundary As String=“2588eb82-2e1c-4aec-9f4f-d65a3ecf8fab”
Dim-oHttp作为MSXML2.xmlhttp
作为字符串的Dim sUrl
把身体当作绳子
'创建XMLHTTP对象和URL
设置oHttp=CreateObject(“MSXML2.XMLHTTP”)
苏尔=”https://my-connect-server/forums/atom/topics?forumUuid=9e51cbfb-4b1d-405d-9835-dbd087c49a65“
“创建论坛帖子
sBody=“--”和sBoundary&vbCrLf
sBody=sBody&“
sBody=sBody&“
sBody=sBody&“
sBody=sBody&“我的头衔”
sBody=sBody&“
sBody=sBody&“
sBody=sBody&“我的帖子内容”&”
sBody=sBody&&vbCrLf
sBody=sBody&“--”&sBoundary&vbCrLf
sBody=sBody&“内容处置:附件;filename=”“dummy.txt”“”&vbCrLf&vbCrLf
sBody=sBody&sGetFile(“c:\temp\dummy.txt”)&vbCrLf
sBody=sBody&“--”&sBoundary&“--”&vbCrLf
呼叫oHttp.Open(“POST”,sUrl,False)
调用oHttp.setRequestHeader(“内容类型”、“多部分/相关的;边界=“&sBoundary&”Type=“”应用程序/atom+xml”“”)
调用oHttp.send(pvToByteArray(sBody))
如果oHttp.状态=201,则
呼叫MsgBox(“成功”)
其他的
调用MsgBox(“错误”)
停止
如果结束
端接头
专用函数sGetFile(sName作为字符串)作为字符串
Dim abyContent()作为字节
作为整数的Dim iNumber
暗淡如长
lLen=FileLen(sName)
如果lLen>0,则
ReDim ABY内容(lLen-1)
iNumber=FreeFile
打开sName进行二进制访问,读取为iNumber
记住,aby内容
近数
sGetFile=StrConv(abyContent,vbUnicode)
其他的
sGetFile=“”
如果结束
端函数
函数pvToByteArray(sText作为字符串)作为字节()
pvToByteArray=StrConv(sText,vbFromUnicode)
端函数
我们发现了问题所在。这确实是关于多部分请求的格式问题。你需要对CrLf角色非常小心
Public Sub CreateForumPost()
'...
'create forum post
sBody = vbCrLf & "--" & sBoundary & vbCrLf & vbCrLf
'...
sBody = sBody & sGetFile("c:\temp\dummy.txt") & vbCrLf
sBody = sBody & "--" & sBoundary & "--"
'...
End Sub
现在它起作用了。不过,非常感谢您的支持 您是否完全按照API描述中描述的方式进行了尝试?因此,在
内容类型
标题中没有边界,而是使用固定的--MIME_边界
边界,在内容配置
后面没有双CRLF
,在结尾没有--MIME_边界--
?这不是相应的RFC,但可能API正是这样期望的。您可以使用fiddler捕获跟踪吗?我对答复很感兴趣content@AxelRichter谢谢你的评论。“我试过了,但没有成功。”保罗·巴斯蒂德谢谢你把我指给费德勒。我安装了它,下面是响应的跟踪(希望这是您的意思):无效条目表示您正在向服务器发送无效内容。你能把请求中的条目粘贴到这里吗?您似乎没有向服务器发送正确的数据