Hi For what it is worth here are some code snippets from the monkeypatch that adds the basics to show what I have been doing. It is a bit messy and probably not the best way to do it, but this gives you the gist of what is going on. First off I have been monkeypatching the DefaultDublinCoreImpl and adding the following field and method. I also override the behaviour of manageAfterClone # UniqueId ----------------------------------------------------- security.declarePublic( 'UniqueId' ) def UniqueID( self ): '''Designing Futures element - UniqueID''' try: return self.unique_id except: return "" #------------------------------------------------------------------ import md5, base64, time, string def ETIMakeUniqueID(id): ''' Generate a unique id ''' oid=md5.new() oid.update(id) oid.update(str(time.time())) oid=oid.digest() oid=string.strip(base64.encodestring(oid)) return 'DF_OID_'+oid.replace('/','$') I need to extend the functionality of manage_afterClone so that if an object is cloned/copied it needs to have the UniqueID regenerated, otherwise we will end up with duplicate ID's (not a good thing) def manage_afterClone(self,obj): obj.unique_id = ETIMakeUniqueID(obj.title_or_id()) Overide the __init__ method in DefaultDublinCoreImpl to include self.unique_id = ETIMakeUniqueID(title) So that the unique id is initialised on object creation. The bind/rebind these methods to the base classes, so that all content types will exhibit this behaviour. DefaultDublinCoreImpl.UniqueID = UniqueID DefaultDublinCoreImpl.__init__ = __init__ Item.manage_afterClone = manage_afterClone Then I set up an Index and Metadata for UniqeID in the portal_catalog. Now any object can be found by UniquID. Irrespective of whats it's path is, by using the catalog. I find also that an awfull lot of the time the metadata is often sufficient without having to retrieve the object. Regards Tim On Fri, 2002-07-12 at 23:44, J C Lawrence wrote:
On 12 Jul 2002 14:43:23 +0800 Tim Hoffman <timhoffman@cams.wa.gov.au> wrote:
This is a feature I too wanted, and my solution was to to give every object a unique object ID (new metadata field) which get's updated if the object is cloned. This Object ID is then catalogued, and then content which needs links uses the object Id plus a retrieval method. This way doc's can move anywhere and no broken links.
Neat. Smart. Might be a good idea to throw the details and a sample code blob up on the Collector for others to follow.
-- J C Lawrence ---------(*) Satan, oscillate my metallic sonatas. claw@kanga.nu He lived as a devil, eh? http://www.kanga.nu/~claw/ Evil is a name of a foeman, as I live.