Proposal
Add a service contract AcsObject.Url accepting an object_id and returning the url to display that object.Write a redirecting page (i.e. at /www/o/index.vuh) that accepts an object_id, tries to get the url by invoking the appropriate service contract implementation for that object-type and redirects to the found url or displays a page to inform the user that the url could not be resolved for that object_id.
Reason
Services like categories or search need to display lists of objects without knowing anything about the package that's responsible for them. The user then certainly wants to see some of the found objects so he needs to be directed to a url that can display that object. Since these services do not know anything about other packages we need a central way to resolve the url. Please note that we should not resolve all urls at the display time of objects-lists since that would be quite time-consuming, but defer this task to when we actually need the url because the user really wants to see an object - therefore the need for a redirecting page. Another benefit would be to have a stable url for objects that'll always work - regardless if the name, the site-node or the package of the object has changed.Solution
Need to write a service contract AcsObject.Url and need to implement this contract in every package that stores displayable objects. Need to write the redirecting page. Also, need to implement this contract to return urls for some core object-types such as groups, users, packages.Will do the core changes and implementations for the packages news, forums, blogger, file-storage, categories and mailing-lists and someone else should do the changes for the other packages.
Request notifications