我们使用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功能,所以我不确定您的原因 解析失败。我将设置一个测试用例并报告回来。
当我收到回复时,我会再次更新帖子。感谢
答案 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 report,web-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;
}
}