Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Excel VBA发布带有IBM Connections附件的论坛主题_Vba_Excel_Ibm Connections - Fatal编程技术网

如何使用Excel VBA发布带有IBM Connections附件的论坛主题

如何使用Excel VBA发布带有IBM Connections附件的论坛主题,vba,excel,ibm-connections,Vba,Excel,Ibm Connections,我正在尝试使用ExcelVBA将一个带有附加图像文件的论坛主题发布到IBMConnections5.0。 根据一个多部分请求,这里将需要一个多部分请求 我已经设法发布了一个没有附件的论坛主题,并将一个文本或图像文件附加到现有的wiki页面。因此,我假设问题与这些方面无关,而是与多部分请求的正确格式有关。这里的API描述对我来说不是很清楚,我尝试了在其他帮助论坛中找到的关于多部分请求的一些方法。但我得到的只是“400个坏请求”的回应 也许你们中的一些专家可以给我一个关于我的代码的提示: Publi

我正在尝试使用ExcelVBA将一个带有附加图像文件的论坛主题发布到IBMConnections5.0。 根据一个多部分请求,这里将需要一个多部分请求

我已经设法发布了一个没有附件的论坛主题,并将一个文本或图像文件附加到现有的wiki页面。因此,我假设问题与这些方面无关,而是与多部分请求的正确格式有关。这里的API描述对我来说不是很清楚,我尝试了在其他帮助论坛中找到的关于多部分请求的一些方法。但我得到的只是“400个坏请求”的回应

也许你们中的一些专家可以给我一个关于我的代码的提示:

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谢谢你的评论。“我试过了,但没有成功。”保罗·巴斯蒂德谢谢你把我指给费德勒。我安装了它,下面是响应的跟踪(希望这是您的意思):无效条目表示您正在向服务器发送无效内容。你能把请求中的条目粘贴到这里吗?您似乎没有向服务器发送正确的数据