2012-01-26 12 views
5

Zwykle po uruchomieniu wyzwalacza sprawdzamy, jaki profil ma użytkownik, a jeśli jest to typ, w którym nie chcemy uruchamiać wyzwalaczy, zamykamy wyzwalacz przed uruchomieniem dowolnego innego kodu.Jak zatrzymać uruchamianie zarządzanego wyzwalacza podczas uruchamiania klasy testowej?

Problem: mamy zainstalowany pakiet SF zakupiony od innej firmy, a cały jego kod jest dla nas niewidoczny i nie można go edytować. Jak możemy powstrzymać niektóre z tych wyzwalaczy przed uruchomieniem innym niż ręczne wyłączenie ich za pomocą interfejsu użytkownika? Chcę tymczasowo wyłączyć je podczas uruchamiania klasy testowej.

Myślałem o zrobieniu czegoś takiego, ale otrzymałem komunikat o błędzie "DML nie jest dozwolony w ApexTrigger."

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

Czy masz dobry powód, aby chcieć go wyłączyć? Wiem, że zasięg testów to ból, ale powinien testować scenariusz w prawdziwym świecie - jeśli wyzwalacz będzie działał w świecie rzeczywistym, chcesz się upewnić, że twój kod działa z nim! –

+0

Powodem, dla którego muszę go wyłączyć, jest to, że klasa testowa sprawdza wiele scenariuszy, a pakowane wyzwalacze uruchamiają wiele instrukcji SOQL, których wykonanie nie mogę kontrolować. Zanim uzyskam test zasięgu do 100%, liczba zapytań SOQL osiągnie limit administratora wynoszący 100 w pakowanej przestrzeni nazw. –

Odpowiedz

4

Próbowałem zrobić coś podobnego i utknąłem. Nie wierzę, że istnieje sposób robienia tego, o co prosisz, bez konieczności aktualizowania przez właściciela pakietu zarządzanego kodu Apex.

Podejście wymienione przed problemem jest doskonałym rozwiązaniem; Polecam jednak dodatkowo użycie Custom Settings. Możesz polecić właścicielowi/programistce wyzwalacza, aby zaimplementował sprawdzanie ustawień niestandardowych przed uruchomieniem wyzwalaczy. To najlepsze rozwiązanie, jakie mogłem wymyślić w przypadku niektórych moich wyzwalaczy.

Byłoby wspaniale, gdyby obiekt ApexTrigger mógł zostać zaktualizowany, ale Salesforce na to nie zezwala.

1

Wydaje mi się, że jedyne dostępne opcje to odinstalowanie lub odinstalowanie zarządzanego pakietu.

Powiązane problemy