Domanda

Ehi Salesforce esperti,

Ho una domanda su query informazioni di account in modo efficiente.Vorrei query conti in base agli aggiornamenti in un activityHistory oggetto.Il problema che sto ottenendo è che tutti i conti sono recuperati, non importa se c'è "completo" activeHistory o non.Così, c'È un modo posso scrivere questa query per recuperare solo i conti con activeHistory che ha status="complete" e Type_for_reporting='QRC'?

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
];
È stato utile?

Soluzione

Hai una clausola WHERE sulle storie ma manca ancora uno a livello di Account.

Per esempio, questo sarebbe tornato solo Account Contatti:

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

Con Attività più complicata perché a loro non piace essere utilizzato in DOVE in quel modo.

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

I seguenti oggetti non sono attualmente supportati in subquery:

  • ActivityHistory
  • Allegati
  • Evento
  • EventAttendee
  • Nota
  • OpenActivity
  • Tag (AccountTag, ContactTag, e tutti gli altri oggetti tag)
  • Attività

Inoltre la stampa fine in fondo ActivityHistory la definizione è anche un po ' scoraggiante.

Le seguenti restrizioni per gli utenti che non hanno “Visualizza Tutti i Dati” autorizzazione aiutare a prevenire problemi di prestazioni:

  • La clausola principale della query di relazione, si può fare riferimento solo un record.Per esempio, non è possibile filtrare tutti i record in cui il account ha il nome che inizia per ‘A’;invece, si deve fare riferimento a un singolo record di account.
  • Non è possibile utilizzare la clausola WHERE.
  • È necessario specificare un limite di 499 o meno il numero di righe restituite nell'elenco.
  • È necessario ordinare ActivityDate in ordine crescente e LastModifiedDate in ordine decrescente;è possibile visualizzare i valori null ultimo.Per esempio:ORDINE ActivityDate ASC NULL ULTIMO, LastModifiedDate DESC.

Sembra che si avrà bisogno di più query.Andare per l'Attività (o di un Evento, a seconda, per cui il campo personalizzato è visibile), si compone di una serie di AccountIds e quindi interrogare i Conti?

O è possibile filtrare manualmente attraverso una lista di query originale, la copia dei conti agli helper elenco:

List<Account> finalResults = new List<Account>();
for(Account a : [SELECT...]){
    if(!a.ActivityHistories.isEmpty()){
        finalResults.add(a);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top