Ir al contenido

Salesforce - Consulta SOQL

↩ Parte de la integración Salesforce.

Ejecuta una consulta SOQL (GET /query?q=...) y devuelve el array records directamente en data.

Es el nodo más flexible de la familia: los filtros, el orden, las agregaciones y las relaciones padre-hijo viven todos dentro de la consulta. Usalo para encontrar registros cuando no tenés su id, para armar un informe o para alimentar un bucle.

CampoTipoObligatorioDescripción
credentials_idcredentialsSíCredencial de Salesforce
soqltextareaSíConsulta SOQL, ej. SELECT Id, Name FROM Account LIMIT 10

soql acepta variables dinámicas, así que podés inyectar {{data.email}} dentro de la cláusula WHERE. Este nodo no tiene parámetro sobject: el objeto sale de la cláusula FROM de la consulta.

Este módulo necesita una credencial de Salesforce:

CampoDescripción
login_urlhttps://login.salesforce.com o https://test.salesforce.com para una sandbox
client_id / client_secretConsumer Key y Secret de la Connected App
usernameUsuario de Salesforce
passwordContraseña más el security token, concatenados

data es el array de registros (el campo records de la respuesta de Salesforce), no el sobre:

[
{
"attributes": {
"type": "Account",
"url": "/services/data/v59.0/sobjects/Account/0015g00000AbCdEFGH"
},
"Id": "0015g00000AbCdEFGH",
"Name": "ACME S.A.",
"Industry": "Manufacturing"
},
{
"attributes": {
"type": "Account",
"url": "/services/data/v59.0/sobjects/Account/0015g00000IjKlMNOP"
},
"Id": "0015g00000IjKlMNOP",
"Name": "Globex",
"Industry": "Retail"
}
]

Los contadores viajan en _meta:

{ "moduleVersion": "1.0.0", "success": true, "count": 2, "totalSize": 2, "done": true, "totalMs": 340 }
  • count — registros devueltos en esta llamada.
  • totalSize — registros que coinciden con la consulta.
  • done — false cuando Salesforce partió el resultado en varias páginas.

Una consulta que no encuentra nada devuelve [] y count: 0, no un error.

SELECT Id, FirstName, LastName, AccountId FROM Contact WHERE Email = '{{data.email}}' LIMIT 1
SELECT Id, Name, Amount, StageName, CloseDate
FROM Opportunity
WHERE CloseDate = THIS_MONTH AND StageName != 'Closed Lost'
ORDER BY Amount DESC
LIMIT 200
SELECT Id, Name, (SELECT Id, Email FROM Contacts) FROM Account WHERE Industry = 'Manufacturing' LIMIT 50
SELECT COUNT(Id) total FROM Lead WHERE CreatedDate = LAST_N_DAYS:7
  • El nodo devuelve solo la primera página. Salesforce página los resultados largos (2.000 registros por defecto) y marca done: false junto con un nextRecordsUrl; este nodo no lo sigue. Acotá la consulta con WHERE y LIMIT, o llamá al endpoint de paginación con el nodo HTTP.
  • Los valores de texto de la consulta van entre comillas simples: WHERE Email = 'ana@acme.com'. Un valor que contenga una comilla rompe la consulta, así que sanitizalo antes de inyectarlo.
  • Cada registro trae un bloque attributes con su tipo y su URL. Usá un nodo de mapeo de datos para quitarlo antes de exportar.
  • Las consultas agregadas (COUNT, SUM, GROUP BY) devuelven filas AggregateResult, donde las columnas sin alias se llaman expr0, expr1… Poneles alias, como en el último ejemplo.
  • Los literales de fecha como TODAY, THIS_MONTH o LAST_N_DAYS:7 van sin comillas.
  • Una consulta mal formada devuelve 400 MALFORMED_QUERY indicando la posición del problema. Ese error no se reintenta.