Salesforce - Consulta SOQL
↩ Parte de la integración Salesforce.
Descripción
Sección titulada «Descripción»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.
Configuración
Sección titulada «Configuración»| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
credentials_id | credentials | Sí | Credencial de Salesforce |
soql | textarea | Sí | 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.
Credenciales
Sección titulada «Credenciales»Este módulo necesita una credencial de Salesforce:
| Campo | Descripción |
|---|---|
login_url | https://login.salesforce.com o https://test.salesforce.com para una sandbox |
client_id / client_secret | Consumer Key y Secret de la Connected App |
username | Usuario de Salesforce |
password | Contraseñ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—falsecuando Salesforce partió el resultado en varias páginas.
Una consulta que no encuentra nada devuelve [] y count: 0, no un error.
Ejemplo de uso
Sección titulada «Ejemplo de uso»Encontrar un contacto por email
Sección titulada «Encontrar un contacto por email»SELECT Id, FirstName, LastName, AccountId FROM Contact WHERE Email = '{{data.email}}' LIMIT 1Oportunidades que cierran este mes
Sección titulada «Oportunidades que cierran este mes»SELECT Id, Name, Amount, StageName, CloseDateFROM OpportunityWHERE CloseDate = THIS_MONTH AND StageName != 'Closed Lost'ORDER BY Amount DESCLIMIT 200Cuentas con sus contactos (padre-hijo)
Sección titulada «Cuentas con sus contactos (padre-hijo)»SELECT Id, Name, (SELECT Id, Email FROM Contacts) FROM Account WHERE Industry = 'Manufacturing' LIMIT 50Conteo con una agregación
Sección titulada «Conteo con una agregación»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: falsejunto con unnextRecordsUrl; este nodo no lo sigue. Acotá la consulta conWHEREyLIMIT, 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
attributescon 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 filasAggregateResult, donde las columnas sin alias se llamanexpr0,expr1… Poneles alias, como en el último ejemplo. - Los literales de fecha como
TODAY,THIS_MONTHoLAST_N_DAYS:7van sin comillas. - Una consulta mal formada devuelve
400 MALFORMED_QUERYindicando la posición del problema. Ese error no se reintenta.
Nodos relacionados
Sección titulada «Nodos relacionados»- Salesforce: Leer registro — más simple cuando ya tenés el id.
- Salesforce: Actualizar registro — actualizá cada registro mientras recorrés el resultado.
- Salesforce: Crear registro — creá el registro cuando la consulta no devuelve nada.