Today, got a bug on custom content type. “I can’t copy your content type, all the references are lost”
Well, i assume i don’t know how copy / paste works in plone. I first reproduce the bug without a pb:
Create two documents : a and b. set related document from b to a. means b has related document a. the field relatesTo is a ReferenceField. Make a copy of b, said c. Oh !!! c has no related document. The bug is reproduce: ReferenceField doesn t support copy . Now i know that, i m starting to read all i found about References in Archetypes, and find this in Referenceable.py:
####
## In the case of:
## - a copy:
## * we want to lose refs on the new object
## * we want to keep refs on the orig object
## - a cut/paste
## * we want to keep refs
## - a delete:
## * to lose refs
####
So this is not a bug but a feature ? Don’t be disapointed, Plone is build to be customized. CopySupport comes from zope, ok interesting code out there. I m finally try to MonkeyPath the methode manage_afterAdd and succedd in keep the reference:
## OFS Hooks
def manage_afterAdd(self, item, container):
"""
Get a UID
(Called when the object is created or moved.)
"""
print "Referenceable manage after add"
isCopy = getattr(item, '_v_is_cp', None)
if isCopy:
setattr(self, config.UUID_ATTR, None)
self._delReferenceAnnotations()
Every things ok ? Well no, in fact, i m trying to validate by retry the scenario above. c document has the related document to a. good, but i next delete c and that action delete the b relation with a (b doesn t have relation with a anymore). And Archetypes team writes ## * we want to lose refs on the new object ??? You call this a feature, i call that an error of referenceengine design !
Thank you Archeytpes !
If anyone know how to fix this i m ready to listen :)