SOQL - конвертировать дату в язык владельца - PullRequest
2 голосов
/ 13 февраля 2012

Мы используем DBAmp для интеграции Salesforce.com с SQL Server (который в основном добавляет связанный сервер) и выполняем запросы к нашим SF-данным с использованием OPENQUERY.

Я пытаюсь составить некоторые отчеты повозможностей и хотят вернуть созданную дату возможности в локальное время владельцев владельцев возможностей (т.е. дату, которую пользователь увидит в 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".

Вы не можете использовать функции SOQL в OPENQUERY, как показано ниже?

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

ОБНОВЛЕНИЕ:

Я только что переписывался с Биллом Эмерсоном (я полагаю, он является создателем инструмента интеграции DBAmp):

Вы должныбыть в состоянии использовать функции SOQL, поэтому я не уверен, почему вы получаете ошибку разбора.Я настрою тестовый случай и сообщу.

Я обновлю сообщение снова, когда получу ответ.Спасибо

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Только что была выпущена новая версия DBAmp (2.14.4), которая устраняет проблему с использованием ConvertTimezone в openquery.

Версия 2.14.4

  • Код изменен для лучшего использования памяти
  • Добавлена ​​поддержка API 24.0 (ВЕСНА 12)
  • Исправлена ​​проблема со встроенными знаками вопроса в строковых литералах
  • Исправлена ​​проблема с использованием ConvertTimezone в openquery
  • Исправлена ​​ошибка с «Invalid Numeric» при использовании агрегатных функций в openquery
0 голосов
/ 13 февраля 2012

Я вполне уверен, что поскольку DBAmp использует SQL, а не SOQL, функции SOQL будут недоступны, извините.

Вам нужно будет предоставить эти данные другим способом.Возможно, это возможно с помощью отчета Salesforce , веб-службы или компиляции данных с помощью программы, которую вы используете для доступа к (DBAmp) SQL Server.

Есливы должны были создать веб-сервис Salesforce, следующий пример может быть полезным.

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