Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
Reporting services 使用VBA从reporting services下载文件_Reporting Services_Vbscript - Fatal编程技术网

Reporting services 使用VBA从reporting services下载文件

Reporting services 使用VBA从reporting services下载文件,reporting-services,vbscript,Reporting Services,Vbscript,我有这个脚本文件。我正在尝试使用XMLHTTP从reporting services下载。如果登录后将url粘贴到浏览器中,则会弹出文件供下载。但是,当运行下面的代码时,它不起作用(但该代码可用于下载直接文件链接) 如何发布参数并从报表服务器下载文件?非常感谢这方面的帮助。以下是我正在使用的代码: myURL = "http://example.com/reportviewer.aspx?id=1&date=1/3/12&format=PDF" Dim WinHttpReq A

我有这个脚本文件。我正在尝试使用XMLHTTP从reporting services下载。如果登录后将url粘贴到浏览器中,则会弹出文件供下载。但是,当运行下面的代码时,它不起作用(但该代码可用于下载直接文件链接)

如何发布参数并从报表服务器下载文件?非常感谢这方面的帮助。以下是我正在使用的代码:

myURL = "http://example.com/reportviewer.aspx?id=1&date=1/3/12&format=PDF"

Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", myURL, False, "user", "pwd"
WinHttpReq.send

myURL = WinHttpReq.responseBody
If WinHttpReq.Status = 200 Then
    Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 1
    oStream.Write WinHttpReq.responseBody
    oStream.SaveToFile "C:\file.pdf", 2 
    oStream.Close
 End If

顺便说一下,返回的文件(file.pdf)如果我将其重命名为file.html并双击它,Internet explorer会自动弹出一个下载通知。我试图查看该文件的源,但它是一个带有唯一报表执行id的链接,因此它只适用于该报表。此外,其中的链接不是指向pdf文件,而是返回报表服务器。

URL必须100%正确。与浏览器不同的是,没有修复URL的代码

我的程序的目的是获取错误详细信息

使用xmlhttp尝试这种方法。编辑url的等。如果它似乎可行,请注释出If/end If以转储信息,即使看起来可行。这是vbscript,但vbscript在vb6中工作

 On Error Resume Next
 Set File = WScript.CreateObject("Microsoft.XMLHTTP")
 File.Open "GET", "http://www.microsoft.com/en-au/default.aspx", False
 'This is IE 8 headers
 File.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; BCD2000; BCD2000)"
 File.Send
 If err.number <> 0 then 
    line =""
    Line  = Line &  vbcrlf & "" 
    Line  = Line &  vbcrlf & "Error getting file" 
    Line  = Line &  vbcrlf & "==================" 
    Line  = Line &  vbcrlf & "" 
    Line  = Line &  vbcrlf & "Error " & err.number & "(0x" & hex(err.number) & ") " & err.description 
    Line  = Line &  vbcrlf & "Source " & err.source 
    Line  = Line &  vbcrlf & "" 
    Line  = Line &  vbcrlf & "HTTP Error " & File.Status & " " & File.StatusText
    Line  = Line &  vbcrlf &  File.getAllResponseHeaders
    wscript.echo Line
    Err.clear
    wscript.quit
 End If

On Error Goto 0

 Set BS = CreateObject("ADODB.Stream")
 BS.type = 1
 BS.open
 BS.Write File.ResponseBody
 BS.SaveToFile "c:\users\test.txt", 2

还要注意,在锁定发生之前,可以调用任何特定XMLHTTP对象的次数是有限制的。如果发生了这种情况,并且在调试代码时发生了这种情况,只需更改为其他XMLHTTP对象即可传递参数并下载报告,您可以使用该类的方法。Render method链接上有VB中的示例代码w运行报告并下载结果。您可能会发现这比您正在使用的XMLHTTP方法更灵活。

这将很难为您提供帮助,因为您没有提供复制问题条件所需的最低代码:您提供的URL不是真正的URL,而且它也显示在屏幕上(基于您的
WinHTTPReq.Open
)真正的URL可能受密码保护。提出了一个非常类似的问题,可能无法根据向用户提供数据的方式自动执行此操作。我不理解您的建议。因为,首先,真正的URL是一个内部网站,您无法从internet验证。其次,如上所述,我我正在尝试从报表服务器检索文件。从上面的示例可以看出,报表服务器需要参数。我只需要一些关于如何检索返回的文件的指导。例如,如何使用XMLHTTP对象下载报表查看器文件。我的建议是,除非我们能够尝试相同的操作,否则请在相同的操作上进行main,这会使问题的故障排除变得非常困难或不可能。特别是与前面的问题(在我的评论中链接)相关,如果“另存为”框是从javascript/等启动的(这不是通过WinAPI调用可以获取的普通Windows“另存为”对话框…)可能无法从VBA将其自动化。抱歉,但该答案与主题无关。您指向的链接不涉及reporting services。或者,从reporting services下载时不需要访问LAN或域/凭据等,因为这将涉及调用相同的对象等。唯一的区别是参数,显然我可以自己修改和插入参数。问题是关于“下载通知”以及如何具体地向您提供该通知,而不管您使用的对象是什么。如果这是通过javascript函数提供的(例如)你可能无法实现自动化。这就是我之前评论的要点:除非我们知道(你是对的,我们实际上不需要自己做)如何向您提供此服务,很难解决您遇到的特定问题。如何获取正确的URL是在浏览器中键入URL,导航,并且正确的URL通常位于地址栏中。另一种方法是使用链接等的属性来获取URL。此外,Microsoft.XMLHTTP映射到Microsoft.XMLHTTP.1.0。Msxml2.XMLHTTP映射到Msxml2.XMLHTTP.3.0。请稍后再试一个。谢谢,但我一直从reporting services获取相同的文件。最后一行是这样的。假设我这样做了BS.SaveToFile“c:\users\test.html”,2。它将保存一个html文件。当我双击此文件时,IE将打开一个下载通知,以PDF格式下载该文件(呈现格式)。我检查了代码,它只是指向报表服务器。没有直接链接。谢谢。这看起来很有趣,似乎是另一种方法。但是,我们目前正在使用vbscript。如果我用尽所有可能使用vbscript。那么,我们一定会使用VB或C尝试此方法#
C:\Users>reg query hkcr /f xmlhttp

HKEY_CLASSES_ROOT\Microsoft.XMLHTTP
HKEY_CLASSES_ROOT\Microsoft.XMLHTTP.1.0
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.3.0
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.4.0
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.5.0
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.6.0
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.3.0
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.4.0
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.5.0
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.6.0
End of search: 12 match(es) found.