由于项目需要特意研究了一下肿么使用PowerShell发布报表至Sharepoint 2013,网上能找到一些相关的资料,使用Powershell发布数据源跟共享数据集都是没有问题的,但是在发布报表这个环节上总是有坑,而且数据源、共享数据集的引用更新也不正确。
网上流行的版本主要在MSDN论坛及几个MVP的博客上,总的来说,这块的资料相对比较少,网上出现的几个版本看起来差不多。这些脚本的硬伤是,直接修改了原始报表文件,而且脚本只能保证第一次执行是正确的,第二次执行报表就彻底作废了。就目前看到的Sharepoint 2013版本来看,就是这么傻的MVP.一开始还是很崇拜找到的MVP的博文,因为文章排版相当专业,不明觉厉。
经过几天的折腾,对Powershell脚本发布报表到Sharepoint 2013的总结如下:
1.数据源需要使用ReportService2006.asmx来完成 可参考:
使用Powershell脚本发布报表至Sharepoint
2.发布共享数据集 报表 无需使用ReportService2006.asmx,这是个人查阅这几天的资料的最大感受。由于报表版本的不同,可能需要在06,10中做选择。虽然有参考指示我们可以使用ReportService2010.asmx来完成操作。但是调用起来错误总是莫名奇妙的,报的中文错误网上找不到前人的文章。换个法子即可完成共享数据集、报表的发布,不用关心asmx的版本啦。用记事本打开rds、rdl,可以看到数据源引用节点、共享数据集引用节点:
数据源节点:
<DataSourceReference>feowofoew</DataSourceReference>
共享数据集节点:
<SharedDataSetReference>ewefwfewfew</SharedDataSetReference>
我们要做的就是,把这两个节点更新一下,这就是简单的字符串替换工作啦。是不是问题由云端飘到地下了。
3.报表文件需要确保是utf-编码,这个在set-content追加上相应的参数即可。
4.直接操作原报表文件的做法真的是神坑,不注意查看这个细节的话,发布N次都是错误,浪费时间。正确的做法是,脚本执行时创建一个临时文件夹,把待操作的报表Copy进来,操作完之后,del掉。这样子原始报表不会受到破坏,脚本可以执行N次。
为了让后来的亲节省宝贵的上班时间干有意思的事情,正在将脚本完善放到Github上.欢迎亲,拍砖,一起完善。
https://github.com/Lancker/DeploySharepointReportPowershellScript
偶的MOSS QQ群:347766618
————————-
参考资料:
You could consider using the SOAP APIs to set the data sources on your reports. The SetItemDataSources API can be used to do this:
Here is an example of this being done in a PowerShell script. In your case, the URL to point to would be something like http://<SPSite>/_vti_bin/ReportServer/ReportService2010.asmx:
http://stackoverflow.com/questions/9178685/change-datasource-of-ssrs-report-with-powersh
C#版
Powershell脚本