PropertyTools

Current release:

Historic releases:

Bug reports:
maik (dot) jablonski (at) gmail (dot) com

PropertyTools - creating web-databases in a few minutes

PropertyTools are generic content objects to build prototypes for database-applications with the Zope-Management-Interface (ZMI) in just a few minutes.

PropertyTools is intended mainly for use in conjunction with AbracadabraObject. If you got the logic and power behind AbracadabraObject, you will love the PropertyTools.

The main idea behind AbracadabraObject is a simple mechanism to clone pre-configured objects through the Zope-Managemement-Interface (ZMI). With PropertyTools you have specialized objects for building comfortable database-applications with the ZMI in just a few minutes. To get the idea of how to use the PropertyTools & AbracadabraObject, there is a simple demo (FAQ-database) included into this package. Please copy demo.zexp to Zope/import and then import demo.zexp via the ZMI.

After installing you can add one or more PropertyTools-Objects (PropertyObject, PropertyFolder, PropertyFile) to your AbracadabraObject's "standard_object_folder". The main-view of a PropertyTools-Object is a configurable propertysheet, which you can edit & modify & sort to meet your needs. You can simply reorder your properties with the buttons on the right.

Additionally you have a "Manage-Tab". There you can set an "object_type" for your PropertyToolsObject. All PropertyToolsObjects with the same object_type can be considered as objects from the same "virtual" class and can be synchronized in their propertysheets. Additionally the object_type is used as id for a template which can be a DTML-Method or ZPT and is used to render your PropertyToolsObject or to identify different kinds of PropertyObjects in ZCatalogs (index object_type as fieldindex). Still more you can set a default_catalog and lock/unlock the propertysheet of your PropertTools-Object.

If you need a form-validation before Zope saves the property values to a PropertyTools-Object you can set up a ValidationManager, which is a PythonScript that is always called in manage_changeProperties and manage_editProperties. The ValidationManager is called after the "original" manage_*Properties-methods, so you can simply test the properties of the current context. You need to raise an exception if you want to break and rollback the current transaction in your PythonScript if the validation fails.

It is also possible to set a traversable path to a WorkflowManager which is simply a PythonScript which is called in the context of the current PropertyToolsObject and should return references to PythonScripts as workflow-actions.

You can save your changes or synchronize the properties and management-values of all PropertyTools-Objects of the same (meta- and) object_type in this folder and below.

Example for building contact-database:

  • Create a folder called contacts.
  • Create a "standard_object_folder" in contacts.
  • Enter the "standard_object_folder", add a PropertyTools-Object and edit the property-sheet. Add new properties "email", "homepage" and "phone" as string-types.
  • Go to the Manage-Tab: Set Object-Type = Contact, Unlock "Extensible Properties".
  • Enter your contacts folder.
  • Create a Catalog with id=Catalog.
  • Add some contacts with the AbracadabraObject.
  • With Z-Search-Interface create a search for your contacts and here you are...;-)
  • If you like, create a DTMLMethod with id=Contact which renders "email", "homepage" and "phone" for every PropertyContactObject so you can call them via url.

This should give you the main idea behind AbracadabraObject & PropertyTools.

Maybe it is hard to understand what I meant with the PropertyObject. But I promise you: If you ever wanted to create databases with the ZMI, AbracadabraObject und PropertyTools is what you need...

Please feel free to contact me: maik.jablonski@uni-bielefeld.de

 

CHANGES

CHANGES

2.1.0

- added validation-framework. Now each PropertyTool-Object can
be bound to a ValidationManager (a traversable PythonScript), which
can throw exceptions, if you don't like the values submitted by the
user.