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 Lorenzo De Sio wrote:

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=the
data from the DB?


No like I stated before! That was a different example that I fixed at home!



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> in


HTML)


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,

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


something


that I will be doing thousands of times, so the goal is to find some


really


efficient 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


the


table

<listbox ref="field" values="table.field" entries="table.field"/> - a
listbox bound to a field, entries defines the options visible to the


user,


values defines what is internally stored in the field. obviously the


table


would 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


values


on 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


would


allow 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


be


possible 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


way


to 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


to


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]



Reply via email to