如何使用 Apex 在 SalesForce 中以编程方式访问报告

Posted

技术标签:

【中文标题】如何使用 Apex 在 SalesForce 中以编程方式访问报告【英文标题】:How to I access reports programmatically in SalesForce using Apex 【发布时间】:2010-11-25 13:01:58 【问题描述】:

我正在尝试在 SalesForce 平台上编写一个应用程序,该应用程序可以从报告中提取联系人列表并将其发送到网络服务(比如向他们发送电子邮件或短信)

我似乎能找到的唯一方法是将报告结果添加到新创建的广告系列中,然后访问该广告系列。这似乎是一个漫长的过程。

我在网上阅读的每篇文章都说您无法通过 Apex 访问报告,但是这些文章中的大部分或所有文章都是在上个月发布 API 的第 20 版之前编写的,该版本引入了一个新的报告对象。我现在可以以编程方式访问有关报告的信息(例如上次运行的日期等),但我似乎仍然无法找到访问该报告中包含的结果数据的方法。

有谁知道有没有办法做到这一点?

【问题讨论】:

不知道...但是报告有多复杂?可能您可以轻松编写一个 SOQL 查询,该查询将生成相同的结果集,并且可以毫无问题地发送到任何地方。另一种选择是您可以从此报告创建仪表板,安排它运行(每天?)并将结果作为电子邮件发送到某个特殊邮箱... 不,它必须按需提供。我想我必须走这里列出的 CSV/XLS 导出路线sfdc-heretic.warped-minds.com/2006/04/10/… 【参考方案1】:

经过大量研究,我发现目前执行此操作的唯一方法确实是抓取 CSV 文档。我猜想康加等人正在使用这种方法。

我们已经这样做了一段时间了,它确实有效。唯一需要注意的是:

Salesforce 用户名/密码/ 安全令牌必须共享给 应用程序连接。如果密码 更改(默认情况下已更改 每 30 天左右)令牌也 更改,必须重新输入。

您必须知道帐户的主机,这可能很难 做对。例如,虽然大多数欧洲帐户会使用 emea.salesforce.com 访问 CSV,但我们的帐户使用 na7(北美 7),即使我们位于 爱尔兰。我目前正在将页面主机发送到应用程序并对其进行解析 计算要使用的正确子域,但我认为必须有一个 更好的方法。

Salesforce 确实需要通过提供 API 调用来解决这个问题,该调用允许即时导出自定义报告结果并允许我们使用 OAuth 连接到它。但当然,这不太可能发生。

【讨论】:

【参考方案2】:

在 SalesforceSpring 11 更新中,您似乎可以获得有关报告的更多信息: 正如Report 和ReportType 的API 中所述,您可以通过Apex 访问报表查询中使用的字段,读取字段“columns”,以及用于表示称为“filter”的过滤器。

遍历这些对象,应该允许您构建一个表示报表的相同查询的字符串。构建该字符串后,您可以使用 Database.query(..) 调用进行动态查询。

这似乎有点乱,但应该可以工作..(尚未测试!)

如标题所述,这仅适用于自定义报告!

【讨论】:

不像为每个用户存储完整的 Salesforce 凭据、在他们的帐户下登录、导出报告的 CSV 文件、解析该 CSV 并返回一列那样混乱。我试试看,谢谢! 经过调查,似乎无法从 APEX 中访问元数据 API,因此需要几乎相同的解决方案 - 一个连接的外部应用程序。 或通过他们自己的 API 使用来自 salesforce 的标注?【参考方案3】:

为了澄清那些会发现这一点的新手,当被问到问题时,您可以通过编程方式访问您的报告数据,但您必须使用一些 hacky、容易出错的方法。

这一切都已修复,您现在可以从 Winter '14 开始通过 API 访问您的报告。

此处的文档 - http://www.salesforce.com/us/developer/docs/api_analytics/index.htm

在那些自定义仪表板等上前往城镇。从 Salesforce Stack Exchange 发布的交叉 - https://salesforce.stackexchange.com/questions/337/can-report-data-be-accessed-programatically/

【讨论】:

【参考方案4】:

但 Conga (appextremes) 在其 QuickMerge 产品中执行此操作,其中用户指定报告 ID,页面上的 apex 脚本运行报告以提取邮件合并操作的结果。

【讨论】:

【参考方案5】:

v20.0 API 添加了有关报告的元数据,但无法实际运行报告并获取结果。如果这是标准报告,或者您已定义的报告,您可以为您的报告制定等效的 SOQL 查询并运行它,但如果它是最终用户定义的报告,则无法执行此操作。

【讨论】:

不幸的是,这将是最终用户定义的报告 =(

以上是关于如何使用 Apex 在 SalesForce 中以编程方式访问报告的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Salesforce 中重命名我的 Apex 类名称

Salesforce自主学习

使用Salesforce.com平台中的APEX在数字前使用零生成xls文件

Salesforce基础 - Apex常量

APEX 中的 Salesforce UserInfo 会话类型

salesforce零基础学习(七十四)apex:actionRegion以及apex:actionSupport浅谈