2012-01-26 16 views
5

Genellikle, bir tetikleyici çalıştığında, kullanıcının ne tür bir profili olduğunu kontrol ederiz ve tetikleyicilerin çalışmasını istemediğimiz bir türse, başka bir kodu çalıştırmadan önce tetikleyiciden çıkarız.Bir test sınıfı çalıştırırken yönetilen bir tetikleyicinin yürütülmesini nasıl durdurabilirim?

Sorun: Başka bir şirketten satın aldığımız bir SF paketimiz var ve bu kodun tamamı bizim için görünmez ve düzenlenebilir değil. Bu tetikleyicilerin bazılarının, kullanıcı arayüzü aracılığıyla manuel olarak devre dışı bırakılmasının dışında çalışmasını nasıl durdurabiliriz? Bir test dersi çalıştırırken bunları geçici olarak devre dışı bırakmak istiyorum.

Böyle bir şey yapmayı düşünüyordum, ancak "ApexTrigger'da DML'ye izin verilmiyor" şeklinde bir hata oluştu.

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

Devre dışı bırakmak istediğiniz için iyi bir nedeniniz var mı? Test kapsamının bir acı olduğunu biliyorum, ama gerçek bir dünya senaryosunu test etmeliyiz - eğer tetikleyici gerçek dünyada koşacaksa, kodunuzun onunla çalıştığından emin olmak istersiniz! –

+0

Bunu devre dışı bırakmam gerekmesinin nedeni, test sınıfının birçok senaryoyu denetlemesi ve paketlenmiş tetikleyicilerin, denetleyemediğim çoklu SOQL deyimlerini çalıştırmasıdır. Test kapsamını% 100'e kadar elde edebilmem için, SOQL sorgu sayısı paketlenmiş ad alanında 100 vali limitine ulaşır. –

cevap

4

Benzer bir şey yapmayı denedim ve sıkışıp kaldım. Yönetilen paketin sahibinin Apex Kodunu güncellemesine gerek kalmadan sorduğun şeyi yapmanın bir yolu olduğuna inanmıyorum.

Sorundan önce listelediğiniz yaklaşım, mükemmel bir çözümdür; Yine de, Custom Settings'u kullanmanızı tavsiye ederim. Tetikleyicileri çalıştırmadan önce Özel Ayarlar kontrolünü uygulamak için Tetikleyicinin sahibine/geliştiricisine tavsiyede bulunabilirsiniz. Bu benim kendi tetikleyicilerim için en iyi çözümdü.

ApexTrigger nesnesi güncelleştirilebiliyor olsaydı harika olurdu, ancak Salesforce buna izin vermiyor.

1

Tek seçeneğinizin yönetilen paketi kaldırmak veya kaldırmak olduğunu düşünüyorum.

İlgili konular