2

我们使用 DBAmp 将 Salesforce.com 与 SQL Server 集成(基本上添加了一个链接服务器),并使用 OPENQUERY 对我们的 SF 数据运行查询。

我正在尝试针对机会进行一些报告,并希望在机会所有者本地日期时间(即用户将在 salesforce 中看到的日期时间)返回机会的创建日期。

我们的 dbamp 配置强制日期为 UTC。

我偶然发现了一个日期函数(在 Salesforce 文档中),我认为它可能会有所帮助,但是当我尝试使用它时出现错误,因此无法证明它,下面是 convertTimezone 函数的示例用法:

SELECT HOUR_IN_DAY(convertTimezone(CreatedDate)), SUM(Amount)
FROM Opportunity
GROUP BY HOUR_IN_DAY(convertTimezone(CreatedDate))

以下是返回的错误:

链接服务器“SALESFORCE”的 OLE DB 提供程序“DBAmp.DBAmp”返回消息“错误 13005:翻译 SQL 语句时出错:第 1:37 行:期待“来自”,找到“(”)。
消息 7350,第 16 层,状态 2,第 1 行
无法从链接服务器“SALESFORCE”的 OLE DB 提供程序“DBAmp.DBAmp”获取列信息。

你能不能在下面的 OPENQUERY 中使用 SOQL 函数?

SELECT
    *
FROM
    OPENQUERY(SALESFORCE,'
        SELECT HOUR_IN_DAY(convertTimezone(CreatedDate)), SUM(Amount) 
        FROM Opportunity 
        GROUP BY HOUR_IN_DAY(convertTimezone(CreatedDate))')

更新:

我刚刚与 Bill Emerson 有过一些通信(我相信他是 DBAmp 集成工具的创建者):

您应该能够使用 SOQL 函数,所以我不确定您为什么会遇到解析失败。我将设置一个测试用例并报告回来。

当我收到回复时,我会再次更新帖子。谢谢

4

2 回答 2

1

刚刚发布了一个新版本的 DBAmp (2.14.4),它修复了在 openquery 中使用 ConvertTimezone 的问题。

版本 2.14.4

  • 修改代码以获得更好的内存利用率
  • 添加了对 API 24.0 (SPRING 12) 的支持
  • 修复了字符串文字中嵌入问号的问题
  • 修复了在 openquery 中使用 ConvertTimezone 的问题
  • 修复了在 openquery 中使用聚合函数时出现“无效数字”的问题
于 2012-02-20T16:22:56.123 回答
0

我很确定因为 DBAmp 使用 SQL 而不是 SOQL,所以 SOQL 函数将不可用,抱歉。

您需要以其他方式公开这些数据。也许可以使用Salesforce 报告网络服务或通过您用来访问 (DBAmp) SQL Server 的程序编译数据。

如果您要创建 Salesforce Web 服务,以下示例可能会有所帮助。

global class MyWebService 
{
    webservice static AggregateResult MyWebServiceMethod() 
    {
        AggregateResult ar = [
            SELECT 
                HOUR_IN_DAY(convertTimezone(CreatedDate)) Hour, 
                SUM(Amount) Amount 
            FROM Opportunity 
            GROUP BY HOUR_IN_DAY(convertTimezone(CreatedDate))];

        system.debug(ar);
        return ar;
    }
}
于 2012-02-13T16:28:16.703 回答