Hi Sebastian
We have now managed to resolve the problem. It does not relate to an empty 'Description' field in the database against a third-party module as you suspected. Instead, it relates to DNN5 not deleting skins assigned to a portal when the portal itself was deleted - I think this issue is therefore merely a strange symptom of a much more fundamental problem with DNN (we originaly installed v5.1.1 clean so the error was present in that version).
The above bug results in legacy rows in dbo.Packages and dbo.SkinPackages with the former being much more important. The GetAboutTooltip error is thrown because the tooltip provides information on whether the extension (in this instance Skins and Containers) is installed at host or portal level. If at portal level, it attempts to retrieve the portal name. So, when it finds one of the legacy rows in dbo.Packages (which has a PortalID which no longer exists) it cannot retrieve the portal name and hence fails (taking the whole Host > Extensions page down) because there is no error handling implemented in the function.
We diagnosed and then fixed this in several stages. First, we removed the call to GetAboutTooltip in Extensions.ascx which allowed the page to render. Next, we reverse the first change and updated the GetAboutTooltip method itself in Extensions.ascx.vb to insert error handling and return any error in the extension tooltip (modified code provided below). This allowed us to identify that number of Skins and Containers were generating the error. Investigation at the database level then revealed that the extensions related to Portals that no longer existed.
By updating the Description field in the dbo.Packages table for the offending extensions with the PackageID we were able to view in the Host > Extensions page the exact database rows that were failing. Manually updating these rows with a valid PortalID did fix the problem as expected. However, dbo.SkinPackages still had legacy PortalIDs so rather than update those all manually as well (ensuring we matched the changes made in dbo.Packages) we simply undid our database changes and deleted the extensions through the Host Extensions page which deleted all the rows in both the aforementioned tables. As far as we can tell the tooltip problem is now completely resolved and the Host > Extensions page renders perfectly.
I would therefore recommend two things:
- DNN investigate the underlying problem with legacy Skin and Container rows being left in dbo.Packages when Portals are deleted through Host > Portals.
- DNN update the GetAboutTooltip module to include error handling as per the example below.
Protected Function GetAboutTooltip(ByRef dataItem As Object) As String
Dim returnValue As String = String.Empty
Try
If (Me.ModuleContext.PortalSettings.ActiveTab.IsSuperTab) Then
Dim portalID As Integer = Convert.ToInt32(DataBinder.Eval(dataItem, "PortalID"))
If (Not portalID = Null.NullInteger AndAlso Not portalID = Integer.MinValue) Then
Dim portal As PortalInfo = PortalCtrl.GetPortal(portalID)
returnValue = String.format( _
Localization.GetString("InstalledOnPortal.Tooltip", LocalResourceFile), _
portal.PortalName)
Else
returnValue = Localization.GetString("InstalledOnHost.Tooltip", LocalResourceFile)
End If
End If
Catch ex As exception
returnValue = "Cannot Retrieve Portal Name (Possible Reference to Deleted PortalID in dbo.Packages): " + ex.Message
End Try
Return returnValue
End Function
All the above information is provided in the spirit of sharing our experience in the hope that it may help others who see the same problem and also to improve the fantastic product that is DotNetNuke.
Regards,
roadie.