100 likes | 214 Views
This document discusses the current limitations within DNN regarding core objects, page settings, and module management. Key issues include the lack of extensibility for core objects, the challenges of deleting module data, and insufficient notifications for extensions about changes in the system. The proposal outlines potential improvements for better communication with the core framework, allowing for access to core objects, extending the object model with custom objects, and implementing a standardized pattern for object types. Such enhancements aim to improve performance and flexibility for extension developers.
E N D
Improving DNN Metadata Sebastian Leupold
CurrentLimitations I • Core Objects are not extensible • Page Settings • HeaderImage (used in Skin) • Slogan (used in Skin) • Accent color (used in Skin) • TabModule • Productdisplayed in HTML instance (ID used in Solution) • Folder • Allowedfiletypesfor a custommodule
CurrentLimitations II • Cascadedeleteofmoduledata on moduledeleterequiresforeignkeyortrigger on coretable Modules • When a moduleisuninstalled, recordsmayremain in portalSettings,… • Modules usinganotherstoragethan DNN databasehavenooption • Extensionshavenochance, togetnotified on insert/update/deleteofpages, files, folders, users … • The coreframeworkhasfewinformationaboutthemodules, onlybyinterfaces • Interfaces require additional implementation
Whatother CMS do • Other CMS have a single „content“ type, thatgetsmorphed per usecase (bycontent type specificattributes, stored in dedicateddependanttablesorserialized) • mayrestricttheoptionsforextensiondevelopers • mayaffectperformance
Idea • Offerbettercommunicationwithcoreframework: • Access coreobjects • Extendobjectmodelwithcustomobjects • Use a commonpatternforobjecttypes • Offeractionbasedaccess on BCL level • Registration ofcustomobjecttypesduringinstallprocess
PropertyTypes ContentTypes PropertyTypeId PropertyDefinitions PropertyTypeName PropertyDefId ContentTypes [ContentTypeId] PropertyName User Module Tab (Page) TabModule Website Host UserRole RoleGroup EventType Forum ThreadPostBlogPostComment [ModuleDefId] PropertyTypeId ContentTypeId EventTypes EventDefinitions EventTypeId EventTypeName EventDefId [ContentTypeId] EventDefName [ModuleDefId] EventType ContentTypeId PermissionTypes PermissionDefinitions PermissionTypeId PermissionTypeName PermissionDefId [ContentTypeId] PermissionDefName [ModuleDefId] PermissionType [ModuleDefId] ContentTypeId
Event Registration ContentTypes User Module Tab (Page) TabModule Website Host UserRole RoleGroup EventType Forum ThreadPostBlogPostComment EventRegistrations EventDefinitions EventRegisterId ContentTypeId EventDefId EventDefinition EventDefName Before/after… EventType Method Call ContentTypeId [ModuleDefId]
ContentProperties Content PropertyId PropertyTypeId Tabs ObjectTypeId TabId TabName … ModuleId ModuleName … ModuleId ModuleName … TabId/ModuleId/… PropertyValue EventLog Modules EventId EventTypeId ObjectTypeId TabId/ModuleId/… LogData Forums Permissions PermissionId PermissionTypeId ObjectTypeId TabId/ModuleId/… User/Role PermissionValue
ContentProperties Contents PropertyId PropertyTypeId Tabs ContentId objectId = RegisterContent(type, localId) ContentId ContentTypeIdLocalId Auditing TabId TabNameContentId … ModuleId ModuleName ContentId … ModuleId ModuleName ContentId … PropertyValue EventLog ContentItem Modules EventId EventTypeId ContentId LogData Forums Permissions PermissionId PermissionTypeId Taxonomy ContentId User/Role PermissionValue
Profile Property Definitions PropertyTypeId PortalId (optional) ContentId ModuleId