Thanks - is there some documentation or hints on how
I go about doing these things  -
 
a. "using the _javascript_ debugger"
 
and
 
b. "setting breakpoints"
 
and
 
c.  inspecting variable values?
 
Thanks
Derek

>>> [EMAIL PROTECTED] 2005/10/20 06:52:36 AM >>>
Hello,

You should use the _javascript_ debugger you enable in the first lines of
cocoon.xconf.

Then you can set breakpoint in your main function and go step by step to
inspect variable values.

HTH

Derek Hohls a écrit :
> I am looking for help getting a simple DB app up-and-running
> using flowscript. I have based my approach on the PetStore example,
> but there is a *lot* of complexity in there I am trying to avoid.
> I have created two "stripped down" flowscript files, along with
> the required forms.
>
> The sitemap calls, and so on, are as per the PetStore example.
>
> I have also created an "indicators" database, with a simple table
> called "foo", with "fooid" "foodesc" and "webpage" as text fields.
>
> What I have is:
>
> dbtest.js
>
> //=================================
> cocoon.load("resource://org/apache/cocoon/components/flow/_javascript_/Database.js");
> cocoon.load("resource://org/apache/cocoon/forms/flow/_javascript_/Form.js");
> cocoon.load("context://projects/inddb/script/foo.js");
>
> //const
> var MAX_RESULTS = 5;
> var VIEW = "jexl";
> var EXT = ".jexl";
>
> //vars
> var indDatabase = null;
> var fooForm = null;
>
> //startup
> function main(funName) {
> var fun = this[funName];
> var args = new Array(arguments.length -1);
> for (var i = 1; i < arguments.length; i++) {
> args[i-1] = arguments[i];
> }
> getIndDB();
> fun.apply(args);
>
> }
>
> // Index page
> function index() {
> EXT = ".jexl";
> getIndDB();
> cocoon.sendPage("view/index" + EXT, {
> fooForm: fooForm
> });
> }
>
> //IndDB
> function getIndDB() {
> if (indDatabase == null) {
> this.indDatabase = new IndDB("hsql");
> this.fooForm = new FooForm();
> }
> return indDatabase;
> }
>
> //why here? gives errors if in foo.js ???
> function FooForm() {
> this.fooid = "";
> this.foodesc = "";
> this.webpage = "";
> }
>
>
> function IndDB(poolId) {
> this.poolId = poolId;
> this.hsql = null;
> //this.populate(); adds data to virtual db
> }
>
> IndDB.prototype.getConnection = function(id) {
> if (true) {
> // temporary hack to avoid requiring datasource config in cocoon.xconf
> java.lang.Class.forName("com.mysql.jdbc.Driver");
> var jdbc = java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/indicators", "me", "mypassword")
> var conn = new Database(jdbc);
> if (this.hsql == null) {
> // keep hsql in-memory database alive
> this.hsql = java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/indicators", "me", "mypassword");
> }
> return conn;
> } else {
> // lookup datasource in cocoon.xconf
> return Database.getConnection(id);
> }
> }
>
> IndDB.prototype.testDuplicateFoo = function(fooid) {
> var conn = this.getConnection(this.poolId);
> var rs = conn.query("select count(*) as ROWCOUNT from foo where fooid = ?", [fooid]);
> var result = rs.rows[0].ROWCOUNT;
> conn.close();
> return new Number(result);
> }
>
> //=================================
>
> and then in foo.js
>
> //=================================
>
> IndDB.prototype.getFoo = function(fooid) {
> var conn = this.getConnection(this.poolId);
> var result = conn.query("select * from foo where fooid = ?", [fooid]);
> var record = result.rows[0];
> conn.close();
> return record;
> }
>
> IndDB.prototype.insertFoo = function(model) {
> var conn = this.getConnection(this.poolId);
> conn.update("INSERT INTO foo (fooid, foodesc, webpage) VALUES (?, ?, ?)", [model.fooid, model.foodesc, model.webpage]);
> conn.close();
> }
>
> IndDB.prototype.updateFoo = function(model) {
> var conn = this.getConnection(this.poolId);
> conn.update("UPDATE foo SET fooid = ? , foodesc = ? , webpage = ? ", [model.fooid, model.foodesc, model.webpage]);
> conn.close();
> }
>
> function Foo() {
> this.fooid = "";
> this.foodesc = "";
> this.webpage = "";
> }
>
> function editFoo() {
> editFooData();
> cocoon.sendPage("db/foos");
> }
>
> function newFoo() {
> newFooData();
> cocoon.sendPage("db/foos");
> }
>
> function editFooData() {
> var editFooDataForm = new Form("view/forms/editFooForm_d.xml");
> var model = editFooDataForm.getModel();
> model.message = "";
> model.fooid = fooForm.fooid;
> model.foodesc = fooForm.foodesc;
> model.webpage = fooForm.webpage;
> editFooDataForm.showForm("view/editFooForm.cforms");
> fooForm.foo = getindDB().getFoo(fooForm.fooid);
> }
>
> function newFooData() {
> var newFooDataForm = new Form("view/forms/editFooForm_d.xml");
> var model = newFooDataForm.getModel();
> model.message = "";
> newFooDataForm.showForm("view/editFooForm.cforms");
> while (getIndDB().testDuplicateFoo(model.fooid) > 0) {
> model.message = "ID is already in use. Please choose another Foo ID.";
> newFootDataForm.showForm("view/newFooForm.cforms");
> }
> fooForm = new FooForm(model.fooid);
> fooForm.foo = new Foo();
> editFooData();
>
> }
>
> //=================================
>
> When I call editFoo?fooid=xyz I get
>
> An Error Occurred
> The undefined value has no properties.
> org.apache.avalon.framework.CascadingRuntimeException:
> The undefined value has no properties.
> cause: ConversionError: The undefined value has no properties.
> (file:/D:/tomcat/webapps/cocoon/projects/inddb/script/dbtest.js; line 28)
>
> (N.B. Line 28 is the "fun.apply(args);" call in the dbtest..js)
>
> Any help with how to go about debugging this is appreciated,
> along with some critical comment on perhaps streamlining the
> above approach - I also need to add a "deleteFoo()" function
> and some tips on how to write this would be appreciated.
>
> Thanks
> Derek
>
>


--

BlueXML
Jean-Christophe Kermagoret
Directeur associé
[EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


--
This message is subject to the CSIR's copyright, terms and conditions and e-mail legal notice.
Views expressed herein do not necessarily represent the views of the CSIR.

CSIR E-mail Legal Notice

CSIR Copyright, Terms and Conditions

For electronic copies of the CSIR Copyright, Terms and Conditions and the CSIR Legal Notice
send a blank message with "REQUEST LEGAL" in the subject line to CSIR HelpDesk


This message has been scanned for viruses and dangerous content by MailScanner,
and is believed to be clean. MailScanner thanks Transtec Computers for their support.