Lorenzo De Sio wrote: [...]
I built all this about one year and a half ago, and never divulgated it ;-) because I thought it would be better to build something new related to XForms (but using XML, not JavaBeans). Though, if you are interested in this system and wish to use it and help me contribute something new to Cocoon, we could join our efforts.
[...]
ok, I haven't understood every line you wrote but I think I got the picture.
Though, if you are interested in this system and wish to use it and help me contribute something new to Cocoon, we could join our efforts.
ok please send me the files (DTD, XML) and how to use them because you are refering to
<w4b:...> I need to know what that is.
king regards Thorsten
Stefan, Thorsten,
I actually implemented something similar to what Stefan outlined in its first e-mail. It works mainly like this:
system-wide configuration files (one for each relevant DB table) exist in a central location, containing information about HTML widget rendering and JS validation of each field; here is an example:
<table name="tasks" primary-key="task_id" check-field="title"> <field name="task_id"/> <field name="title" caption="Titolo" write-style="width:200" validate="nonempty"/> <field name="priority" caption="Priorita'" validate="nonempty, integer" validate-min="0" validate-max="10"/> <field name="insertion_date" caption="Data di inserimento" validate="nonempty,date"/> <field name="expiration_date" caption="Data di scadenza" validate="date"/> <field name="description" caption="Descrizione" widget="textarea"/> <field name="project_id" caption="Progetto"> <select> <esql:connection> <esql:pool>w4b</esql:pool> <esql:execute-query> <esql:query>SELECT * FROM projects ORDER BY name</esql:query> <esql:results><esql:row-results><option><xsp:attribute name="value"><esql:get-int column="project_id"/></xsp:attribute><esql:get-string column="name"/></option> </esql:row-results></esql:results> </esql:execute-query> </esql:connection> </select> </field> </table>
these are XSP files, meaning that i.e. select boxes can be populated dynamically and even based on current user data (privileges, etc.);
you can design any number of forms which refer to these common configuration files: simply use in your XSLs a few custom tags such as:
<w4b:form name="modulo" onSuccess="{//@referer}"> <w4b:row mode="write" table="projects" pk-value="{project_id}"> <w4b:field src="project_id" value="{project_id}"/> <w4b:caption src="customer_id"/>:<w4b:field src="customer_id" value="{customer_id}"/> </w4b:row> </w4b:form> the form can refer any number of rows belonging to different tables (multiple w4b:row inside a w4b:form).
Such forms require a few transformations (a first XSL one which detects the tables involved, and adds <cinclude>'s to load the configuration XSP for each table; the actual CInclude trasnformation; two final XSLs which build all the HTML rendering and JS validation. Current renderings include text boxes, selects (with automatic DB-bound option selection), textareas, etc.
The result is a HTML form where every field is named with a table-pk_value-fieldname combination.
All this, after user modification, can be POSTed to a general-purpose form processing action, which loads the required configurations from the same files as above (PK names, etc.), writes everything to the DB, and redirects to the desired URL (onSuccess above). To achieve more flexibility, nothing prevents from POSTing to custom actions, one for each form, or to XSPs. The only thing to keep is the form fields naming convention.
I built all this about one year and a half ago, and never divulgated it ;-) because I thought it would be better to build something new related to XForms (but using XML, not JavaBeans). Though, if you are interested in this system and wish to use it and help me contribute something new to Cocoon, we could join our efforts.
With my best regards,
L.
-----Messaggio originale----- Da: Scherler, Thorsten [mailto:[EMAIL PROTECTED] Inviato: venerdì 21 marzo 2003 13.50 A: [EMAIL PROTECTED]; Stefan Klein Oggetto: AW: database forms
hi Stephan,
by the way are you in Spain right now?
see my answer below:
-----Ursprüngliche Nachricht----- Von: Stefan Klein [mailto:[EMAIL PROTECTED] Gesendet: Freitag, 21. März 2003 10:48 An: [EMAIL PROTECTED] Betreff: Re: database forms
Hi Thorsten,
thanks for your reply. I've been pondering about your mail for a little while now. The xsl looks like a clever idea. A few things remain unclear to me:
What way do you use to get the data out of the DB. SQL-Transformer?
-> No, because I need more logic (e.g. date format ...) [#1]! I use esql and xsp! a)cocoon.xconf.snippet <jdbc name="D200301Insta"> <pool-controller min="5" max="10"/> <dburl>jdbc:odbc:MyDB</dburl> <user/> <password/> </jdbc>
b) sitemap.snippet <map:match pattern="report-info-*.xml"> <map:generate type="serverpages" src="global/reports/xsp/info.xsp"> <map:parameter name="pool" value="{1}"/> </map:generate> <map:serialize type="xml"/> </map:match>
c) xsp.snippet compare [#1] <xsp:logic>...</xsp:logic> <esql:connection> <esql:pool><xsp:expr>GETpool</xsp:expr></esql:pool> <esql:execute-query> <esql:query> select * from IDM_info_xml Where info1_date = #<xsp:expr>timeOfDay</xsp:expr># </esql:query> ...
d) I call it like that: http://localhost:8080/myapp/report-info-D200301Insta.xml?date=13.03.2003
What do you refer to by static and variable data?Like I stated I am working with call agent db. For me the adress and the
contact person are static because they have always the same format. I have
to write a <xsl:template match="..."/> for each of this field. e.g. <address>
<bname1>Weidmüller GmbH & Co.</bname1> <bname2 /> <bname3 /> <street>P.O. Box 2807</street> <ZIP>33058</ZIP> <City>Paderborn</City> <country /> <telephone_number>05252-960-350</telephone_number> </address>
will be always formated like this and should be on a certain place within my
html-form!
Where the campaign is dynamic! I have results of the questions which are formated like that: <Aa>yes</Aa> <Ab>bigger then ...</Ab> There I have to add the question (different table). the table qusetion might look like this <Aa>Did you receive our mailing?<Aa>. But there can be 1 to n answers and questions.
static=the definition of the form (as in your XML example), variable=theNo like I stated before! That was a different example that I fixed at home!
data from the DB?
How do you get the data back into the database? using actions, I suppose?
I am still not really certain about that! I still in development of the html Form. I tried with SQL-Transformer and esql and both were working fine. But I think I will have a look at actions as well. But still I first have to really decide about the data model for the db-server.
In your example you've only got textboxes. With listboxes (<select> inHTML)
it gets a bit trickier, since you'll have to get the possible values from a
different table first. Have you got an idea for that, too?
Maybing using XSP-ESQL?
nested esql like that: <esql:connection> <esql:pool> <xsp:expr>GETpool</xsp:expr> </esql:pool> <esql:execute-query> <esql:query> select * from IDM_info_xml Where info1_date = #<xsp:expr>timeOfDay</xsp:expr># </esql:query> <esql:results> <esql:row-results> <xsp:logic>int xid =<esql:get-int column="info_1empf"/>;</xsp:logic> <client> <xsp:attribute name="id"> <esql:get-string column="Cust_No"/> </xsp:attribute> <address> <bname1> <esql:get-string column="business_name"/> </bname1> <bname2> <esql:get-string column="business_name_2"/> </bname2> <bname3> <esql:get-string column="business_name_3"/> </bname3> <street> <esql:get-string column="address"/> </street> <ZIP> <esql:get-string column="zip_code"/> </ZIP> <City> <esql:get-string column="city"/> </City> <country> <esql:get-string column="country"/> </country> <telephone_number> <esql:get-string column="telephone_number"/> </telephone_number> </address> <aps> <esql:execute-query> <esql:query> select * from ap_tab where ap_id =<xsp:expr>xid</xsp:expr> </esql:query> <esql:results> <esql:row-results> <ap> <salutation> <esql:get-string column="salutation"/> </salutation> <titel> <esql:get-string column="titel"/> </titel> <forename> <esql:get-string column="forename"/> </forename> <department> <esql:get-string column="department"/> </department> <surname> <esql:get-string column="surname"/> </surname> <textension> <esql:get-string column="direct_dial_"/> </textension> </ap> </esql:row-results> </esql:results> <esql:no-results> <no-results/> </esql:no-results> <esql:error-results/> </esql:execute-query> </aps> </client> </esql:row-results> </esql:results> <esql:no-results/> <esql:error-results/> </esql:execute-query> </esql:connection>
What do you think?
King regards Thorsten
Reference: [1] http://wiki.cocoondev.org/Wiki.jsp?page=XSPTransformCustomDate
----- Original Message ----- From: "Scherler" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Thursday, March 20, 2003 5:58 PM Subject: Re: database forms
Hi Stefan,something
I have to master the same task. I am working in a telephone marketing department and writing the call agent DBs. I will introduce the 3 tier modell and will have to get rid of my formulars (VBA). We have some static fields (which are always the same -> address & contact person) and some variable (we have different campaigns where the questions to ask will always be different)
I thought about that: 1) select a db (pool) => campaign Example 2) get the static data with <xsl:template match="static"/> 3) get the variable data and put it in a different tag 4) use a transform to create a html form (including validation through JavaScript)
to 4) like that xslt: <xsl:template match="input/*"> <input> <xsl:attribute name="type"><xsl:value-of select="name()"/></xsl:attribute> <!-- --> <xsl:choose> <xsl:when test="normalize-space(text())!=''"> <xsl:attribute name="value"><xsl:value-of select="normalize-space(text())"/></xsl:attribute> </xsl:when> </xsl:choose> </input> </xsl:template>
with this xml: <form action="http://www.google.com/search" name="f"> <input> <hidden name="ie">UTF-8</hidden> <hidden name="oe">UTF-8</hidden> <hidden name="hl">eng</hidden> <text name="q" maxLength="256" size="55"/> <submit name="btnG">Google-Search</submit> </input> <script>document.f.q.focus();</script> </form>
...
King regards Thorsten
Stefan Klein wrote:
Hi all,
I am looking for the quickest way to write database forms. It is
reallythat I will be doing thousands of times, so the goal is to find some
theefficient way.
Ideally it would look something like: <table>table name</table> - selects the table
<inputbox ref="field" /> - a simple input field bound to a field in
user,table
<listbox ref="field" values="table.field" entries="table.field"/> - a
listbox bound to a field, entries defines the options visible to the
tablevalues defines what is internally stored in the field. obviously the
valueswould be the same (useful for foreign key entries)
<checkbox ...
The form would be populated automatically with the database values (the
current record being selected by a request parameter) and update the
wouldon submit.
What I've been pondering about for quite a while now is what would be the best way to implement this in cocoon.
I looked into the "departments and employees"-tutorial delivered with
cocoon2, which is quite close to what I'd like, but still not it. For
example I don't like having to define listboxes and populate the form by
using separate esql-statements. What data to fill into the form should
already be specified in the form definition.
My first idea was to start from there and implement a logicsheet that
beallow me to define tags like the ones above.
Then I looked into xmlforms and liked them a lot. However:
1. I am still looking for a tag reference. Maybe someone can help out.
2. I am still not entirely sure how they might help me. Surely it would
waypossible to write a JavaBean that accesses the database, but doing that
every time again is not the simplification I am looking for. Is there a
toto reference database fields directly from the forms?
Basically, I would be very grateful for any kind of hint you can offer on
how to use xmlforms for this or on other ways of accomplishing the task
(maybe there would even be ways to take the database description and
generate a form from it?). I am quite stuck for ideas, but it seems a
standard job so I am sure many people have already found sufficient ways
do it.
Thanks in advance Stefan
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]