P. ¿Cómo recuperar todos los campos en la consulta SOQL?
En Spring 21, Salesforce traerá una función a través de la cual podemos buscar todos los campos en SOQL Query.
Ahora tenemos CAMPOS (TODOS), CAMPOS (ESTÁNDAR) y CAMPOS (PERSONALIZADO) que podemos usar en la consulta SOQL.
- CAMPOS (TODOS) : recupera todos los campos de un objeto. Esto es similar a Seleccionar * de SQL.
- CAMPOS (ESTÁNDAR) : recupera todos los campos estándar de un objeto.
- CAMPOS (PERSONALIZADO) : recupera todos los campos personalizados de un objeto.
Así es como se verá la consulta:
List <Contact> allConatcts = [SELECCIONAR CAMPOS (TODOS) DEL LÍMITE DE CONTACTO 200];
En las subconsultas, se verá así:
Lista <Cuenta> allAccounts = [
SELECT Account.Name, (SELECT FIELDS (ALL) FROM Account.Contacts LIMIT 200)
De la cuenta
];
69. ¿Qué es una consulta acotada y no acotada?
Cuando la API no puede determinar el conjunto de campos por adelantado , considerará la consulta como Consulta ilimitada .
si la API puede determinar el conjunto de campos de antemano, entonces es Consulta limitada .
Por ejemplo, el número de campos personalizados para un objeto no está predeterminado, por lo que los CAMPOS (PERSONALIZADO) y los CAMPOS (TODOS) se consideran consultas ilimitadas.
P. ¿Qué es la herramienta Query Plan?
Query Plan en la consola del desarrollador puede ayudar a acelerar las consultas SOQL realizadas en grandes volúmenes de datos. Esta es una herramienta tan poderosa cuando se trata de un mal desempeño. El desarrollador puede utilizar esta herramienta para optimizar y acelerar las consultas SOQL.
P. ¿Cómo prevenir las inyecciones SOQL?
Hay una serie de técnicas que puede utilizar para evitar la inyección de SOQL:
Consultas estáticas con variables de enlace
String.escapeSingleQuotes ()
Tipo de fundición
Reemplazo de personajes
Lista blanca
P. ¿Cuáles son los tipos de declaraciones SOQL en SalesForce?
Hay 2 tipos de declaraciones SOQL:
- SOQL estático
- SOQL dinámico
P. ¿Qué es Static SOQL?
La instrucción SOQL estática se escribe entre corchetes de matriz [].
Estas declaraciones son similares a LINQ
Por ejemplo :
string searchfor = ‘Sfdcamplified’;
Contacto [] Contactos = [SELECCIONE xyz__c, Nombre, Apellido DESDE el Contacto DONDE Apellido =: buscar];
P. ¿Qué es SOQL dinámico?
Dynamic SOQL se refiere a la creación de una cadena SOQL en tiempo de ejecución con código Apex . Dynamic SOQL le permite crear aplicaciones más flexibles. Por ejemplo, puede crear una búsqueda basada en la entrada de un usuario final o actualizar registros con diferentes nombres de campo. Esta es la principal diferencia entre soql y soql dinámico.
SOQL dinámico:
– Se utiliza para hacer referencia a la colección de una cadena SOQL en tiempo de ejecución con el código apex.
– Dynamic SOQL le permite crear una aplicación más flexible.
– Para crear una consulta SOQL dinámica en tiempo de ejecución, utilice el método Database.Query (), de una de las siguientes formas.
– Devuelve un solo sObject cuando la consulta devuelve un solo registro.
– Por ejemplo: sObject s = Database.query (string_limit_1)
– Devuelve una lista de sObject cuando una consulta devuelve más de un registro.
Por ejemplo :
string myTestString = ‘TestName’;
List <sObject> sl = Database.query (SELECT Id, Name FROM myCustomObject__c WHERE Name =: myTestString);
Database.query (query_string) puede invocar SOQL dinámico; donde query_string es la consulta generada en tiempo de ejecución. En funcionamiento y procesamiento, funciona igual que los SOQL estáticos.
Ejemplo :
List <Contact> conList = Database.query (‘SELECT Id, Name
DE contacto
DONDE nombre = ‘James’ ‘);
P. ¿Cuál es la desventaja de Dynamic SOQL?
Una DESVENTAJA con DYNAMIC SOQL es que provoca una inyección de SOQL en la condición que se obtiene sobre la base de algún texto. Para evitarlo, debemos usar String.escapeSingleQuotes. No hay posibilidad de estos en Static SOQL.
P. ¿Cuáles son algunas de las consideraciones clave de Dynamic Query?
- Los errores en tiempo de compilación no se generan al guardar una consulta dinámica.
- Debe tener mucho cuidado para evitar errores en tiempo de ejecución .
- El SOQL dinámico también puede causar posibles amenazas a la seguridad a través de la inyección de SOQL . Un usuario malintencionado podría pasar intencionalmente algunos caracteres que pueden recuperar más resultados SOQL de los que pretendía. Si debe utilizar SOQL dinámico, utilice el método escapeSingleQuotes para desinfectar la entrada proporcionada por el usuario. Este método agrega el carácter de escape () a todas las comillas simples en una cadena que se pasa de un usuario. El método garantiza que todas las comillas simples se traten como cadenas adjuntas, en lugar de como comandos de la base de datos.
P. ¿Qué son los SOSL dinámicos?
Con Dynamic SOSL, el desarrollador puede crear una declaración SOSL en tiempo de ejecución, lo que permite crear aplicaciones más flexibles.
La instrucción SOSL dinámica devuelve una lista de listas de sObjects, donde cada lista contiene el resultado de la búsqueda para un tipo de sObject en particular. Los resultados se almacenarán en el mismo orden en que se especifican los sObjects en la consulta SOSL dinámica. La SOSL dinámica no se puede usar donde se puede usar una SOSL en línea, como en asignaciones regulares y bucles for.
Dynamic SOSL también tiene los mismos límites reguladores que las declaraciones de SOSL estáticas.
P: ¿Cuándo usamos database.query ()?
database.query le permite realizar una consulta SOQL dinámica en tiempo de ejecución. Puede crear una cadena y luego usarla como una cadena de consulta en tiempo de ejecución en la base de datos.
instrucción de consulta para realizar una llamada SOQL que se determina en tiempo de ejecución.
El método database.query debe usarse en instancias en las que desee realizar una consulta SOQL dinámica en tiempo de ejecución para su código.
P: ¿cuándo usamos database.getquerylocator ()?
database.getQueryLocator devuelve un localizador de consultas que ejecuta la lista de devolución de consultas SOQL seleccionada que se puede iterar en el ápice por lotes o se puede usar para mostrar conjuntos grandes en VF (lo que permite cosas como la paginación).
Métodos de QueryLocator
Los siguientes son métodos para QueryLocator. Todos son métodos de instancia.
getQuery ()
Devuelve la consulta utilizada para crear una instancia del objeto Database.QueryLocator. Esto es útil cuando se prueba el método de inicio.
iterador ()
Devuelve una nueva instancia de un iterador de localizador de consultas.
El localizador de consultas puede devolver hasta 50 millones de registros y debe utilizarse en los casos en los que desee recopilar un gran volumen de datos.
P. ¿Cuál es el uso de la cláusula order by en soql?
A. Utilice el ORDER BY opcional en una instrucción SELECT de una consulta SOQL para controlar el orden de los resultados de la consulta, como comenzar alfabéticamente con z.
Si los registros son nulos, puede utilizar ORDER BY para mostrar los registros vacíos en primer o último lugar.
Puede utilizar ORDER BY en una instrucción SELECT para controlar el orden de los resultados de la consulta. No hay garantía del orden de los resultados a menos que utilice una cláusula ORDER BY
en una consulta.
Sintaxis: [ORDER BY fieldOrderByList {ASC | DESC} [NULLS {FIRST | LAST}]]
P. ¿Qué es OFFSET en soql?
R. La compensación se utiliza para omitir las filas desde el inicio de la consulta.
consideraciones de compensación:
1. el límite máximo de compensación es de 2000 filas. solicitar un desplazamiento mayor que 2000 resultará en un error de rango válido de número fuera del lado.
2. offset no se puede utilizar en subconsultas en la cláusula where.
P. ¿Qué es LIMIT en soql?
La cláusula de límite se utiliza para restringir el número de filas que devolverá el soql. La declaración de límite debe ser la última declaración en la consulta soql
sintaxis: [seleccione ID, nombre, industria del límite de la cuenta 1]
Nota:
si desea usar el límite y la compensación juntos, tenemos que usar el límite seguido de la compensación
P. ¿Cuántos registros se pueden recuperar usando SOQL?
R. podemos recuperar hasta 50000 registros de SOQL en una sola transacción.
Si queremos obtener más de 50000 registros por SOQL, debería considerar el uso de Batch Apex para lograr sus objetivos.
No puede recuperar más de 50.000 registros de sus llamadas SOQL en un solo contexto. Sin embargo, con Batch Apex su lógica se procesará en trozos de entre 1 y 200 registros en un lote.
P. ¿Sintaxis para recuperar los registros de la papelera de reciclaje usando soql?
A. SELECT Id, isDeleted FROM <Oblectname> WHERE isDeleted = true All ROWS – Esto solo devolverá las filas eliminadas.
SELECT Id, isDeleted FROM <Oblectname> WHERE isArchived = true All ROWS – Esto solo devolverá las filas archivadas.
SELECT Id, isDeleted FROM <Oblectname> All ROWS: esto devolverá los registros eliminados, los registros archivados y los registros que no se eliminaron ni archivaron (conjunto de datos idéntico al devuelto por un SOQL que no usa TODAS LAS FILAS) también.
No puede utilizar TODAS LAS FILAS y FOR UPDATE juntas.
P. ¿Nombrar algunas funciones de fecha en soql?
A. Palabras clave DATE y TIME
HOY:
AYER:
ESTA SEMANA
LA PRÓXIMA SEMANA
LA SEMANA PASADA
lo mismo que para el mes y el año
LAST_N_WEEK: N
NEXT_N_WEEK: N
lo mismo que para el mes, los días, el año
Métodos FECHA y HORA:
calender_month ()
calender_quarter ()
calender_year ()
Día del mes()
Day_week ()
Día año()
Day_Only ()
P. ¿Qué es la cláusula FOR UPDATE en soql?
R. La cláusula For Update bloqueará los registros para que no se actualicen desde otras transacciones hasta que se complete la transacción actual.
sintaxis: [select id, name from account for update]
P. ¿Qué es la cláusula LIKE en soql?
A. La cláusula like se usa para comparar los valores de la cadena o se usa para buscar el valor de la cadena en los campos dados
‘%’ – cualquier número de caracteres
‘_’ – un carácter
sintaxis: [seleccione apellido, nombre, teléfono del contacto donde apellido LIKE ‘% s’]
P: ¿Cómo utilizar Datetime en Dynamic SOQL Query en Salesforce?
// formatea la fecha y hora para que esté lista para Dynamic Soql
String formatedDt = cutOffDateTime.format (‘aaaa-MM-dd’T’HH: mm: ss’Z ”);
String sql = ‘SELECT ID FROM Covid_Answer__c DONDE covid_Test_Result__r.Patient_Name__r.IsActive__c = false AND LastModifiedDate <‘ + formatedDt;
P. ¿Cómo se puede utilizar el campo de fecha y hora como criterio en la consulta SOQL?
Respuesta:
No podemos usar la fecha y hora como condición en la cláusula Where entre Cotizaciones individuales.
Puedes hacer algo como esto
DONDE Fecha de creación> 2005-10-08T00: 00: 00Z
O también puede usar Literales de fecha como
DONDE Fecha de creación> AYER
P. El registro de oportunidad tiene el campo de moneda denominado «Importe de oportunidad». Necesitamos obtener el Importe de la oportunidad en función de la moneda del usuario mencionada en su registro de usuario.
Para obtener la cantidad de oportunidad según la moneda del usuario, podemos usar las funciones Format () y convertCurrency () en SOQL.
Format () : esta función se puede usar en la instrucción de selección SOQL para formatear los campos de fecha, hora y moneda según la configuración regional del usuario.
convertCurrency () : esta función también se puede utilizar en la instrucción de selección SOQL para convertir los campos de moneda a la moneda del usuario.
El uso de las dos funciones anteriores aquí es la declaración SOQL:
SELECCIONAR Nombre, MonedaIsoCode, Monto, FORMATO (convertCurrency (monto)) ConvertedinUserCurrency
FROM Opportunity DONDE Nombre = ‘Generador de planta de tejido de textiles de Burlington’
P: Seleccione la identificación de la cuenta TODAS LAS FILAS. ¿Cuál es el resultado de la consulta?
Las declaraciones SOQL pueden usar las palabras clave ALL ROWS para consultar todos los registros de una organización, incluidos los registros eliminados y las actividades archivadas.
- System.assertEquals (3, [SELECT COUNT () FROM Contact WHERE AccountId = a.Id TODAS LAS FILAS]);
Puede usar TODAS LAS FILAS para consultar registros en la Papelera de reciclaje de su organización. No puede utilizar las palabras clave ALL ROWS con las palabras clave FOR UPDATE.
P. ¿Cuál es la diferencia entre dónde y tener?
- La cláusula WHERE filtra registros en una consulta SOQL que no tiene función agregada.
- La cláusula HAVING filtra los resultados después de que una función agregada agregue los datos.
P: ¿Cuál es la diferencia entre SOSL y SOQL?
SOQL (lenguaje de consulta de objetos de Salesforce) | SOSL (lenguaje de búsqueda de objetos de Salesforce) |
Solo se puede buscar un objeto a la vez | Se pueden buscar muchos objetos a la vez |
Puede consultar cualquier tipo de campo | Solo puede realizar consultas por correo electrónico, mensaje de texto o teléfono |
Se puede usar en clases y disparadores. | Se puede usar en clases, pero no desencadenantes. |
La operación DML se puede realizar en los resultados de la consulta | La operación DML no se puede realizar en los resultados de búsqueda |
Registros de devoluciones | Campos de devoluciones |
P. ¿Explique los diferentes operadores que se utilizan en SOQL?
Y | Utilice Y para devolver registros que cumplan dos condiciones. Esta consulta devuelve todos los registros que tienen el nombre Stella y el apellido Pavlova.
SELECCIONAR Nombre, Correo electrónico |
O | Utilice OR para devolver registros que cumplan una de dos condiciones. Esta consulta devuelve registros con el apellido James o el apellido Barr.
SELECCIONAR Nombre, Correo electrónico |
EN | Utilice IN para devolver registros que cumplan al menos una de tres o más condiciones. La cláusula IN se usa comúnmente para devolver los valores de una lista de selección o valores de LIST o SET. IN simplifica una consulta que de otro modo tendría muchas condiciones OR. Esta consulta devuelve todos los registros que tienen el apellido James, Barr, Nedaerk o Forbes.
SELECCIONE nombre, correo electrónico de contacto |
ASC | Devuelve los resultados en orden ascendente | SELECCIONE nombre, correo electrónico de contacto PEDIR POR Nombre ASC LÍMITE 5 |
DESC | Devuelve los resultados en orden descendente | SELECCIONE nombre, correo electrónico de contacto PEDIR POR CORREO ELECTRÓNICO DESC LÍMITE 5 |
NULOS
PRIMERO | ÚLTIMO |
Devuelve registros nulos al principio (NULLS FIRST) o al final (NULLS LAST) | SELECCIONE nombre, correo electrónico de contacto PEDIR POR Email NULOS ÚLTIMOS |
P. ¿Explicar la consulta de padre a hijo y de hijo a padre?
Consulta de hijo a padre
En una consulta de hijo a padre, consulta el objeto hijo y obtiene campos de un objeto padre mediante el uso de notación de puntos, como este:
Por ejemplo: SELECT Name, Account.Name FROM Contact
Consulta de padre a hijo
En una consulta de padre a hijo, usamos una subconsulta para obtener campos del objeto hijo. Una subconsulta es una instrucción SELECT entre paréntesis y anidada dentro de otra consulta.
Dentro de una subconsulta, en lugar del nombre del campo del objeto relacionado, usamos el nombre de la relación secundaria
La ventana Resultados de la consulta muestra los nombres de las cuentas y una colección de registros de contactos secundarios asociados con cada cuenta. Este tipo de colección probablemente le resulte familiar porque hablamos de mapas
P. ¿Escribir una consulta de muestra para objetos personalizados de hijo a padre?
Broker__r es el nombre de la relación personalizada.
SELECCIONE Dirección__c, Imagen__c, Agente__r.Nombre DE Propiedad__c
P. ¿Escribir una consulta de muestra para objetos personalizados de padre a hijo?
El nombre de la relación secundaria es Propiedades. Debido a que esta es una relación personalizada, cuando la usamos en una consulta, agregamos __r (Propiedades__r). Entonces nuestra subconsulta (entre paréntesis) es:
SELECCIONAR Nombre, (SELECCIONAR Dirección__c, Precio__c DE Propiedades__r) DE Broker__c
P. Solo queremos cuentas que tengan un contacto relacionado con el apellido Forbes. ¿Cómo funciona la consulta?
SELECCIONE Nombre, (SELECCIONE Nombre DE Contactos) DE Cuenta DONDE ID EN (SELECCIONE ID de Cuenta DE Contacto DONDE Apellido = ‘Forbes’)
-
- La consulta busca contactos con el apellido Forbes y devuelve el valor del campo AccountId de cada contacto. (La subconsulta de la cláusula WHERE hace eso).
- A continuación, busca el valor de ese AccountId en el campo Id de una cuenta y obtiene el nombre de esa cuenta. (La cláusula principal WHERE hace eso).
- Luego, la consulta examina los contactos relacionados con la cuenta y obtiene el nombre de cada contacto. (La subconsulta de la consulta principal hace eso).
- Finalmente, la consulta principal devuelve el nombre de cada cuenta que tiene un contacto relacionado con el apellido Forbes, y para cada una de esas cuentas, los nombres de todos los contactos relacionados.
P. ¿Qué es la variable de vinculación?
Una variable de vinculación es una variable de Apex que utiliza en una consulta SOQL. Utilice las variables de vinculación como marcadores de posición para los valores específicos que se proporcionarán más adelante.
Integer maxHomeValue = 200000;
Lista <Property__c> propiedad = [SELECT Name, Price__c FROM Property__c WHERE Price__c <: maxHomeValue];
consulta, la variable de vinculación está precedida por dos puntos (:).
El uso de vincular variables en la cláusula WHERE le permite establecer valores de variable en su código antes de que se ejecute la consulta. Las variables de enlace hacen que una consulta sea dinámica. Para personalizar una consulta para cada usuario, establezca los valores de las variables de enlace según la entrada del usuario.
P. ¿Qué son las funciones agregadas?
Función agregada | Descripción | Ejemplo |
CONTAR() | Devuelve el número de filas asociadas con el campo. | SELECCIONAR CONTADOR (Nombre)
FROM Broker__c |
COUNT_DISTINCT () | Devuelve el número de filas únicas que coinciden con los criterios de consulta. | SELECT COUNT_DISTINCT (Ciudad__c)
DESDE Propiedad__c |
MIN () | Devuelve el valor mínimo de un campo. | SELECT MIN (Days_On_Market__c)
DESDE Propiedad__c |
MAX () | Devuelve el valor máximo de un campo. | SELECCIONAR MAX (Camas__c)
DESDE Propiedad__c |
AVG () | Devuelve el valor medio de un campo numérico. | SELECT City__c, AVG (Days_On_Market__c)
DESDE Propiedad__c GRUPO POR Ciudad__c |
SUMA() | Devuelve el valor total de un campo numérico. | SELECCIONAR SUMA (Precio__c), Agente__r. Nombre
DESDE Propiedad__c GRUPO POR Broker__r.Name |
P. ¿Explique Agrupar por?
SELECCIONE MAX (Status__c), Broker__r.Name FROM Property__c GROUP BY Broker__r.Name
esta consulta agrupa las propiedades por intermediario. Para las propiedades de cada corredor, enumeramos el valor Status__c más avanzado. Ese es el valor de la lista de selección de estado más cercano al valor de la lista de selección final. Queremos corredores que hayan vendido propiedades, por lo que reduciremos aún más los resultados.
P. Explique ¿TENER?
SELECT MAX (Status__c), Broker__r.Name FROM Property__c GROUP BY Broker__r.Name HAVING MAX (Status__c) = ‘Cerrado’
El uso de la cláusula HAVING reduce los resultados a propiedades con el estado Cerrado
-
- La cláusula WHERE filtra registros en una consulta SOQL que no tiene función agregada.
- La cláusula HAVING filtra los resultados después de que una función agregada agregue los datos.
P. ¿Qué pasará si usa queryMore en una consulta que tiene una función agregada?
Las consultas que incluyen una función agregada no admiten queryMore. Se produce una excepción en tiempo de ejecución si utiliza una consulta que contiene una función agregada que devuelve más de 2000 filas en un bucle for.
P: ¿Qué sucederá si se escribe una consulta SOQL en el bucle for para acceder a la respuesta del candidato de metadatos personalizados?
Llegará al límite del gobernador. Existe un límite regulador que impone un número máximo de consultas SOQL.
Cuando las consultas se colocan dentro de un bucle for, se ejecuta una consulta en cada iteración y se alcanza fácilmente el límite del gobernador.
P. ¿SOQL para bucles frente a consultas SOQL estándar?
La consulta SOQL a veces devuelve tantos sObjects que se excede el límite de tamaño del montón y se produce un error. Para resolverlo, utilice una consulta SOQL para bucle en su lugar, ya que puede procesar varios lotes de registros mediante llamadas internas para consultar y consultar Más.
Los desarrolladores siempre deben usar un bucle for SOQL para procesar los resultados de las consultas que devuelven muchos registros, para evitar el límite en el tamaño del montón.
P. ¿Explique SOQL For Loop?
Los bucles de SOQL for pueden procesar registros de uno en uno utilizando una única variable sObject, o en lotes de 200 sObjects a la vez utilizando una lista de sObject:
- El formato único de sObject ejecuta el <code_block> del bucle for una vez por cada registro de sObject. En consecuencia, es fácil de entender y usar, pero es ineficiente si desea usar declaraciones de lenguaje de manipulación de datos (DML) dentro del cuerpo del bucle for. Cada instrucción DML termina procesando solo un sObject a la vez.
- El formato de lista de sObjects ejecuta el <code_block> del bucle for una vez por lista de 200 sObjects . Es un poco más difícil de entender y usar, pero es la opción óptima si necesita usar declaraciones DML dentro del cuerpo del bucle for. Cada instrucción DML puede procesar de forma masiva una lista de sObjects a la vez.
P. ¿Qué es la relación polimórfica?
Una relación polimórfica es una relación entre objetos donde un objeto referenciado puede ser de varios tipos diferentes. Por ejemplo, el campo de relación Quién de una tarea puede ser un contacto o un cliente potencial.
Método 1: filtrar los resultados mediante el calificador de tipo.
Ejemplo: eventos relacionados con una cuenta u oportunidad a través del campo Qué.
- Lista <Evento> eventos = [SELECCIONAR Descripción DESDE Evento DONDE Qué. Escriba IN (‘Cuenta’, ‘Oportunidad’)]
Enfoque 2: Utilice la cláusula TYPEOF en la instrucción SOQL SELECT.
Ejemplo: Consultar eventos relacionados con una cuenta u oportunidad a través del campo Qué.
- Lista <Evento> eventos = [SELECCIONAR TIPO DE Qué CUANDO Cuenta ENTONCES Teléfono CUANDO Oportunidad ENTONCES Cantidad FINALIZA DEL Evento];
Estas consultas devuelven una lista de sObjects donde el campo de relación hace referencia a los tipos de objeto deseados.
P. ¿Cómo hacer el resultado de la lista Typecasting Database.query en el mapa?
String soqlQuery = ‘Seleccionar ID, nombre de cuenta’;
Map <Id, Account> accountMap = new Map <Id, Account> (
(Lista <Cuenta>) Database.query (soqlQuery)
);
System.debug (‘AccountMap-‘ + accountMap);
Referencia
…
Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://www.sfdcamplified.com/2021/04/interview-questions-on-soql-in-salesforce.html#utm_source=rss&utm_medium=rss&utm_campaign=interview-questions-on-soql-in-salesforce