Maybe you can use the: invokeFactory(id=xx, type=xx) method. "Garito" <garito@sistes.net> wrote in message news:008001c40816$42b09cf0$6800a8c0@telemako...
Hi Max I understand what you explain but what about if I install a new product? Rewrite the factory? I think is not a good solution don't you think?
Thanks!!
----- Original Message ----- From: "Max M" <maxm@mxm.dk> To: "Garito" <garito@sistes.net> Cc: "Lista Oficial de Zope" <zope-dev@zope.org> Sent: Friday, March 12, 2004 10:34 AM Subject: Re: [Zope-dev] How to create a product with all_meta_types and the
Garito wrote:
Hi Chris!
Want I want exactly is to create a product's object by his name programmatically not by the construction form Is this posible?
You cannot know the name of the constructor function, unless you read the source.
The constructors added to Zope during the product initialisation can be both forms and actual function methods. There is no way of knowing which. And there can be more than two.
So you would need to write a factory function based on the info you can get from the source. Ie. in an external method. Something like::
def portal_factory(self, parent, portal_type, id='', title='',):
"Adds the content. A factory function."
# generate a general id if id == '': id = self.ZopeTime().strftime(portal_type + '_%Y%m%d_%H%M%S')
zope_factory = parent.manage_addProduct
# add the content if 'Document' == portal_type: zope_factory['Document'].manage_addDocumentAction(id)
elif 'Some Type' == portal_type: zope_factory['Some Type'].manage_addSomeTypeAction(id)
else: raise 'Error adding portal_type'
# get the newly added content obj = getattr(parent, id) # Add the title obj.title = title
return obj
--
hilsen/regards Max M, Denmark
http://www.mxm.dk/ IT's Mad Science
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )