Oletame, et teil on loodud mingi Sharepointi solution, mis installib teatud featured Sharepointi saiti. Nüüd teil on ehitatud see feature nii, et aktiveerimisel ja deaktiveerimisel SPFeatureReceiver teeks mingeid lisategevusi nagu näiteks deaktiveerimisel, eemaldab kõik objektid, mis lisatud said. Niisugune toimimine võib osutuda väga vajalikuks arenduse/testimise ajal. Samas laivis niisugust toimimist ei sooviks.
Nüüd oletame ekstreemselt, et niisugune olukord tekib ja see feature jõuab laivi ja deaktiveerimisel tahab eemaldada objektid nagu listid, dokumendi loetelud jm.
See pole just standard olukord (Sharepoint ise vaikimisi ühtegi objekti, mis lisatakse ära ei eemalda ja seega saab alati deaktiveerida ja aktiveerida featureid ning täiendada olemasolevat funktsionaalsust solutioni abil), aga oletame, et just niisuguses olukorras me hetkel oleme. Lisaks soovime tegelikkuses uue solutioni versiooni installida, mis lisab ja täiendab olemasolevat funktsionaalsust Sharepointis.
Faktid olukorrast:
- Igasugune deaktiveerimine antud kujul eemaldaks kõik andmed Sharepointist
- Me ei saa uut versiooni panna, kuna vana on aktiveeritud kujul kasutuses saidi juures
Üks väga lihtne trikk antud olukorras (ja ma ütlen kohe, et ei soovita tavaliselt nii käituda).
Igakord, kui installitakse uus feature, paigutatakse antud feature definitsioon kataloogi "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES". Definitsioon ei paikne andmebaasis.
Igakord pärast IISRESET -i ja enne kasutamist laetakse antud feature definitsioon uuesti cache -i.
Sellest tulenevalt tekib võimalus muuta antud definitsiooni (näiteks kommenteerida välja FeatureReceiver klass ja assembly), seejärel IISRESET ning deaktiveerida feature. FeatureReceiver ei lähe käima, kuna definitsioon seda enam ette ei näe.
Sama käitumist kinnitab ka dokumentatsioon: http://msdn.microsoft.com/en-us/library/aa543273.aspx
Soovitus
See on hea trikk, mida hädaolukorras kasutada, samas ei tohiks standard käitumiseks saada!