If you are using sandbox solution you might be aware of that
on SharePoint RTM version, site owners are able to delete site templates or
sandbox solutions from solution gallery
without deactivating them on load
balanced multiple tier environment through edit item as
we described before.
This issue supposed to be resolved in 2011 Dec. CU. After we
applied 2012 Feb. CU, this issue indeed has been resolved on any new created site collections. Even
though the delete option is still available in the ribbon, when site owners try
to delete site templates or sandbox solutions from solution gallery without
deactivating it, there will be an
error message.
However, this issue is still on the existing site
collections created previous the CU. We finally identified the root cause and the
way to fix it.
The root cause is the existing the sites created before Feb
CU are missing two event receivers on Site Collection “Solution Gallery” list.
The two missing event receivers are ItemUpdating and ItemDeleting. You could use the following powershell command
to list the event receivers on the Site Collection “Solution Gallery”
list for the site collection.
$sg = $web.lists[“Solution Gallery”]
$sg.eventReceivers | out-file c:\ev.txt
The result for
the site collection created after Feb CU has listed below. Please note the two highlighted
receivers in RED
that are missing on site collection created before the CU.
Id : c655b849-6f3f-4d95-a476-ef805a43f13c
Name :
SiteId : 59682d29-9241-468c-8d73-93b6e74c7a45
WebId : 8e1c6b34-9434-4c4d-9ca7-b057f0fd5983
HostId : 40187fd3-0178-46f7-b89e-233b7e83a739
HostType : List
ParentHostId : 00000000-0000-0000-0000-000000000000
ParentHostType : Site
Synchronization : Synchronous
Type : ItemAdding
SequenceNumber : 10000
Assembly : Microsoft.Office.Access.Server.Application, Version=14.0.0.0, Culture=neutral, PublicKeyT oken=71e9bce111e9429c
Class : Microsoft.Office.Access.Server.Template.SolutionGalleryEventReceiver
Data :
Filter :
Credential : 0
ContextItemId : 0
ContextItemUrl :
ContextType : 00000000-0000-0000-0000-000000000000
ContextEventType : 00000000-0000-0000-0000-000000000000
ContextId : 00000000-0000-0000-0000-000000000000
ContextObjectId : 00000000-0000-0000-0000-000000000000
ContextCollectionId : 00000000-0000-0000-0000-000000000000
UpgradedPersistedProperties :
Id : 6d505269-a988-46b5-aea1-62f15927714f
Name :
SiteId : 59682d29-9241-468c-8d73-93b6e74c7a45
WebId : 8e1c6b34-9434-4c4d-9ca7-b057f0fd5983
HostId : 40187fd3-0178-46f7-b89e-233b7e83a739
HostType : List
ParentHostId : 00000000-0000-0000-0000-000000000000
ParentHostType : Site
Synchronization : Synchronous
Type : ItemUpdating
SequenceNumber : 10000
Assembly : Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c
Class : Microsoft.SharePoint.SolutionGalleryEventReceiver
Data :
Filter :
Credential : 0
ContextItemId : 0
ContextItemUrl :
ContextType : 00000000-0000-0000-0000-000000000000
ContextEventType : 00000000-0000-0000-0000-000000000000
ContextId : 00000000-0000-0000-0000-000000000000
ContextObjectId : 00000000-0000-0000-0000-000000000000
ContextCollectionId : 00000000-0000-0000-0000-000000000000
UpgradedPersistedProperties :
Id : 099a4e0c-1e76-46ce-8c3c-549968535658
Name :
SiteId : 59682d29-9241-468c-8d73-93b6e74c7a45
WebId : 8e1c6b34-9434-4c4d-9ca7-b057f0fd5983
HostId : 40187fd3-0178-46f7-b89e-233b7e83a739
HostType : List
ParentHostId : 00000000-0000-0000-0000-000000000000
ParentHostType : Site
Synchronization : Synchronous
Type : ItemDeleting
SequenceNumber : 10000
Assembly : Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c
Class : Microsoft.SharePoint.SolutionGalleryEventReceiver
Data :
Filter :
Credential : 0
ContextItemId : 0
ContextItemUrl :
ContextType : 00000000-0000-0000-0000-000000000000
ContextEventType : 00000000-0000-0000-0000-000000000000
ContextId : 00000000-0000-0000-0000-000000000000
ContextObjectId : 00000000-0000-0000-0000-000000000000
ContextCollectionId : 00000000-0000-0000-0000-000000000000
UpgradedPersistedProperties :
Id : 7cd2ee61-7a30-4956-9f6c-3ea10c6c4be9
Name :
SiteId : 59682d29-9241-468c-8d73-93b6e74c7a45
WebId : 8e1c6b34-9434-4c4d-9ca7-b057f0fd5983
HostId : 40187fd3-0178-46f7-b89e-233b7e83a739
HostType : List
ParentHostId : 00000000-0000-0000-0000-000000000000
ParentHostType : Site
Synchronization : Synchronous
Type : ItemAdded
SequenceNumber : 10000
Assembly : Microsoft.Office.Access.Server.Application, Version=14.0.0.0, Culture=neutral, PublicKeyT
oken=71e9bce111e9429c
Class : Microsoft.Office.Access.Server.Template.SolutionGalleryEventReceiver
Data :
Filter :
Credential : 0
ContextItemId : 0
ContextItemUrl :
ContextType : 00000000-0000-0000-0000-000000000000
ContextEventType : 00000000-0000-0000-0000-000000000000
ContextId : 00000000-0000-0000-0000-000000000000
ContextObjectId : 00000000-0000-0000-0000-000000000000
ContextCollectionId : 00000000-0000-0000-0000-000000000000
UpgradedPersistedProperties :
Well,
you might have the idea to fix this issue on any site collections that are
having this issue. The solution is to add back the two missing event
receivers are ItemUpdating and ItemDeleting to on the Site Collection “Solution Gallery”
list. Here is the powershell command you could use.
$sg = $web.lists[“solution gallery”]
$sg.EventReceivers.Add("ItemDeleting",
"Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral,
PublicKeyToken=71e9bce111e9429c",
"Microsoft.SharePoint.SolutionGalleryEventReceiver")
$sg.EventReceivers.Add("ItemUpdating",
"Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral,
PublicKeyToken=71e9bce111e9429c",
"Microsoft.SharePoint.SolutionGalleryEventReceiver")
$web.update()
Now, site owners are NOT able to delete site templates or
sandbox solutions from solution gallery without deactivating them on load
balanced multiple tier environment through edit item!