I am a fairly new to Zope so I apologize for my naiveté. I have a need for the Data-Aware Folder product described below. I did not find any existing product that implements such functionality. I decided to run an idea past the Zope community to see if it makes sense and if anything like that has been already developed. I appreciate any feedback. Problem: If all our data is stored in ZODB then I can say, for example, http://localhost/Org/ENRON/Address/get and get a list of all addresses for ENRON (billing, shipping, etc). http://localhost/Org/ENRON/Contact/Smith/Address/get would give me an address of Smith from ENRON. Everything is pretty easy. We can manipulate our data via ZMI or build custom GUI to do it. We can use Zope's features like an access-control, cataloging, etc. Now let's say that some data is stored in DBMS or other place outside the ZODB. We know how to get it (e.g. ZSQL) but Zope mechanics would not work anymore. I would have to say http://localhost/Org/Address/get?org_id=ENRON or http://localhost/Org/Contact/Address/get?org_id=ENRON&contact_id=Smith since "ENRON" and "Smith" are now just the values in the database. Which is not bad except I loose many of Zope's nice features: acquisition for once. It would be nice to have a 'Data-Aware Folder' that gets its content from both Zope and an outside source and merges them together. This folder would call a 'getter' method to get a list of objects. Then it would see if it contains some 'RecordFolders' and merges objects data from the list with information from the RecordFolder. This way I would be able to create a RecordFolder "ENRON" put an ENRON logo there (or a permission folder, or anything else) and the data-aware folder will get additional ENRON information (if needed) from the DBMS and mix it with the information stored in Zope. For example, I need to display information about a company with it's addresses and a list of contacts from the database. I have a ZPT in http://localhost/Org to do that. For ENRON I would like to display the same information but arranged differently (with "WATCH OUT!" signs all over). It would be logical to create a Folder ENRON with a specific ZPT in it that handles the difference. So now http://localhost/Org/ENRON looks different from http://localhost/Org/ACME where both ENRON and ACME come from the database. The first step would be to correctly resolve paths like http://Org/ENRON/Contact/Smith/Address which may involve calling Org.get(org_id=ENRON).Contact(contact_id=Smith).Address or Org.Contact.Address(org_id=ENRON, contact_id=Smith) depending on situation. The next step would be merging records returned by the "getter" with the folder context so I can say http://Org/ENRON/Contact/Smith/picture and obtain either picture of Smith (stored in Zope in Contact/Smith) or a placeholder picture from Contact. So my question is: does a Data-Aware Folder idea make sense or I overlooked some Zopish way to address the described issues? Thanks, Igor
Igor Elbert writes:
... Problem: ... Now let's say that some data is stored in DBMS or other place outside the ZODB. We know how to get it (e.g. ZSQL) but Zope mechanics would not work anymore. I would have to say http://localhost/Org/Address/get?org_id=ENRON or http://localhost/Org/Contact/Address/get?org_id=ENRON&contact_id=Smith since "ENRON" and "Smith" are now just the values in the database. Which is not bad except I loose many of Zope's nice features: acquisition for once. Look at "Direct Traversal" (of ZSQL methods).
I think, you find something in the Zope Book. If not, look at the "Advanced" tab of ZSQL methods. Dieter
participants (2)
-
Dieter Maurer -
Igor Elbert