2012-02-13 12 views
2

Salesforce.comとSQL Server(基本的にリンクサーバーを追加)を統合するためにDBAmpを使用し、OPENQUERYを使用してSFデータに対してクエリを実行しています。SOQL - 所有者のロケールに日付を変換

私は機会に対して何らかのレポートを作成しようとしており、機会所有者の現地日時(つまり、ユーザーがsalesforceに表示される日時)に機会の作成日を返したいとします。

dbamp設定では、日付はUTCに強制されます。

私はいくつかの助けになるかもしれないと思った日付関数(Salesforceのドキュメント)に遭遇しましたが、それを証明しようとするとエラーが発生します。以下はconvertTimezoneの使用例です機能:

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 HOUR_IN_DAY(convertTimezone(CreatedDate)), SUM(Amount) 
FROM Opportunity 
GROUP BY HOUR_IN_DAY(convertTimezone(CreatedDate)) 

は、エラーが返されているのですか?

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

UPDATE:私はちょうどビル・エマーソン(私は彼がDBAmp統合ツールの作成者であると信じて)といくつかの対応持っていた

をあなたが使用することができるはずSOQLなぜなら、なぜあなたは の解析に失敗したのかわかりません。私はテストケースをセットアップして報告します。

返信時に再度投稿を更新します。ありがとう

+0

を集約関数を使用するときに「無効な数値」とOPENQUERY

  • 問題を修正してConvertTimezoneを使用して問題を修正しましたOPENQUERYコードを投稿できますか? – Diego

  • +0

    私は実行している完全なOPENQUERYコードを追加しました。 – domager

    答えて

    1

    DBAmp(2.14.4)の新バージョンは、ちょうどOPENQUERYでConvertTimezoneを使用して問題を修正がリリースされました。

    バージョン2.14.4

    • コードは、より優れたメモリ使用のためのAPI 24
    • 追加サポートを修正。文字列リテラルに埋め込ま疑問符0(SPRING 12)
    • 問題を修正しました
    • OPENQUERYに
    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; 
        } 
    } 
    
    +0

    応答のために@Matthewに感謝します。私はBillから聞いたことはありませんが、dbampのドキュメントを見ていて、SOQLを処理すると述べています:「追加の結合パフォーマンスが必要な場合は、DBAmpでOPENQUERY句を使用することを検討してください。 OPENQUERYを使用すると、salesforce.com SOQL文(SQL以外)をDBAmpに直接渡すことができます.SOLQL言語の詳細は、salesforce.comのWebサイトを参照してください。 – domager