2012-01-26 10 views
5

Di solito, quando viene eseguito un trigger, controlliamo quale tipo di profilo ha l'utente, e se è il tipo in cui non vogliamo che i trigger siano in esecuzione, allora usciamo dal trigger prima di eseguire qualsiasi altro codice.Come è possibile interrompere un trigger gestito dall'esecuzione durante l'esecuzione di una classe di test?

Problema: abbiamo installato un pacchetto SF acquistato da un'altra azienda e tutto il suo codice è invisibile e non è modificabile. Come possiamo interrompere alcuni di questi trigger dall'esecuzione oltre che disabilitarli manualmente tramite l'interfaccia utente? Voglio disabilitarli temporaneamente durante l'esecuzione di una classe di test.

Stavo pensando di fare qualcosa del genere, ma ho ricevuto un errore che diceva "DML non consentito su ApexTrigger".

ApexTrigger at = [select id from ApexTrigger where name='SomeTriggerName']; 
at.status = 'Inactive'; 
update at; 
+2

Hai una buona ragione per voler disattivarlo? So che la copertura dei test è un problema, ma dovrebbe provare uno scenario reale: se il trigger verrà eseguito nel mondo reale, assicurati che il tuo codice funzioni con esso! –

+0

Il motivo per cui ho bisogno di disabilitarlo è perché la classe di test controlla molti scenari e i trigger pacchettizzati eseguono più istruzioni SOQL, l'esecuzione delle quali non posso controllare. Prima che possa raggiungere la copertura del test fino al 100%, il conteggio delle query SOQL raggiunge il limite del governatore di 100 nello spazio dei nomi pacchettizzato. –

risposta

4

Ho provato a fare qualcosa di simile e sono rimasto bloccato. Non credo che ci sia un modo per fare ciò che stai chiedendo senza che il proprietario del pacchetto gestito aggiorni il codice Apex.

L'approccio che hai elencato prima del problema è un'ottima soluzione; Vorrei raccomandare di usare Custom Settings in aggiunta, però. Si consiglia al proprietario/sviluppatore di Trigger di implementare un controllo delle impostazioni personalizzate prima di eseguire i trigger. Questa è la soluzione migliore che potrei inventare per alcuni dei miei Trigger.

Sarebbe bello se l'oggetto ApexTrigger potesse essere aggiornato, ma Salesforce non lo consente.

1

Credo che le vostre uniche opzioni siano disinstallare o annullare la distribuzione del pacchetto gestito.

Problemi correlati