I’ve implemented two things that will enable a fair amount of progress.
The first is a lookup table implementation. Any name/value pairs can be stored and retrieved from the persistence engine (database, etc). This makes population combo boxes, list boxes etc very easy. The search is performed on the object and field. So for instance a type of car could be search by car & category and then all matching values will be returned. I have built this into the generation code so that all properties that have an attribute=”choice” will have their UI code load the choices. This is a possible candidate for caching.
The second system wide feature is field level security. This is a typical role based security system where each user is assigned one or more roles and each role is assigned permissions to each object, method and field. This is context driven so that that a customer.name has different permissions then a builder.name. I’ve built an AccessControlList table in the database and then each field can be queried by its distinguished name i.e. customer.name. This feature is still experimental but should allow a very manageable security infrastructure for CHT. This is another candidate for caching.