我正在尝试以编程方式检索Salesforce报告的结果。
此博客经常引用从网络端抓取结果,但该方法不受支持:http://sfdc-heretic.warped-minds.com/2006/04/10/progmatic-access-to-salesforcecom-reports/。
我可以通过REST api获取报告列表:
require 'restforce'
restforce_client = Restforce.new(
:refresh_token => <refresh token>,
:client_id => <client id>,
:client_secret => <client secret>
)
reports = restforce.query("SELECT Id,DeveloperName FROM Report")
reports.last.DeveloperName
=> "Rob_Test_Report"
我也尝试通过Metadata SOAP API ReportFolder对象进行检索:
require 'metaforce'
metaforce = Metaforce.new(
:username => <username>,
:password => <password>,
:security_token => <security token>
)
report_folders = metaforce.list_metadata('ReportFolder')
report_folders.last.full_name
=> "RobTestReportFolder"
我可以看到该文件夹。我还没有检索到内容,但即使我这样做,我似乎只是获取报告本身的元数据(即过滤条件),而不是报告的结果。元数据api在这里讨论:https://success.salesforce.com/questiondetail?qId=a1X30000000IQ8pEAG。这是对的吗?
我在几年前看到过这个类似的问题,但不知道它是否正确或API中发生了什么变化: How to I access reports programmatically in SalesForce using Apex
是否可以通过受支持的Salesforce API导出或提取报告结果?
答案 0 :(得分:2)
如果不使用Analytics API,则无法检索报告的结果,而在2013年夏季版本中,它只能作为试用版提供。如果您想参加试用,请告诉我,我会提交您的请求。
进入Pilot后,您将使用传递报告ID的REST端点。您将拥有两个端点 - describereport端点和runreport端点。 describeReport返回的内容是报表元数据的JSON表示(描述维度和事实等),以及runReport的数据JSON表示。
获得数据后,您可以使用它。报告数据仅在摘要级别提供,并且仅支持试用摘要和矩阵报告。
答案 1 :(得分:1)
我不知道有任何编程方式。 Conga应用程序可以是一个选项,但我相信他们从报告的元数据中获取过滤器并构建匹配的SOQL查询......
你提到过的博文应该有效。您可能遗漏了在cookie中设置会话ID的内容。
Hack,容易出错,抓取网页的方法是使用与Apex相同的技巧:https://salesforce.stackexchange.com/questions/4303/scheduled-reports-as-attachment。理论上,只要您拥有用户的会话ID(无论是从登录会话传递还是从SOAP登录调用自己生成......),您都可以从任何其他API访问中获取类似的东西。
还要查看metadaddy对我的相关问题的回答:https://salesforce.stackexchange.com/questions/4692/screen-scrape-salesforce-with-rest-get-call-from-apex