/ / SOQL - Convierta la fecha en la configuración regional del propietario - sql-server, salesforce, soql

SOQL - Convertir la fecha al local del propietario - sql-server, salesforce, soql

Utilizamos el DBAmp para integrar Salesforce.com con SQL Server (que básicamente agrega un servidor vinculado), y estamos ejecutando consultas sobre nuestros datos de SF mediante OPENQUERY.

Estoy tratando de hacer algunos informes contraoportunidades y desea devolver la fecha de creación de la oportunidad en la hora local de los propietarios de la oportunidad (es decir, la fecha en que el usuario verá en salesforce).

Nuestra configuración de dbamp obliga a las fechas a ser UTC.

Me tropecé con una función de fecha (en elDocumentación de Salesforce) que pensé podría ser de alguna ayuda, pero recibo un error cuando intento usarlo, así que no puedo probarlo, a continuación se muestra el ejemplo de uso de la función convertTimezone:

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

A continuación se muestra el error devuelto:

Proveedor OLE DB "DBAmp.DBAmp "para el servidor vinculado" SALESFORCE "devolvió el mensaje" Error 13005: Error al traducir la declaración SQL: línea 1:37: esperando "de", encontrado "(" ". Msg 7350, Nivel 16, Estado 2, Línea 1 No se puede obtener la información de la columna del proveedor OLE DB "DBAmp.DBAmp" para el servidor vinculado "SALESFORCE".

¿No puedes usar las funciones SOQL en OPENQUERY como se muestra abajo?

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

ACTUALIZAR:

Acabo de tener alguna correspondencia con Bill Emerson (creo que él es el creador de la herramienta de integración DBAmp):

Deberías poder usar las funciones SOQL, así que no estoy seguro de por qué estás consiguiendo el fallo de análisis. Voy a configurar un caso de prueba e informar de nuevo.

Voy a actualizar la publicación de nuevo cuando escuche. Gracias

Respuestas

1 para la respuesta № 1

Se acaba de lanzar una nueva versión de DBAmp (2.14.4) que soluciona el problema con el uso de ConvertTimezone en openquery.

  • Código modificado para una mejor utilización de la memoria.
  • Soporte añadido para API 24.0 (PRIMAVERA 12)
  • Solucionado el problema con signos de interrogación incrustados en literales de cadena
  • Se solucionó el problema con el uso de ConvertTimezone en openquery
  • Se solucionó el problema con "Invalid Numeric" al usar funciones agregadas en openquery

0 para la respuesta № 2

Estoy bastante seguro de que debido a que DBAmp usa SQL y no SOQL, las funciones SOQL no estarían disponibles, lo siento.

Necesitarías exponer estos datos de otra manera. Quizás sea posible con un Informe de salesforce, servicio web, o compilando los datos a través del programa que está utilizando para acceder al servidor SQL (DBAmp).

Si tuviera que crear un servicio web de Salesforce, lo siguiente ejemplo podría ser útil

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