SOQL - 将日期转换为所有者区域设置

时间:2012-02-13 10:54:09

标签: sql-server salesforce soql

我们使用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))

以下是返回的错误:

OLE DB provider "DBAmp.DBAmp" for linked server "SALESFORCE" returned message "Error 13005 : Error translating SQL statement: line 1:37: expecting "from", found '('".
Msg 7350, Level 16, State 2, Line 1
Cannot get the column information from OLE DB provider "DBAmp.DBAmp" for linked server "SALESFORCE".

您是否可以在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功能,所以我不确定您的原因   解析失败。我将设置一个测试用例并报告回来。

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

2 个答案:

答案 0 :(得分:1)

新版本的DBAmp(2.14.4)刚刚发布,解决了在openquery中使用ConvertTimezone的问题。

  

版本2.14.4

     
      
  • 修改了代码以提高内存利用率
  •   
  • 添加了对API 24.0(SPRING 12)的支持
  •   
  • 修复了字符串文字中嵌入式问号的问题
  •   
  • 解决了在openquery中使用ConvertTimezone的问题
  •   
  • 修复了"无效数字"在openquery中使用聚合函数时
  •   

答案 1 :(得分:0)

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

您需要以其他方式公开此数据。也许可以使用Salesforce reportweb-service或通过您用来访问(DBAmp)SQL Server的程序编译数据。

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

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;
    }
}