Pregunta

Hey Salesforce expertos,

Tengo una pregunta en la consulta de la información de la cuenta de manera eficiente.Me gustaría consulta de cuentas sobre la base de las actualizaciones en un activityHistory objeto.El problema que voy es que todas las cuentas están siendo recuperados no importa si hay "completa" activeHistory o no.Así, hay una forma en la que puedo escribir esta consulta para recuperar sólo las cuentas con activeHistory que ha estado="completa" y Type_for_reporting='él / ella'?

List<Account> AccountsWithActivityHistories = [    
    SELECT
         Id
        ,Name
        ,( SELECT
                ActivityDate
               ,ActivityType
               ,Type_for_Reporting__c
               ,Description
               ,CreatedBy.Name
               ,Status
               ,WhatId
            FROM ActivityHistories
            WHERE Status ='complete'  and Type_for_Reporting__c = 'QRC'
        )
    FROM Account
];
¿Fue útil?

Solución

Usted tiene una cláusula where en la historia, pero todavía falta uno en el nivel de Cuenta.

Por ejemplo se devuelve sólo las Cuentas que tienen Contactos:

SELECT Id, Name
FROM Account
WHERE Id IN (SELECT AccountId FROM Contact) // try with NOT IN too

Con las Actividades es algo más complicado porque no les gusta para ser utilizado en DONDE en ese camino.

http://www.salesforce.com/us/developer/docs/officetoolkit/Content/sforce_api_calls_soql_select.htm

Los siguientes objetos no son compatibles actualmente en subconsultas:

  • ActivityHistory
  • Los archivos adjuntos
  • Evento
  • EventAttendee
  • Nota
  • OpenActivity
  • Etiquetas (AccountTag, ContactTag, y todos los demás de la etiqueta de objetos)
  • Tarea

Además de la letra pequeña en la parte inferior de ActivityHistory definición también es un poco desalentador.

Las siguientes restricciones sobre los usuarios que no tienen "Ver Todos los Datos" permiso ayudar a prevenir problemas de rendimiento:

  • En la cláusula principal de la relación de la consulta, usted sólo puede hacer referencia a un registro.Por ejemplo, usted no puede filtrar en todos los registros donde el cuenta nombre empieza con "A";en su lugar, debe hacer referencia a un único registro de cuenta.
  • Usted no puede utilizar las cláusulas where.
  • Debe especificar un límite de 499 o menos en el número de filas devueltas en la lista.
  • Se debe ordenar en ActivityDate en orden ascendente y LastModifiedDate en orden descendente;usted puede mostrar valores nulos última.Para ejemplo:ORDEN POR ActivityDate ASC NULOS ÚLTIMO, LastModifiedDate DESC.

Parece usted necesitará varias consultas.Ir para la Tarea (o Evento, en función de que el campo personalizado es visible), componen un conjunto de AccountIds y, a continuación, la consulta de las Cuentas?

O puede filtrar manualmente a través de la lista de la consulta original, copia de las cuentas auxiliares de la lista:

List<Account> finalResults = new List<Account>();
for(Account a : [SELECT...]){
    if(!a.ActivityHistories.isEmpty()){
        finalResults.add(a);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top